<?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: Genics Blog</title>
    <description>The latest articles on DEV Community by Genics Blog (@genicsblog).</description>
    <link>https://dev.to/genicsblog</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%2Forganization%2Fprofile_image%2F5289%2Fc9105cc5-e922-4698-b574-34f2704216db.png</url>
      <title>DEV Community: Genics Blog</title>
      <link>https://dev.to/genicsblog</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/genicsblog"/>
    <language>en</language>
    <item>
      <title>9 Hand Picked FREE Heroku Alternatives [2023]</title>
      <dc:creator>Gourav Khunger</dc:creator>
      <pubDate>Thu, 06 Jul 2023 10:18:59 +0000</pubDate>
      <link>https://dev.to/genicsblog/9-hand-picked-free-heroku-alternatives-2023-123e</link>
      <guid>https://dev.to/genicsblog/9-hand-picked-free-heroku-alternatives-2023-123e</guid>
      <description>&lt;p&gt;Beginning November 28, 2022, Heroku, one of the most popular go to choice used by developers to host their apps, announced that it would be shutting down its free tier.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Listen to the audio version of this article at &lt;a href="https://genicsblog.com/gouravkhunger/9-hand-picked-free-heroku-alternative-hosting-platforms" rel="noopener noreferrer"&gt;genicsblog.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Platform-as-a-Service (PaaS) provider's free tier used to provide a generous 550 hours of dyno uptime which could be easily extended to 1000 hours with a verified credit card.&lt;/p&gt;

&lt;p&gt;Even though these dynos shut down after 30 minutes, it could be resolved by various methods to &lt;a href="https://genicsblog.com/gouravkhunger/8-ways-to-keep-your-heroku-app-awake" rel="noopener noreferrer"&gt;keep Heroku apps awake&lt;/a&gt;, thus becoming the easiest way to host software projects for free.&lt;/p&gt;

&lt;p&gt;The free tier shutdown news left many developers in search for alternative hosting platforms that could provide a similar API and website hosting services free of cost. As a result, I have compiled a list of the top 9 free Heroku alternatives to use in 2023.&lt;/p&gt;

&lt;p&gt;If you are interested in watching a video format of this article, check this out:&lt;/p&gt;

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

&lt;p&gt;While there are many hosting platforms available in the market, these carefully selected services provide the best options for developers to host their Frontend/Backend applications, APIs, Servers, etc.&lt;/p&gt;

&lt;p&gt;These alternatives offer features similar to Heroku, such as support for multiple programming languages, easy deployment, and scalability. So whether you are a seasoned developer or just getting started, keep reading to discover the top free Heroku alternative hosting platforms:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Deta
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://deta.space" rel="noopener noreferrer"&gt;Deta space&lt;/a&gt; is a relatively new comer to the market but their offerings make them top our list. You can host both static and dynamic content within minutes.&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%2Ftowldklhxy7jbalaintd.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%2Ftowldklhxy7jbalaintd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whether it be building frontend or backend applications with any technology, Deta has got you covered with their infrastructure they call as the "Personal Cloud".&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No credit card verification required.&lt;/li&gt;
&lt;li&gt;Easy project deployments through their CLI application.&lt;/li&gt;
&lt;li&gt;No limits on the number of builds / deployments.&lt;/li&gt;
&lt;li&gt;Support for any kind of technology/framework to build your application.&lt;/li&gt;
&lt;li&gt;Free hosting for Node.js / Rust / Go / Custom backend apps as well as SvelteKit / Next / Static Apps.&lt;/li&gt;
&lt;li&gt;Free application uptime throughout the month.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;p&gt;The pros far outweigh the cons of Deta making it the best choice for developers to host their projects and applications and move away from Heroku.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploying on Deta requires initial project configuration and setup changes.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://deta.space/terms#113-hard-and-soft-limits" rel="noopener noreferrer"&gt;Resource usage limits&lt;/a&gt; are generous but may not be sufficient for everyone.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. GitHub Pages
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://pages.github.com" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt; is a free web hosting service provided by GitHub. You can easily create and host static websites served directly from your project's GitHub repository.&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%2Fahpfwplzc9qb1gaepng3.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%2Fahpfwplzc9qb1gaepng3.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It offers a simple and efficient way to serve static websites built with HTML, CSS, and JavaScript.&lt;/p&gt;

&lt;p&gt;It also supports popular website generators such as Jekyll, Hugo, Gatsby, etc. You can also use custom &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; to create your own publishing pipeline in a matter of minutes.&lt;/p&gt;

&lt;p&gt;GitHub Pages provides support for custom domains, HTTPS encryption, and easy integration with other GitHub features such as Git version control and issue tracking all for free!&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Free web hosting for static websites.&lt;/li&gt;
&lt;li&gt;Easy integration with other GitHub features.&lt;/li&gt;
&lt;li&gt;Support for popular static site generators.&lt;/li&gt;
&lt;li&gt;Simple and intuitive user interface for creating and managing websites.&lt;/li&gt;
&lt;li&gt;Ability to collaborate with other developers on the same repository and website.&lt;/li&gt;
&lt;li&gt;Good performance and reliability due to GitHub's infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No support for dynamic websites or web applications.&lt;/li&gt;
&lt;li&gt;No support for server-side scripting or database integration.&lt;/li&gt;
&lt;li&gt;1 GB storage and 100 GB monthly bandwidth soft limit on the free tier.&lt;/li&gt;
&lt;li&gt;Not suitable for websites that require higher levels of security or scalability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This service is perfect for those who want to showcase their side projects, blogs, or portfolios without the need for complex infrastructure or hosting setups.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Oracle
&lt;/h2&gt;

&lt;p&gt;Oracle Cloud's &lt;a href="https://www.oracle.com/cloud/free/" rel="noopener noreferrer"&gt;free tier&lt;/a&gt; has been a game changer recently. The &lt;a href="https://www.oracle.com/cloud/free/#always-free" rel="noopener noreferrer"&gt;Always Free&lt;/a&gt; services provide unmatched resources for developers to build and deploy their apps, without worrying for usage limits.&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%2Fs2qags8fxbn1pgapo0vx.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%2Fs2qags8fxbn1pgapo0vx.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reliable services from Oracle.&lt;/li&gt;
&lt;li&gt;Host any kind of applications.&lt;/li&gt;
&lt;li&gt;VMs stay up indefinitely — No fret about downtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Requires credit card verification to begin usage.&lt;/li&gt;
&lt;li&gt;Platform complexity makes it not so easy to use.&lt;/li&gt;
&lt;li&gt;Manual configurations required for deployment.&lt;/li&gt;
&lt;li&gt;Overkill for small / medium projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Cloudflare Pages
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://pages.cloudflare.com" rel="noopener noreferrer"&gt;Cloudflare Pages&lt;/a&gt; is a part of the numerous services provided by Cloudflare for building and deploying static websites, APIs, and applications.&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%2F325jvji6uf5m23c49wmo.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%2F325jvji6uf5m23c49wmo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It provides a simple way for developers to create high-performance websites that are scalable, secure, and easily integrated with other Cloudflare services.&lt;/p&gt;

&lt;p&gt;Whether you are building a personal blog or a complex web application, Cloudflare Pages offers a range of features and benefits that make it a great choice for web development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Free web hosting for static and dynamic websites, including unlimited bandwidth and custom domain support.&lt;/li&gt;
&lt;li&gt;Full stack support with serverless functions using Cloudflare Workers.&lt;/li&gt;
&lt;li&gt;Unlimited preview deployments for your projects!&lt;/li&gt;
&lt;li&gt;Support for redirects and headers for files.&lt;/li&gt;
&lt;li&gt;Automatic SSL encryption and security features, including DDoS protection and firewall rules.&lt;/li&gt;
&lt;li&gt;Easy integration with popular Git-based version control systems like GitHub, GitLab, and Bitbucket.&lt;/li&gt;
&lt;li&gt;Support for popular web frameworks like React, Next.js, Vue.js, Angular, etc.&lt;/li&gt;
&lt;li&gt;Fast and reliable global content delivery network (CDN) powered by Cloudflare's infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;500 builds per month hard limit.&lt;/li&gt;
&lt;li&gt;A maximum of 20,000 files per deployment where each file should be less than 25 MiB.&lt;/li&gt;
&lt;li&gt;Complexity for developers who are not familiar with serverless architecture or the Cloudflare ecosystem.&lt;/li&gt;
&lt;li&gt;No built-in database support, although these can be integrated with third-party services.&lt;/li&gt;
&lt;li&gt;Limited support for legacy web technologies or platforms that are not Git-based.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This service is the most suited for those who already use Cloudflare services with their existing websites and are looking to migrate to a different hosting platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Vercel
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; is a cloud-based platform that provides users with the most modern UI/UX to deploy their websites and applications within minutes. It is focused on providing an easy-to-use solution for building and deploying websites and applications.&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%2Fidaizzf7ud0ueuat7uu5.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%2Fidaizzf7ud0ueuat7uu5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has become a popular choice among developers who are looking for a platform that can offer serverless deployment, scalability, and performance. With Vercel, developers can easily deploy their code and enjoy fast loading speeds, excellent scalability, and reliability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Best for Next.js powered projects.&lt;/li&gt;
&lt;li&gt;Easy to use dashboard built for fast deployments.&lt;/li&gt;
&lt;li&gt;Automatic serverless deployment and scaling using its cloud infrastructure and CDN.&lt;/li&gt;
&lt;li&gt;Easy for developers to handle traffic spikes and scaling needs.&lt;/li&gt;
&lt;li&gt;Extensive library of plugins and support for integrations, and add-ons.&lt;/li&gt;
&lt;li&gt;Excellent documentation and community support.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vercel.com/guides/can-vercel-sponsor-my-open-source-project" rel="noopener noreferrer"&gt;Vercel Sponsorships&lt;/a&gt; for open-source projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vercel's free plan has &lt;a href="https://vercel.com/docs/concepts/limits/overview" rel="noopener noreferrer"&gt;various limitations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Although it supports popular web frameworks like Next.js and Nuxt.js, it is not the best choice if you require more flexibility and control over your stack.&lt;/li&gt;
&lt;li&gt;It is a cloud-based platform, which means that developers do not have complete control over the underlying infrastructure and environment.&lt;/li&gt;
&lt;li&gt;Vercel's recently launched &lt;a href="https://vercel.com/blog/vercel-storage" rel="noopener noreferrer"&gt;serverless storage solutions&lt;/a&gt; are relatively new.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Railway
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://railway.app" rel="noopener noreferrer"&gt;Railway&lt;/a&gt; is like a copy of Heroku but with slight differences. The platform's UX is top notch, and their pricing and restrictions are good enough to make it a viable Heroku alternative.&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%2F6yimfit4qat7we2forrq.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%2F6yimfit4qat7we2forrq.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Platform experience is very similar to Heroku with the UI being very modern.&lt;/li&gt;
&lt;li&gt;Deploy any kind of API / website tech stack.&lt;/li&gt;
&lt;li&gt;Great documentation to get started with.&lt;/li&gt;
&lt;li&gt;Easy integration with GitHub to deploy your repository.&lt;/li&gt;
&lt;li&gt;All plans include preview environments for each PR, Multiple custom domains with SSL, deploy from any GitHub repository, etc.&lt;/li&gt;
&lt;li&gt;Built-in database integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Limited resources without credit card verification. Once verified, it is generous enough to sustain small / medium scale projects for free.&lt;/li&gt;
&lt;li&gt;Even though they bill for resource usages by the minute, it can become expensive quickly if you pass the limits.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Render
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://render.com" rel="noopener noreferrer"&gt;Render&lt;/a&gt; is a powerful cloud platform designed to simplify the process of building, deploying, and scaling websites and applications. It has gained popularity among developers due to its ease of use, reliability, and robust set of features.&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%2F04g4ikwt6elqwpv1mmph.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%2F04g4ikwt6elqwpv1mmph.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Render offers a generous free tier with ample resources, including free SSL certificates and custom domain support.&lt;/li&gt;
&lt;li&gt;Automatic scaling and zero-downtime deployments, ensuring your website or application can handle traffic spikes and updates without interruption.&lt;/li&gt;
&lt;li&gt;Support for a wide range of programming languages and frameworks like Node, Python, Go, Rust, PHP, Elixir, Docker, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Render deletes Free tier PostgreSQL databases after 90 days from creation, making their database services unusable without paying a fee.&lt;/li&gt;
&lt;li&gt;May become expensive for scaling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Cyclic
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cyclic.sh" rel="noopener noreferrer"&gt;Cyclic&lt;/a&gt; is designed to streamline your DevOps workflows and revolutionize the way you approach continuous integration and deployment. With Cyclic, developers can harness the power of automation to build, test, and deploy their applications effortlessly.&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%2Fyagxcwbpb3ojkpc7izer.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%2Fyagxcwbpb3ojkpc7izer.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Apps on Cyclic do not sleep even on the free tier.&lt;/li&gt;
&lt;li&gt;Cyclic's smart caching technology delivers the best performance globally.&lt;/li&gt;
&lt;li&gt;Features its cron jobs technology with 1 second precision triggering.&lt;/li&gt;
&lt;li&gt;Easily scalable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;As of now, Cyclic supports JavaScript, TypeScript, and Python runtimes only.&lt;/li&gt;
&lt;li&gt;Good for APIs but not for other types of projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. Fly.io
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://fly.io" rel="noopener noreferrer"&gt;Fly.io&lt;/a&gt; is an edge computing platform that empowers developers to optimize their applications for lightning-fast performance and global delivery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fly.io features a vast network of edge servers strategically placed around the world to bring your applications closer to your users.&lt;/li&gt;
&lt;li&gt;Generous free allowance to run small scale apps.&lt;/li&gt;
&lt;li&gt;Supports many languages and frameworks like Go, Crystal, RedwoodJS, Python, Ruby, Deno, etc.&lt;/li&gt;
&lt;li&gt;Seamless traffic shifting and canary deployments to roll out updates gradually, ensuring a smooth transition while minimizing the risk of errors or downtime.&lt;/li&gt;
&lt;li&gt;In depth &lt;a href="https://fly.io/docs/rails/getting-started/migrate-from-heroku/" rel="noopener noreferrer"&gt;migration from Heroku&lt;/a&gt; guide.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The learning curve to use Fly.io can be steep.&lt;/li&gt;
&lt;li&gt;Better alternatives exist to host small scale apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Notable mentions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.netlify.com" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; and &lt;a href="https://firebase.google.com" rel="noopener noreferrer"&gt;Firebase&lt;/a&gt; are also great tools to deploy basic frontend apps for free.&lt;/li&gt;
&lt;li&gt;If you need finer control over your stack, &lt;a href="https://aws.amazon.com" rel="noopener noreferrer"&gt;AWS&lt;/a&gt; / &lt;a href="https://cloud.google.com" rel="noopener noreferrer"&gt;GCP&lt;/a&gt; / &lt;a href="https://azure.microsoft.com" rel="noopener noreferrer"&gt;Azure&lt;/a&gt; are the leading cloud services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I hope this comprehensive list of 9 hand picked Heroku alternatives that you should be using in 2023 helps you evaluate your options for deploying your backend APIs and frontend applications.&lt;/p&gt;

&lt;p&gt;Did I miss any great option? Leave a comment below to start a discussion.&lt;/p&gt;

&lt;p&gt;Thank you for reading so far!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>backend</category>
    </item>
    <item>
      <title>Genics Log #2: Sponsorship from Vercel, Theme updates, Organic Growth and more</title>
      <dc:creator>Gourav Khunger</dc:creator>
      <pubDate>Sun, 19 Jun 2022 06:14:19 +0000</pubDate>
      <link>https://dev.to/genicsblog/genics-log-2-sponsorship-from-vercel-theme-updates-organic-growth-and-more-3nfn</link>
      <guid>https://dev.to/genicsblog/genics-log-2-sponsorship-from-vercel-theme-updates-organic-growth-and-more-3nfn</guid>
      <description>&lt;p&gt;Welcome to the second issue in the &lt;a href="https://dev.to/category/genics-log"&gt;Genics log&lt;/a&gt; series! I know this is super late in the month, but I wanted to share some updates on the blog from the past months.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://genicsblog.com/genics-log-2"&gt;Listen to this article at Genics Blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before diving into the latest news at Genics, I would like to introduce myself. I am &lt;a href="https://gouravkhunger.xyz"&gt;Gourav Khunger&lt;/a&gt;, the founder of &lt;a href="https://genicsblog.com"&gt;Genics Blog&lt;/a&gt;. I am a teenager from India who is passionate about software development and &lt;a href="https://dev.to/tag/open-source/"&gt;open source&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the &lt;a href="https://genicsblog.com/genics-log-1"&gt;last article&lt;/a&gt; in this series, we talked about how we went open source and how we managed to grow from 200 visitors/month to 500+ visitors/month, along with sponsorship from &lt;a href="https://beyondwords.io/?utm_source=genicsblog.com&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=advertisement"&gt;BeyondWords&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This log is more inclined towards the core theme infrastructure and how we managed to grow our community to 600+ readers now.&lt;/p&gt;

&lt;p&gt;Let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Staging ENVs with Vercel
&lt;/h2&gt;

&lt;p&gt;This was a crucial step in forming a better infrastructure for building &lt;a href="https://github.com/genicsblog/theme-files"&gt;the theme&lt;/a&gt; and its plugins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Previous setup
&lt;/h3&gt;

&lt;p&gt;From the beginning itself, I planned to create a separate repository for the theme just because it would allow us to use a separate GitHub Pages for &lt;a href="https://staging.genicsblog.com"&gt;staging.genicsblog.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/genicsblog/theme-files/blob/aa7944b1943dbb7206b013dcc1d8102f8c48875e/.github/workflows/setup-staging.yml"&gt;This&lt;/a&gt; was the GitHub Actions file that deployed the theme to staging url. We made sure to block indexing using the &lt;code&gt;robots.txt&lt;/code&gt; file's &lt;code&gt;Disallow: /&lt;/code&gt; directive.&lt;/p&gt;

&lt;p&gt;But here comes the tricky part - the staging was not relevant until we were able to deploy PRs to preview them. Staging environment for approved and merged PRs didn't matter as much as environment for previewing the pending PRs.&lt;/p&gt;

&lt;p&gt;A huge problem was that we couldn't use repository secret variables in GitHub Actions if it ran using &lt;code&gt;pull_request&lt;/code&gt; event but those variables are needed to deploy to gh-pages.&lt;/p&gt;

&lt;p&gt;For that, we had to use &lt;code&gt;pull_request_target&lt;/code&gt; event trigger which allows PR actions to use the repository secrets to access the staging environment.&lt;/p&gt;

&lt;p&gt;But the catch here is, this comes with &lt;strong&gt;security vulnerabilities&lt;/strong&gt; as the PRs are run in the context of the repository base and not the PR base.&lt;/p&gt;

&lt;p&gt;This could mean that user can manipulate the workflow file to misuse the repository secrets!&lt;/p&gt;

&lt;h3&gt;
  
  
  Vulnerability in main repository
&lt;/h3&gt;

&lt;p&gt;The above mentioned issue was actually present in the main repository. I had setup a workflow for PRs using &lt;code&gt;pull_request_target&lt;/code&gt; because I wanted to automerge "correct" changes to drafts by authors.&lt;/p&gt;

&lt;p&gt;YES, this was a big mistake but fortunately, no one exploited this vulnerability using which one could clean up the whole repository in minutes (making a delete commit and managing to automerge it using repo secrets).&lt;/p&gt;

&lt;p&gt;I did have security measures in place:&lt;/p&gt;

&lt;p&gt;An &lt;a href="https://github.com/genicsblog/genicsblog.com/blob/8f8d936e72d886af28ea232d6e90eaa1442c6518/.github/workflows/validate-drafts.yml#L57-L64"&gt;automerge&lt;/a&gt; happened &lt;a href="https://github.com/genicsblog/genicsblog.com/blob/8f8d936e72d886af28ea232d6e90eaa1442c6518/.github/workflows/validate-drafts.yml#L54"&gt;only if&lt;/a&gt; the PR changes article files that are owned by the specific author. The &lt;a href="https://github.com/genicsblog/theme-files/blob/aa7944b1943dbb7206b013dcc1d8102f8c48875e/_scripts/validate-drafts.py"&gt;python script&lt;/a&gt; referenced takes in the list of files changed in the PR and goes through them to verify if the PR author is the actual author of the article files.&lt;/p&gt;

&lt;p&gt;Now, you could argue that a person could change the script in the PR and this check would easily be bypassed. That is the reason that the workflow uses &lt;code&gt;wget&lt;/code&gt; to download the script from the main branch and then run it. It &lt;a href="https://github.com/genicsblog/genicsblog.com/blob/8f8d936e72d886af28ea232d6e90eaa1442c6518/.github/workflows/validate-drafts.yml#L47-L48"&gt;deletes the scripts&lt;/a&gt; in the PR and downloads the correct one before running.&lt;/p&gt;

&lt;p&gt;But again, I was still skeptical of the &lt;code&gt;pull_request_target&lt;/code&gt; event trigger. The docs don't clearly mention it, but I am not sure - If the action runs in context of the PR base, then is it possible that the author change the action script and bypasses the script download and other verification checks?&lt;/p&gt;

&lt;p&gt;This is the reason we now moved to Vercel to off-load all these security issues and still be able to deploy staging ENVs!&lt;/p&gt;

&lt;h3&gt;
  
  
  Sponsorship from Vercel
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://vercel.com/?utm_source=genicsblog&amp;amp;utm_campaign=oss"&gt;Vercel&lt;/a&gt;{:rel="dofollow"} was generous enough to sponsor our &lt;a href="http://github.com/genicsblog/genicsblog.com"&gt;GitHub organization&lt;/a&gt; to be able to deploy organization repositories for free!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Vercel is a platform for frontend frameworks and static sites, built to integrate with your headless content, commerce, or database.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This sponsorship now enables us to remove our vulnerable GitHub actions and migrate to Vercel deployments. It was as easy as setting up the installation and build scripts. Vercel automatically deploys all PRs to staging environments!&lt;/p&gt;

&lt;p&gt;Now we can easily preview pull requests and test them visually before moving them to production!&lt;/p&gt;

&lt;h2&gt;
  
  
  Theme updates
&lt;/h2&gt;

&lt;p&gt;We have worked on massive improvements to the theme and its plugins!&lt;/p&gt;

&lt;h3&gt;
  
  
  Paginating author pages (&lt;a href="https://github.com/genicsblog/theme-files/issues/7"&gt;#7&lt;/a&gt;)
&lt;/h3&gt;

&lt;p&gt;This was by far the biggest need for the theme. Author pages &lt;a href="https://genicsblog.com/author/gouravkhunger/"&gt;like this&lt;/a&gt; could get super big without pagination and that affects load times a lot.&lt;/p&gt;

&lt;p&gt;This was a big problem for the Jekyll community as well - there was no plugin to handle multiple authors with ease.&lt;/p&gt;

&lt;p&gt;This lead me to spend time messing with &lt;a href="https://github.com/sverrirs/jekyll-paginate-v2"&gt;jekyll-paginate-v2&lt;/a&gt; and understanding how its pagination works. With some days of effort, I came up with &lt;a href="https://github.com/gouravkhunger/jekyll-auto-authors"&gt;jekyll-auto-authors&lt;/a&gt; which completely simplifies the process of paginating author pages!&lt;/p&gt;

&lt;p&gt;Here's an &lt;a href="https://genicsblog.com/gouravkhunger/adding-multiple-authors-to-a-jekyll-blog-got-easier#2-using-my-plugin-jekyll-auto-authors"&gt;in-depth tutorial&lt;/a&gt; on using the plugin to paginate author pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Shortcut commands (&lt;a href="https://github.com/genicsblog/theme-files/issues/10"&gt;#10&lt;/a&gt;)
&lt;/h3&gt;

&lt;p&gt;There are new shortcut commands you can use to perform these actions on the site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opening up search bar: &lt;code&gt;command&lt;/code&gt; + &lt;code&gt;K&lt;/code&gt; or &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;K&lt;/code&gt;. To close it please use the &lt;code&gt;Esc&lt;/code&gt; key.&lt;/li&gt;
&lt;li&gt;Toggling the site theme: &lt;code&gt;command&lt;/code&gt; + &lt;code&gt;shift&lt;/code&gt; + &lt;code&gt;L&lt;/code&gt; or &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;L&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Copy button for code blocks (&lt;a href="https://github.com/genicsblog/theme-files/issues/1"&gt;#1&lt;/a&gt;)
&lt;/h3&gt;

&lt;p&gt;Copy buttons on code blocks have been given an overhaul and provide a much nicer user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Spam comments
&lt;/h3&gt;

&lt;p&gt;In light of &lt;a href="https://github.com/genicsblog/comments/pull/122"&gt;recent spam abuse&lt;/a&gt; of our commenting system, we have removed the comment system for now. We might use &lt;a href="https://giscus.app"&gt;giscus&lt;/a&gt; in future but there's no plans for it right now.&lt;/p&gt;

&lt;p&gt;Please use our &lt;a href="https://discord.genicsblog.com"&gt;Discord server&lt;/a&gt; for discussions on articles on the site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other updates
&lt;/h3&gt;

&lt;p&gt;Here are some minor but relevant updates we've made to the theme:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More open-graph meta tags (&lt;a href="https://github.com/genicsblog/theme-files/issues/39"&gt;#39&lt;/a&gt;): better for SEO.&lt;/li&gt;
&lt;li&gt;Migration to GA4 (&lt;a href="https://github.com/genicsblog/theme-files/issues/21"&gt;#21&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Selection color for code blocks (&lt;a href="https://github.com/genicsblog/theme-files/issues/28"&gt;#28&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Refactoring series pages (&lt;a href="https://github.com/genicsblog/theme-files/issues/2"&gt;#2&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;For authors: tools like &lt;a href="https://genicsblog.com/tool/frontmatter-generator"&gt;frontmatter generator&lt;/a&gt; (&lt;a href="https://github.com/genicsblog/genicsblog.com/issues/93"&gt;#93&lt;/a&gt;) and &lt;a href="https://genicsblog.com/tool/thumbnail-generator"&gt;thumbnail generator&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Licensing for the theme and articles (&lt;a href="https://github.com/genicsblog/genicsblog.com/discussions/136"&gt;#136&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stats
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Open Source
&lt;/h3&gt;

&lt;p&gt;Here are the stats that changed from the last time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/genicsblog/genicsblog.com"&gt;&lt;code&gt;genicsblog.com&lt;/code&gt;&lt;/a&gt; (Main repo with posts and data files): &lt;strong&gt;25 stars&lt;/strong&gt;, &lt;strong&gt;20 forks&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/genicsblog/theme-files"&gt;&lt;code&gt;theme-files&lt;/code&gt;&lt;/a&gt; (Basically template files): &lt;strong&gt;7 stars&lt;/strong&gt;, &lt;strong&gt;9 fork&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Google Analytics
&lt;/h3&gt;

&lt;p&gt;Here are the recent 30-day stats from our Google Analytics:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S5JW6w4i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/46792249/173242642-81e97597-073b-4068-b1ff-3fb0eac8633b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S5JW6w4i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/46792249/173242642-81e97597-073b-4068-b1ff-3fb0eac8633b.png" alt="Genics blog's past 30 days Google Analytics Stats" width="642" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join our &lt;a href="https://discord.genicsblog.com"&gt;Discord server&lt;/a&gt; to view these public stats every day :)&lt;/p&gt;

&lt;h3&gt;
  
  
  Organic Stats
&lt;/h3&gt;

&lt;p&gt;Almost 40-50% of our monthly traffic is through organic channels!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gEKowZLb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/46792249/173243091-49771902-7e9b-4eed-b37b-a911641ace8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gEKowZLb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/46792249/173243091-49771902-7e9b-4eed-b37b-a911641ace8c.png" alt="Genics blog's past 3 month Google Search Console Stats" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Words
&lt;/h2&gt;

&lt;p&gt;It's been an absolute rollercoaster ride for us to get to this point! It was from 100 readers a month in December when I decided to open source the blog and start working on a newer and better version of it. And here we are, scaled to 600+ readers within 3 months!&lt;/p&gt;

&lt;p&gt;In the near future, I plan to continue working on the improvements and scale to at least 5k readers per month. Up to that point, we will focus mainly on putting out quality content that people find insightful while focusing on gaining traffic through organic channels mainly.&lt;/p&gt;

&lt;p&gt;After the 5k checkpoint, there will be great things to come ;)&lt;/p&gt;

&lt;p&gt;Looking forward to your feedback and suggestions!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>blog</category>
      <category>news</category>
    </item>
    <item>
      <title>Kotlin: Multi-dimensional Arrays</title>
      <dc:creator>Gourav Khunger</dc:creator>
      <pubDate>Mon, 09 May 2022 16:47:42 +0000</pubDate>
      <link>https://dev.to/genicsblog/kotlin-multi-dimensional-arrays-3hl8</link>
      <guid>https://dev.to/genicsblog/kotlin-multi-dimensional-arrays-3hl8</guid>
      <description>&lt;p&gt;At some point of time, we all have worked with arrays. It is a useful data structure to store multiple values of the same type in a single variable. Complex usage of arrays includes storing data in 2D, 3D, or other multidimensional arrays. This allows us to represent things like matrices, grids, and cubes effectively.&lt;/p&gt;

&lt;p&gt;In this tutorial, we will specifically focus on declaring, initializing and using 2D, 3D, and other multidimensional arrays in the Kotlin programming language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-requisites
&lt;/h2&gt;

&lt;p&gt;To understand multi-dimensional arrays and lists in kotlin, you need to have a proper understanding of 1D arrays. I have published an intuitive article about kotlin arrays similar to this one, do &lt;a href="https://genicsblog.com/gouravkhunger/kotlin-multi-dimensional-2d-3d-etc-array-initialization"&gt;read the article&lt;/a&gt; before proceeding.&lt;/p&gt;

&lt;h2&gt;
  
  
  2D Arrays in Kotlin
&lt;/h2&gt;

&lt;p&gt;2D arrays are a convenient way to store grid/board/matrix type of data.&lt;/p&gt;

&lt;p&gt;If we dig deep into Kotlin Standard Library, the function &lt;code&gt;arrayOf()&lt;/code&gt; is actually returning &lt;code&gt;Array&amp;lt;T&amp;gt;&lt;/code&gt; where &lt;code&gt;T&lt;/code&gt; is the type of the elements in the array. This effectively means that if we pass in &lt;code&gt;T&lt;/code&gt; we get out an array &lt;code&gt;Array&amp;lt;T&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This means if we pass in &lt;code&gt;arrayOf()&lt;/code&gt; into the &lt;code&gt;arrayOf()&lt;/code&gt; function, we effectively get out &lt;code&gt;Array&amp;lt;Array&amp;lt;T&amp;gt;&amp;gt;&lt;/code&gt; and that is exactly the representation of 2D Arrays!&lt;/p&gt;

&lt;h3&gt;
  
  
  2D Arrays with pre-defined data
&lt;/h3&gt;

&lt;p&gt;Let's see how to make 2D arrays with predefined values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;array&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&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="nf"&gt;arrayOf&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="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&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;This creates a 2D Kotlin array which is a collection of 1D Kotlin arrays. Here's a representation of the array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;General Form:
[[1 2 3], [4,5,6], [7,8,9]]

As a matrix:
1 2 3
4 5 6
7 8 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again, these arrays are not type-safe. You can add another data type to the array without any issue. To make it type-safe, we need to declare the type of the array during initialization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;array&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;(&lt;/span&gt; &lt;span class="c1"&gt;// Declaring the type gives error if data types are mixed&lt;/span&gt;
    &lt;span class="nf"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;arrayOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&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="s"&gt;"this string will give error"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nf"&gt;arrayOf&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="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&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;
  
  
  2D arrays with dynamic size
&lt;/h3&gt;

&lt;p&gt;To create 2D lists where we don't have a fixed known size, we use &lt;code&gt;mutableListOf&amp;lt;MutableList&amp;lt;T&amp;gt;&amp;gt;()&lt;/code&gt; declaration where &lt;code&gt;T&lt;/code&gt; is the data type we expect the inner lists to hold. We don't pass any initial value because the array will be populated using some logic later.&lt;/p&gt;

&lt;p&gt;Let's look at it in action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;list&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mutableListOf&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MutableList&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;()&lt;/span&gt;

&lt;span class="c1"&gt;// The elements within the inner lists can be anything, the numbers below are just an example.&lt;/span&gt;

&lt;span class="c1"&gt;// `repeat()` takes in a number and iterates from 0 to number-1&lt;/span&gt;
&lt;span class="nf"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// `row` is a new row in the array&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;row&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mutableListOf&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;

    &lt;span class="nf"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;// `col` is a new column in the row, ranges from 0 to 3&lt;/span&gt;
        &lt;span class="n"&gt;row&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;col&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Append the row to the array, can also use the `add()` function&lt;/span&gt;
    &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// for each list in the list, print its element in matrix form&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sublist&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&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="n"&gt;j&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sublist&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;indices&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"$j "&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// new line after each row&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cm"&gt;/*
You can also access particular elements like:
list[0][0] -&amp;gt; First element of the first row
or
list.get(0).get(0) -&amp;gt; Same as above
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code outputs the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 1 2 3 
0 1 2 3 
0 1 2 3 
0 1 2 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And hence we can create dynamic lists in kotlin as per our needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  N-Dimensional Arrays in Kotlin
&lt;/h2&gt;

&lt;p&gt;Using the approaches discussed above, it wouldn't be hard to create 3D, 4D or even more dimensional arrays.&lt;/p&gt;

&lt;p&gt;If the dataset you have is known, you can use the &lt;code&gt;arrayOf()&lt;/code&gt; function, or to have variable array data, you can go ahead with &lt;code&gt;mutableListOf()&lt;/code&gt; functions to create the arrays.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this tutorial you learned about the arrays and mutable lists in kotlin using &lt;code&gt;arrayOf()&lt;/code&gt; and &lt;code&gt;mutableListOf()&lt;/code&gt; functions.&lt;/p&gt;

&lt;p&gt;These functions help you to create arrays and lists of any data type in Kotlin, to store values and perform actions based on that data.&lt;/p&gt;

&lt;p&gt;I hope you find this tutorial useful. Share it with your friends who are beginning with kotlin!&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>android</category>
      <category>codenewbie</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Create a Pull Request in GitHub *Correctly*</title>
      <dc:creator>Gourav Khunger</dc:creator>
      <pubDate>Wed, 06 Apr 2022 07:50:23 +0000</pubDate>
      <link>https://dev.to/genicsblog/how-to-create-a-pull-request-in-github-correctly-20np</link>
      <guid>https://dev.to/genicsblog/how-to-create-a-pull-request-in-github-correctly-20np</guid>
      <description>&lt;p&gt;A major aspect of open source is the ability to create and maintain a community of developers who collaborate on building software together. Collaboration is a key component of open source development!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Read this article at &lt;a href="https://genicsblog.com/gouravkhunger/how-to-create-a-pull-request-in-github-correctly" rel="noopener noreferrer"&gt;genicsblog.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://git-scm.com" rel="noopener noreferrer"&gt;Git&lt;/a&gt; and &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; are popular open source collaboration tools. Git helps you keep track of changes to your code, and GitHub helps you share your code with others. In this article we will teach you how to create a pull request in GitHub in the correct way.&lt;/p&gt;

&lt;p&gt;We will use this &lt;a href="https://github.com/gouravkhunger/PRs-demo" rel="noopener noreferrer"&gt;demo repository&lt;/a&gt; to demonstrate the process on collaboration. Feel free to play with it and see how it works. Follow along the tutorial below.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Fork the Repository
&lt;/h2&gt;

&lt;p&gt;Forking a repository means you are creating a copy of the repository to your own GitHub account. This makes a clone of the repository that you can work on.&lt;/p&gt;

&lt;p&gt;Any changes to your fork will not affect the original repository! Thus, it is kind of a playground area for you to experiment with code/files.&lt;/p&gt;

&lt;p&gt;To fork a repository, simply press the &lt;strong&gt;Fork button&lt;/strong&gt; on the top right corner of the repository page:&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%2Fuser-images.githubusercontent.com%2F46792249%2F161415696-9e0772ed-60a6-4f5d-98d5-3976217fdc1a.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%2Fuser-images.githubusercontent.com%2F46792249%2F161415696-9e0772ed-60a6-4f5d-98d5-3976217fdc1a.png" alt="Fork button on GitHub"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This creates a new repository in your account.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Clone the Repository
&lt;/h2&gt;

&lt;p&gt;Cloning a repository means you are downloading the repository to your computer. This creates a folder that you will work on.&lt;/p&gt;

&lt;p&gt;Run this command in your terminal&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 https://github.com/&amp;lt;your-username&amp;gt;/PRs-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will clone the repository to a folder names &lt;code&gt;PRs-demo&lt;/code&gt; which you can &lt;code&gt;cd&lt;/code&gt; into:&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;cd &lt;/span&gt;PRs-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Create a New Branch
&lt;/h2&gt;

&lt;p&gt;Branching is a way to work on a different version of files in a project with Git version control. Creating a new branch is effective when you are working on a new feature or bug fix. Here's why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It helps to keep changes organised and clean.&lt;/li&gt;
&lt;li&gt;It separates changes from working code in main branch. In case of broken code, you can easily revert to the main branch.&lt;/li&gt;
&lt;li&gt;This also helps your fork's main branch clean once your PRs are merged (more on this later).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run this command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; &amp;lt;new-branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;&amp;lt;new-branch-name&amp;gt;&lt;/code&gt; is the name of the new branch. It can be anything like: &lt;code&gt;bug-fix&lt;/code&gt;, &lt;code&gt;feature-1&lt;/code&gt;, &lt;code&gt;feature-2&lt;/code&gt;, etc. For simplicity purpose you can keep it &lt;code&gt;learning-about-prs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;-b&lt;/code&gt; flag is used to create a new branch, and &lt;code&gt;checkout&lt;/code&gt; asks Git to switch to that new branch we created.&lt;/p&gt;

&lt;p&gt;To verify that you have correctly switched to the new branch, run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This should output something 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;* learning-about-prs
  main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;*&lt;/code&gt; verifies that you are currently on that branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Make Changes
&lt;/h2&gt;

&lt;p&gt;Now you can make Changes to the files in the project. Here, we just have a &lt;code&gt;README.md&lt;/code&gt; file. You can edit it and add this sentence to the end of the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; This line was added by &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;&amp;lt;Your Name Here&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://github.com/&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;your-username&amp;gt;&lt;/span&gt;).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure to replace &lt;code&gt;&amp;lt;Your Name Here&amp;gt;&lt;/code&gt; with your name and &lt;code&gt;&amp;lt;your-username&amp;gt;&lt;/code&gt; with your GitHub username!&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Commit your changes
&lt;/h2&gt;

&lt;p&gt;Committing your changes is crucial to save the current state of your project.&lt;/p&gt;

&lt;p&gt;You can check the current state of your project by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells us which files have changes that are not committed yet. The output would be something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;On branch learning-about-prs
Changes not staged for commit:
  (use "git add &amp;lt;file&amp;gt;..." to update what will be committed)
  (use "git restore &amp;lt;file&amp;gt;..." to discard changes in working directory)
    modified:   README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we can prepare the README.md file to be committed. Files that have finalised changes and are ready to be committed are moved to the staging area. Git only commited files that are staged, which provides us even more flexibility.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This adds all the changed files to the staging area. Optionally you can handpick files to be added.&lt;/p&gt;

&lt;p&gt;Now, you can make a commit by running this command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;Commit Message&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here &lt;code&gt;-m&lt;/code&gt; flag lets us add a message to our commit. This message is helpful for other people viewing change history of the project. Replace &lt;code&gt;&amp;lt;Commit Message&amp;gt;&lt;/code&gt; with a short summary of the changes you made. For example: "Added a new line to the README.md file".&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Push changes to your fork
&lt;/h2&gt;

&lt;p&gt;Now that you have committed the file locally, you need to send this file over to your fork present on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: GitHub doesn't automatically know about your commits made locally. You need to push the commits yourself.&lt;/p&gt;

&lt;p&gt;Since you have made changes to &lt;code&gt;learning-about-prs&lt;/code&gt;, you can push them to GitHub with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin learning-about-prs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we are asking git to &lt;code&gt;push&lt;/code&gt; our changes to the branch &lt;code&gt;learning-about-prs&lt;/code&gt; on the &lt;code&gt;origin&lt;/code&gt; present on GitHub (your fork).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-u&lt;/code&gt; sets the upstream for current branch so that you don't have to type &lt;code&gt;origin learning-about-prs&lt;/code&gt; everytime. From the next time, even if you type &lt;code&gt;git push&lt;/code&gt; it will push to &lt;code&gt;learning-about-prs&lt;/code&gt; branch on GitHub.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Additional Note:
&lt;/h3&gt;

&lt;p&gt;Here, &lt;code&gt;origin&lt;/code&gt; is linked to your fork. You can verify it by running this command in your terminal:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;This should show the &lt;code&gt;push&lt;/code&gt; and &lt;code&gt;fetch&lt;/code&gt; links which point to your fork.&lt;br&gt;
If you change these links by using &lt;code&gt;git remote rm origin&lt;/code&gt; and &lt;code&gt;git remote add origin &amp;lt;new-link&amp;gt;&lt;/code&gt;, the commits will be sent to new remote then!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  7. Make the PR
&lt;/h2&gt;

&lt;p&gt;Once you push your changes to GitHub, open the fork on GitHub. You will be able to see a a notification regarding the new commits to &lt;code&gt;learning-about-prs&lt;/code&gt; branch.&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%2Fuser-images.githubusercontent.com%2F46792249%2F161416102-4e803e63-f22c-4125-a5dd-38ee7c07bbc3.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%2Fuser-images.githubusercontent.com%2F46792249%2F161416102-4e803e63-f22c-4125-a5dd-38ee7c07bbc3.png" alt="Branch had recent pushes, Compare and pull request"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Press the &lt;code&gt;Compare and pull request&lt;/code&gt; button and you will be presented with an interface to create a pull request.&lt;/p&gt;

&lt;p&gt;Enter appropriate &lt;strong&gt;Title&lt;/strong&gt; and &lt;strong&gt;Comment&lt;/strong&gt; to our PR. This helps the reviewers know what changes you are making to the repository.&lt;/p&gt;

&lt;p&gt;Once you are done with adding the metadata to the PR, go ahead and press the "&lt;strong&gt;Create Pull Request&lt;/strong&gt;" button.&lt;/p&gt;

&lt;p&gt;Congratulations 🥳&lt;/p&gt;

&lt;p&gt;You've successfully made a Pull Request to a repository on GitHub!&lt;/p&gt;

&lt;p&gt;Using these steps you can create a Pull Request to any repository on GitHub!&lt;/p&gt;

&lt;h2&gt;
  
  
  (Optional) Useful Information
&lt;/h2&gt;

&lt;h3&gt;
  
  
  I forgot to make some required changes but made a PR, do I have to make a new one now?
&lt;/h3&gt;

&lt;p&gt;Absolutely no! GitHub is smart enough to handle this. &lt;strong&gt;You can't create more than one PR from a single branch&lt;/strong&gt;. This means that you can add more commits to the current branch and as soon as you push them, they will automatically go to the existing PR.&lt;/p&gt;

&lt;p&gt;Just add as many commits you want, to the branch and use &lt;code&gt;git push&lt;/code&gt;. That will send the commits to the existing PR, avoiding the need to create a new one from scratch!&lt;/p&gt;

&lt;h3&gt;
  
  
  Why do we create a new branch in the first place?
&lt;/h3&gt;

&lt;p&gt;There are quite a few reasons to it. The main one being it maintains a separation of concerns. One can work on differnt number of features at the same time without affecting existing working code.&lt;/p&gt;

&lt;p&gt;This also helps teams to assign different features to different people and collaborate on different parts of projects in realtime.&lt;/p&gt;

&lt;p&gt;Another reason is, once the reviewers approve and merge your changes, it adds a new commit to the original repository.&lt;/p&gt;

&lt;p&gt;Now your fork would get left behind because it doesn't automatically pull new changes from the original source.&lt;/p&gt;

&lt;p&gt;GitHub provides us with &lt;strong&gt;Fetch upstream&lt;/strong&gt; button to keep our fork in sync with the remote repository.&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%2Fuser-images.githubusercontent.com%2F46792249%2F161415987-2c9160b0-9f14-4ee6-b569-16c900b26950.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%2Fuser-images.githubusercontent.com%2F46792249%2F161415987-2c9160b0-9f14-4ee6-b569-16c900b26950.png" alt="Fetch upstream button on GitHub"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pressing &lt;strong&gt;Fetch and merge&lt;/strong&gt; gets changes from original repository to our fork allowing us to keep the fork up to date.&lt;/p&gt;

&lt;p&gt;If we had made changes directly to the main branch, it could cause merge conflicts as our fork would have different commits than original repository.&lt;/p&gt;

&lt;p&gt;Also, this could pollute the new PRs with old commits if the main branch of fork isn't kept up to date with original repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a good place to start with open source?
&lt;/h3&gt;

&lt;p&gt;Genics Blog is an &lt;a href="https://github.com/genicsblog" rel="noopener noreferrer"&gt;open source&lt;/a&gt; developer publication where we do a lot of open source work. We are a high school student run organisation. Join our &lt;a href="https://discord.genicsblog.com" rel="noopener noreferrer"&gt;community on Discord&lt;/a&gt; to learn about opportunities from experienced developers and get involved!&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Resources
&lt;/h2&gt;

&lt;p&gt;Check out this video where I use the steps taught here to create a PR to the &lt;a href="https://github.com/genicsblog/theme-files" rel="noopener noreferrer"&gt;&lt;code&gt;theme-files&lt;/code&gt;&lt;/a&gt; repository for &lt;a href="https://genicsblog.com" rel="noopener noreferrer"&gt;Genics Blog&lt;/a&gt; on GitHub:&lt;/p&gt;

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

&lt;p&gt;Watch at 1.25x speed for better experience :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This was a long but to the point Guide to create Pull Requests on GitHub which can help you to contribute to open source projects on GitHub.&lt;/p&gt;

&lt;p&gt;If you find this guide helpful, or have any related questions feel free to comment or &lt;a href="https://discord.genicsblog.com" rel="noopener noreferrer"&gt;join our discord&lt;/a&gt; to get help.&lt;/p&gt;

&lt;p&gt;Share this article with people who are new to open source world!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>15 underrated HTML attributes every web developer should know</title>
      <dc:creator>Abhiraj Bhowmick</dc:creator>
      <pubDate>Sun, 13 Feb 2022 14:37:32 +0000</pubDate>
      <link>https://dev.to/genicsblog/15-underrated-html-attributes-every-web-developer-should-know-5704</link>
      <guid>https://dev.to/genicsblog/15-underrated-html-attributes-every-web-developer-should-know-5704</guid>
      <description>&lt;p&gt;HTML may not be a programming language per se, but there's no doubt in the power it possesses. We often depend on external javascript libraries for some basic tasks, but need for some of them might end today!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pro tip: Save time by listening to the &lt;a href="https://genicsblog.com/underrated-html-attributes-every-webdev-should-know" rel="noopener noreferrer"&gt;audio of this article at Genics Blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this article we will discuss about &lt;strong&gt;15 HTML attributes&lt;/strong&gt; you probably did not know, but need to know for sure.&lt;/p&gt;

&lt;p&gt;Let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Autocomplete
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;autocomplete&lt;/code&gt; attributes specifies whether the browser is allowed to aid in filling out the form fields or not. If turned on, it will assist users with autofilling options such as email, phone numbers, nationality, and so on.&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;input&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"credit-card-number"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"credit-card-number"&lt;/span&gt; &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"off"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check out all the autocomplete values from the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete" rel="noopener noreferrer"&gt;MDN docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Download
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;download&lt;/code&gt; attribute on an anchor tag specifies that the file/object should be downloaded to the local storage when a user clicks on the hyperlink.&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;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"document.pdf"&lt;/span&gt; &lt;span class="na"&gt;download&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Download PDF&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Contenteditable
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;contenteditable&lt;/code&gt; attribute allows the user to edit the content of an element.&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;div&lt;/span&gt; &lt;span class="na"&gt;contenteditable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  You can now edit this text!
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Readonly
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;readonly&lt;/code&gt; attribute specifies that an input field is read-only and can't be edited.&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;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"sports"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"sports"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"golf"&lt;/span&gt; &lt;span class="na"&gt;readonly&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A user can still highlight it, and copy the text. To forbid those actions, use the &lt;code&gt;disabled&lt;/code&gt; attribute instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Accept
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;accept&lt;/code&gt; attribute states which file types are allowed to be selected in the input.&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;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;accept=&lt;/span&gt;&lt;span class="s"&gt;".jpg, .png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This attribute can only be used on an &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; tag with &lt;code&gt;type="file"&lt;/code&gt;. To allow all files of specific media type, use an asterisk beside its name. For example, &lt;code&gt;accept="image/*"&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Autofocus
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;autofocus&lt;/code&gt; attribute indicates that the particular element should be focused on page load.&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;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;autofocus&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Only one element in the HTML document or a dialog may have the autofocus attribute. If applied to multiple elements only the first one will receive focus.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Hidden
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;hidden&lt;/code&gt; attribute specifies whether or not the element is visible.&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;p&lt;/span&gt; &lt;span class="na"&gt;hidden&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;I am invincible 💪&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Spellcheck
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;spellcheck&lt;/code&gt; attribute defines whether the element is checked for spelling errors.&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;p&lt;/span&gt; &lt;span class="na"&gt;contenteditable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;spellcheck=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Cehck mai spellnig&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Controls
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;controls&lt;/code&gt; attribute specifies whether or not the audio/video controls should be displayed on the default player.&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;audio&lt;/span&gt; &lt;span class="na"&gt;controls&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"rick_roll.mp3"&lt;/span&gt;  &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"audio/mpeg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/audio&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Autoplay
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;autoplay&lt;/code&gt; attribute ensures that the audio/video will automatically start playing as soon as it is loaded.&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;video&lt;/span&gt; &lt;span class="na"&gt;autoplay&lt;/span&gt;
  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.mysite.com/media/myvideo.mp4"&lt;/span&gt;
  &lt;span class="na"&gt;poster=&lt;/span&gt;&lt;span class="s"&gt;"image.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  11. Cite
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;cite&lt;/code&gt; attribute is used to point out where a an element's content is taken from, or referred to.&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;blockquote&lt;/span&gt; &lt;span class="na"&gt;cite=&lt;/span&gt;&lt;span class="s"&gt;"https://genicsblog.com/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;An awesome publication for developers.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/blockquote&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  12. Datetime
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;datetime&lt;/code&gt; attribute specifies the date and time when the text was deleted/inserted.&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;p&amp;gt;&lt;/span&gt;
  My plans for 2023 include joining Google as a SDE,
  &lt;span class="nt"&gt;&amp;lt;del&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2021-01-01T18:21"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;creating 6 courses,&lt;span class="nt"&gt;&amp;lt;/del&amp;gt;&lt;/span&gt; 
  &lt;span class="nt"&gt;&amp;lt;ins&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2021-02-02T14:07"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;writing 12 articles.&lt;span class="nt"&gt;&amp;lt;/ins&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;I will evaluate the completion on &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2021-12-31"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/time&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  13. Async
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;async&lt;/code&gt; attribute ensures the script is executed asynchronously with the rest of the page.&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://icanheckyou.com/heckingScript.js"&lt;/span&gt; &lt;span class="na"&gt;async&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;&lt;strong&gt;Note&lt;/strong&gt;: The &lt;code&gt;async&lt;/code&gt; attribute has an effect on external scripts only.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Defer
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;defer&lt;/code&gt; attribute ensures the script is executed when the page has finished parsing.&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://anotherhecker.com/heckingScriptAgainCozWhyNot.js"&lt;/span&gt; &lt;span class="na"&gt;defer&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;&lt;strong&gt;Note&lt;/strong&gt;: The &lt;code&gt;defer&lt;/code&gt; attribute has an effect on external scripts only.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Inputmode
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;inputmode&lt;/code&gt; attribute hints at the type of data that might be entered by the user while editing the element or its contents. It also helps the mobile browsers to display the keyboard in the appropriate mode.&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;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;inputmode=&lt;/span&gt;&lt;span class="s"&gt;"url"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;inputmode=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;inputmode=&lt;/span&gt;&lt;span class="s"&gt;"numeric"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Thanks for reading!
&lt;/h3&gt;

&lt;p&gt;I hope this article was able to help you learn more about HTML and share some knowledge with you.&lt;/p&gt;

&lt;p&gt;If you liked this post, subscribe to my &lt;a href="https://abhirajbhowmick.substack.com" rel="noopener noreferrer"&gt;newsletter&lt;/a&gt; to never miss out on &lt;a href="https://abhiraj.co" rel="noopener noreferrer"&gt;my blogs&lt;/a&gt;, product launches, and tech news. Follow me on &lt;a href="https://twitter.com/rainboestrykr" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; for daily threads on web dev resources!&lt;/p&gt;

</description>
      <category>html</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>GitHub Repositories to Crush any Programming Interview!</title>
      <dc:creator>Arindol Sarkar</dc:creator>
      <pubDate>Sun, 13 Feb 2022 13:45:16 +0000</pubDate>
      <link>https://dev.to/genicsblog/github-repositories-to-crush-any-programming-interview-5f8f</link>
      <guid>https://dev.to/genicsblog/github-repositories-to-crush-any-programming-interview-5f8f</guid>
      <description>&lt;p&gt;Programming Interviews may be frustrating and tough. If you have any phobia regarding programming interviews, have no fear, because this articles is for you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pro tip: Save time by listening to the audio version of &lt;a href="https://genicsblog.com/github-repositories-to-crush-any-programming-interview" rel="noopener noreferrer"&gt;this article at Genics Blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Today I'll be disclosing some repositories, you can visit to ace in any programming interviews. These were rated based on popularity, usability and reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://github.com/jwasham/coding-interview-university" rel="noopener noreferrer"&gt;Coding Interview University&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2FUtbdPhu.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%2Fi.imgur.com%2FUtbdPhu.png" alt="Coding Interview University"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This repository helps students prepare for companies like Amazon, Microsoft, Apple, etc. Some of the key features are : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is my multi-month study plan to become a software engineer for a large company.&lt;/li&gt;
&lt;li&gt;If you missed out on getting a degree in computer science, this will catch you up and save four years of your life.&lt;/li&gt;
&lt;li&gt;Note this is a study plan for software engineering, not web development. Large software companies like Google, Amazon, Facebook and Microsoft view software engineering as different from web development.&lt;/li&gt;
&lt;li&gt;The repository carefully differentiate between the topics, into Planning, Topic, and optional topics to cover to get a edge over others.&lt;/li&gt;
&lt;li&gt;It's a long plan. It may take you months. However, if you are familiar with a lot of this already it will take you a lot less time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://github.com/yangshun/tech-interview-handbook" rel="noopener noreferrer"&gt;Tech Interview Handbook&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2FOySmku6.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%2Fi.imgur.com%2FOySmku6.png" alt="Tech Interview Handbook"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has curated interview preparation materials for busy engineers. Some of the key elements are : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There are free and curated technical interview preparation materials for busy engineers, brought to you by the author of the Blind 75 list.&lt;/li&gt;
&lt;li&gt;Besides the usual algorithm questions, it includes "Best practice questions for coding interviews", "How to prepare for coding interviews", "Straight-to-the-point Do's and Don'ts", "Algorithm tips categorized by topic", and many more.&lt;/li&gt;
&lt;li&gt;This repository has practical content that covers all phases of a technical interview, from applying for a job to passing the interviews to offer negotiation. Technically competent candidates might still find the non-technical content helpful.&lt;/li&gt;
&lt;li&gt;The key to succeeding in technical interviews is consistent practice. It doesn't bore you with too many words, and keeps everything to the point.&lt;/li&gt;
&lt;li&gt;The difference between this repository and others is that many existing interview repositories contain mainly links to external resources whereas this repository contains top-quality curated content directly for your consumption.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://github.com/sudheerj/javascript-interview-questions" rel="noopener noreferrer"&gt;Javascript Interview Questions&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2F7WL4M2b.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%2Fi.imgur.com%2F7WL4M2b.png" alt="Javascript Interview Questions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This repo contains a huge list of 1000 JavaScripts Interview Questions. Some of the main features are : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take this JavaScript Projects course to go from a JavaScript beginner to confidently building your own projects.&lt;/li&gt;
&lt;li&gt;Take this coding interview bootcamp if you’re serious about getting hired and don’t have a CS degree.&lt;/li&gt;
&lt;li&gt;Take this Advanced JavaScript Course to learn advanced JS concepts and become a top JS developer.&lt;/li&gt;
&lt;li&gt;You can download the PDF and Epub version of this repository. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://github.com/trekhleb/javascript-algorithms" rel="noopener noreferrer"&gt;JavaScript Algorithms&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2FYDMQUNo.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%2Fi.imgur.com%2FYDMQUNo.png" alt="JavaScript Algorithms"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has JavaScript based examples of many popular algorithms and data structures explained. Some of the key features are : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each algorithm and data structure has its own separate README with related explanations and links for further reading (including ones to YouTube videos).&lt;/li&gt;
&lt;li&gt;The beginners and advanced are separated by using symbols &lt;code&gt;B&lt;/code&gt; and &lt;code&gt;A&lt;/code&gt; respectively.&lt;/li&gt;
&lt;li&gt;This repository has a seperate content for each topic in a systematic way.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. &lt;a href="https://github.com/vasanthk/how-web-works" rel="noopener noreferrer"&gt;How Web Works&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2FQI8EVky.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%2Fi.imgur.com%2FQI8EVky.png" alt="How Web Works"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It helps to learn What happens behind the scenes when we type a URL in a browser. Let's look at some of the features : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you wonder what happens behind the scenes when we type google.com in a browser, then you definitely need to check this out.&lt;/li&gt;
&lt;li&gt;This repository goes through a lot of minute details.&lt;/li&gt;
&lt;li&gt;This repository covers stuffs like DNS lookup, Opening of a socket + TLS handshake, HTTP Server Request Handle, The browser's high level structure, and many more.&lt;/li&gt;
&lt;li&gt;This repository doesn't waste much time and directly dives into the topic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. &lt;a href="https://github.com/Olshansk/interview" rel="noopener noreferrer"&gt;Interview&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2FnTjuurt.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%2Fi.imgur.com%2FnTjuurt.png" alt="Interview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This repo contains everything you need to prepare for your technical interview. Some features include : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lists of books to learn algorithms.&lt;/li&gt;
&lt;li&gt;List of websites to practice coding.&lt;/li&gt;
&lt;li&gt;Guides you may need.&lt;/li&gt;
&lt;li&gt;It also contains list of book specifically for job interviews and needs of industries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. &lt;a href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;System Design Primer&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2F92JYYEj.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%2Fi.imgur.com%2F92JYYEj.png" alt="System Design Primer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It helps to learn how to design large-scale systems. Preparation for the system design interview. Some features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning how to design scalable systems will help to become a better engineer. System design is a broad topic. There is a vast amount of resources scattered throughout the web on system design principles.&lt;/li&gt;
&lt;li&gt;This repo is an organized collection of resources to help you learn how to build systems at scale.&lt;/li&gt;
&lt;li&gt;This is a continually updated, open source project.&lt;/li&gt;
&lt;li&gt;In addition to coding interviews, system design is a required component of the technical interview process at many tech companies. Practice common system design interview questions and compare your results with sample solutions: discussions, code, and diagrams.&lt;/li&gt;
&lt;li&gt;Also contains additional for interview preparation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. &lt;a href="https://github.com/veeral-patel/how-to-secure-anything" rel="noopener noreferrer"&gt;How to secure anything&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2FbgspVPq.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%2Fi.imgur.com%2FbgspVPq.png" alt="How to secure anything"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This repo contains everything you need to learn on security engineering. Like : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Its lessons are not just applicable to computer security.&lt;/li&gt;
&lt;li&gt;This repository aims to document a process for securing anything, whether it's a medieval castle, an art museum, or a computer network.&lt;/li&gt;
&lt;li&gt;Even you can contribute for this article.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. &lt;a href="https://github.com/ganqqwerty/123-Essential-JavaScript-Interview-Questions" rel="noopener noreferrer"&gt;Ganqqwerty&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2FDWg2bPc.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%2Fi.imgur.com%2FDWg2bPc.png" alt="Ganqqwerty"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This repo has 123 essential JavaScript Questions to prepare for interview. Some features include : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This book's goal is to help javascript frontend developers prepare for technical job interviews through a collection of carefully compiled questions.&lt;/li&gt;
&lt;li&gt;You can even get this in paperback format. This repository is still getting updated, so for early access you can visit this repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10. &lt;a href="https://github.com/lydiahallie/javascript-questions" rel="noopener noreferrer"&gt;JavaScript Question&lt;/a&gt;
&lt;/h2&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%2Fi.imgur.com%2FalD4VBP.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%2Fi.imgur.com%2FalD4VBP.png" alt="JavaScript Question"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is a long list of advance JavaScript questions, and their explanations. Some of the key features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From basic to advanced: test how well you know JavaScript, refresh your knowledge a bit, or prepare for your coding interview.&lt;/li&gt;
&lt;li&gt;This repository gets updated daily, so new questions are added every day.&lt;/li&gt;
&lt;li&gt;The questions also come with explanation along with answers.&lt;/li&gt;
&lt;li&gt;The repository covers almost every single type of question, one can expect in an interview.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thank you for reading!
&lt;/h2&gt;

&lt;p&gt;I write blogs on programming, web development, and current technology trend. If you find this article interesting, do share it with others, and comment your thoughts. Follow me on &lt;a href="https://twitter.com/gh_x_st07" rel="noopener noreferrer"&gt;twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Until We Meet Again, Arindol Sarkar.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Genics Log #1: Sponsorship from BeyondWords, Open Source, Organic Stats and more</title>
      <dc:creator>Gourav Khunger</dc:creator>
      <pubDate>Fri, 11 Feb 2022 09:13:38 +0000</pubDate>
      <link>https://dev.to/genicsblog/genics-log-1-sponsorship-from-beyondwords-open-source-organic-stats-and-more-2ack</link>
      <guid>https://dev.to/genicsblog/genics-log-1-sponsorship-from-beyondwords-open-source-organic-stats-and-more-2ack</guid>
      <description>&lt;p&gt;Hello there, I hope you are doing well!&lt;/p&gt;

&lt;p&gt;This is the first article in the &lt;a href="https://genicsblog.com/category/genics-log" rel="noopener noreferrer"&gt;Genics log&lt;/a&gt; series where we will be documenting our monthly progress on the blog and report what's been brewing up in the past months.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://genicsblog.com/genics-log-1" rel="noopener noreferrer"&gt;Read this article at Genics Blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before diving into the latest news at Genics, I would like to introduce myself. I am &lt;a href="https://genicsblog.com/contributor/gouravkhunger" rel="noopener noreferrer"&gt;Gourav Khunger&lt;/a&gt;, the founder of &lt;a href="https://genicsblog.com" rel="noopener noreferrer"&gt;Genics Blog&lt;/a&gt;. I am a teenager from India who is passionate about software development and &lt;a href="https://genicsblog.com/tag/open-source/" rel="noopener noreferrer"&gt;open source&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Genics Blog went &lt;a href="https://github.com/genicsblog" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; at this New Year, which means we started accepting community contributions for the blog.&lt;/p&gt;

&lt;p&gt;Within a month itself, we have reached huge milestones! Here's a gist of some stats from the past month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Core team&lt;/strong&gt; members increased from &lt;strong&gt;1 to 5 members&lt;/strong&gt;!&lt;/li&gt;
&lt;li&gt;A total of &lt;strong&gt;15 articles&lt;/strong&gt; were posted in January!&lt;/li&gt;
&lt;li&gt;A total of &lt;strong&gt;40 members&lt;/strong&gt; joined the &lt;a href="https://discord.genicsblog.com" rel="noopener noreferrer"&gt;Genics Blog discord server&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;Rose from &lt;strong&gt;200 monthly visitors to 500+&lt;/strong&gt;!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it all started
&lt;/h2&gt;

&lt;p&gt;I always wanted to create a community of skilled developers who create quality content around topics!&lt;/p&gt;

&lt;p&gt;As the new year began, I grabbed the opportunity to open source my &lt;a href="https://blog.gouravkhunger.xyz" rel="noopener noreferrer"&gt;existing blog&lt;/a&gt; and build a community around the existing content.&lt;/p&gt;

&lt;p&gt;And since we chose the open source way, we quickly rose from 200 visitors/month to 500+ visitors/month!&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source Setup
&lt;/h2&gt;

&lt;p&gt;We use &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; for our open source projects. Everything we build around Genics is open source because we want to be as transparent as we can!&lt;/p&gt;

&lt;p&gt;For this blog, we used &lt;a href="https://jekyllrb.com" rel="noopener noreferrer"&gt;Jekyll&lt;/a&gt; to generate the website and render all the content. The beauty of Jekyll is we can use any design template, while writing the articles in markdown format. It renders the complete site with an easy build command!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pages.github.com" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt; works really well for hosting the website, because jekyll generates static html pages which work seamlessly with GitHub Pages.&lt;/p&gt;

&lt;p&gt;There's a lot more to share on how the site and management works. I'd love to write articles on how we build and operate our systems completely for &lt;strong&gt;FREE&lt;/strong&gt;, so keep an eye out on the &lt;a href="https://docs.genicsblog.com/developer" rel="noopener noreferrer"&gt;developer documentation&lt;/a&gt; and future posts on Genics blog!&lt;/p&gt;

&lt;h2&gt;
  
  
  Announcing BeyondWords.io Sponsorship
&lt;/h2&gt;

&lt;p&gt;Just a few days ago we got sponsored by &lt;a href="https://beyondwords.io/?utm_source=genicsblog.com&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=advertisement" rel="noopener noreferrer"&gt;BeyondWords.io&lt;/a&gt;!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;BeyondWords is an AI voice and audio publishing platform that brings frictionless audio to writers, newsrooms, and businesses!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is a platform that allows anyone to publish their written scripts in audio format to the world. In my opinion, the best part about is its text to speech AI conversion modules are far better than those of Google and Amazon as the audio it generates seems to be near human voice!&lt;/p&gt;

&lt;p&gt;Genics Blog got sponsored by &lt;a href="https://beyondwords.io" rel="noopener noreferrer"&gt;BeyondWords&lt;/a&gt; where they generously offered us free services to convert our articles to audio formats! You can try out the audio functionality right at the top of this post!&lt;/p&gt;

&lt;h2&gt;
  
  
  Stats
&lt;/h2&gt;

&lt;p&gt;We have grown manifolds just because of the fact that we went open source!&lt;/p&gt;

&lt;h3&gt;
  
  
  Open Source
&lt;/h3&gt;

&lt;p&gt;Here are the stats for the repositories under &lt;a href="//https:/github.com/genicsblog"&gt;Genics Blog&lt;/a&gt; organization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/genicsblog/genicsblog.com" rel="noopener noreferrer"&gt;&lt;code&gt;genicsblog.com&lt;/code&gt;&lt;/a&gt; (Main repo with posts and data files): &lt;strong&gt;21 stars&lt;/strong&gt;, &lt;strong&gt;14 forks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/genicsblog/theme-files" rel="noopener noreferrer"&gt;&lt;code&gt;theme-files&lt;/code&gt;&lt;/a&gt; (Basically template files): &lt;strong&gt;2 stars&lt;/strong&gt;, &lt;strong&gt;1 fork&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/genicsblog/docs" rel="noopener noreferrer"&gt;&lt;code&gt;docs&lt;/code&gt;&lt;/a&gt; (&lt;a href="https://docs.genicsblog.com" rel="noopener noreferrer"&gt;Documentation website&lt;/a&gt;): &lt;strong&gt;3 stars&lt;/strong&gt;, &lt;strong&gt;2 forks&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/genicsblog/genics-bot" rel="noopener noreferrer"&gt;&lt;code&gt;genics-bot&lt;/code&gt;&lt;/a&gt; (Bot for the &lt;a href="https://discord.genicsblog.com" rel="noopener noreferrer"&gt;Discord server&lt;/a&gt;): &lt;strong&gt;5 star&lt;/strong&gt;, &lt;strong&gt;1 fork&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Google Analytics
&lt;/h3&gt;

&lt;p&gt;Images speak louder than words!&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%2Fuser-images.githubusercontent.com%2F46792249%2F153484864-a8bf7f54-03aa-4f30-95d8-7f94e2e94949.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%2Fuser-images.githubusercontent.com%2F46792249%2F153484864-a8bf7f54-03aa-4f30-95d8-7f94e2e94949.png" alt="Genics blog's past 30 days Google Analytics Stats"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Organic Stats
&lt;/h3&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%2Fuser-images.githubusercontent.com%2F46792249%2F153484772-c2a0a786-0826-4771-85a8-c70f55dcb719.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%2Fuser-images.githubusercontent.com%2F46792249%2F153484772-c2a0a786-0826-4771-85a8-c70f55dcb719.png" alt="Genics blog's past 30 days Google Search Console Stats"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Plans
&lt;/h2&gt;

&lt;p&gt;We are looking forward to producing a lot of quality content in the future, as well as working on improving the platform.&lt;/p&gt;

&lt;p&gt;Here are a few examples of some things we'd work on in the near future:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building certain tools to aid the writing process for authors at Genics Blog.&lt;/li&gt;
&lt;li&gt;Adding table of content to the posts.&lt;/li&gt;
&lt;li&gt;Social previews for anchor tags in posts.&lt;/li&gt;
&lt;li&gt;Copy buttons for code blocks.&lt;/li&gt;
&lt;li&gt;Adding some cool webmention functionality to our articles, so as to highlight who shares our articles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a lot more!&lt;/p&gt;

&lt;p&gt;You can check out the issues page on &lt;a href="https://github.com/genicsblog/theme-files/issues" rel="noopener noreferrer"&gt;&lt;code&gt;theme-files&lt;/code&gt;&lt;/a&gt; repo to see what's on the roadmap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Words
&lt;/h2&gt;

&lt;p&gt;I'm really glad to be sharing this info with you!&lt;/p&gt;

&lt;p&gt;Did you know we have a discord bot that sends notifications on our analytics and stats everyday 👀. I bet you, hardly anyone would do that :P&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%2Fuser-images.githubusercontent.com%2F46792249%2F153487310-2dcd5854-4de9-47fa-a679-09a917d8564f.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%2Fuser-images.githubusercontent.com%2F46792249%2F153487310-2dcd5854-4de9-47fa-a679-09a917d8564f.png" alt="Genics Blog's Discord Community Bot logging stats from Google Analytics everyday"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do join us there to get notified of new posts and updates on Genics Blog.&lt;/p&gt;

&lt;p&gt;If you find what we are doing as high school students fascinating, consider joining us and be a part of Genics Blog! &lt;a href="https://genicsblog.com/contribute" rel="noopener noreferrer"&gt;Here&lt;/a&gt; are the ways you could contribute to it.&lt;/p&gt;

&lt;p&gt;Looking forward to seeing you engage with the active community on our &lt;a href="https://discord.genicsblog.com" rel="noopener noreferrer"&gt;Discord server&lt;/a&gt; :)&lt;/p&gt;

</description>
      <category>news</category>
      <category>opensource</category>
    </item>
    <item>
      <title>10 SEO tools you need for your projects in 2022</title>
      <dc:creator>Abhiraj Bhowmick</dc:creator>
      <pubDate>Fri, 04 Feb 2022 14:49:31 +0000</pubDate>
      <link>https://dev.to/genicsblog/10-seo-tools-you-need-for-your-projects-in-2022-48ij</link>
      <guid>https://dev.to/genicsblog/10-seo-tools-you-need-for-your-projects-in-2022-48ij</guid>
      <description>&lt;p&gt;SEO tools are essential for growing organic traffic, maintaining and improving rankings, and delivering the proper target keywords. There are numerous SEO tools accessible today, both paid and free.&lt;/p&gt;

&lt;p&gt;Choosing the best SEO tool for your business or industry can be difficult and time-consuming at times.&lt;/p&gt;

&lt;p&gt;We've hand-picked the top &lt;a href="https://dev.to/ten-best-seo-tools-for-2022"&gt;10 SEO tools&lt;/a&gt; after extensive study. Also, we have some &lt;strong&gt;bonus content&lt;/strong&gt; for you at the end. Let's get this party started right away!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://www.seoquake.com/" rel="noopener noreferrer"&gt;SEOQuake&lt;/a&gt;
&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%2F9qxrxezjprjva1ekqqqz.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%2F9qxrxezjprjva1ekqqqz.png" alt="SEOQuake Website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SEOQuake is a free but a practical SEO analysis tool used by many. It's on the list of one of the best SEO Tools which are completely &lt;strong&gt;FREE&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With the help of this tool, you can quickly start tracking and analyzing site audits and compare them with that of your competitors. &lt;/p&gt;

&lt;p&gt;Suppose you're working on your content and want accurate suggestions to get a better ranking. SEOQuake would be the best choice for you.&lt;/p&gt;

&lt;p&gt;You'll get a complete in-depth report of your competitors so that you can Analyze and see what improvements you need to implement in your website.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://www.semrush.com" rel="noopener noreferrer"&gt;SEMrush&lt;/a&gt;
&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%2Fzd45cgnsqrn15oo1yuls.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%2Fzd45cgnsqrn15oo1yuls.png" alt="SEMrush website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most people utilise SEMrush, which is a really popular SEO tool. It is well-known for its ability to perform. SEMrush comes with a plethora of resources that are included in their SEO toolbox.&lt;/p&gt;

&lt;p&gt;These resources are extremely useful for analysis and tracking websites on the inside, such as which keywords your competitors are ranking for, what pages they are, and what the monthly volume of particular phrase gets the most hits for them.&lt;/p&gt;

&lt;p&gt;When you know this inside out as a blogger or website owner, you can make a lot of adjustments to your website and witness a significant improvement in its performance.&lt;/p&gt;

&lt;p&gt;As a result, having these kinds of SEO tools is essential for a higher ranking. SEMrush can assist you in improving the rank of your website.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://ahrefs.com" rel="noopener noreferrer"&gt;Ahrefs&lt;/a&gt;
&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%2Fnvf5wn5laecea00sei92.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%2Fnvf5wn5laecea00sei92.png" alt="Ahrefs website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahrefs is a popular SEO tool. It assists you in a variety of ways, including allowing you to make the best content decisions, thoroughly reviewing your website, offering target keywords, and much more.&lt;/p&gt;

&lt;p&gt;It can be used as a site explorer, a content explorer, a keyword explorer, and a rank tracker among other things.&lt;/p&gt;

&lt;p&gt;The Site Explorer, a primary features of the Ahrefs, displays the performance of web pages along with the highly regarded web pages for specific keywords and subjects.&lt;/p&gt;

&lt;p&gt;With its keyword explorer tool, you can rapidly look at the volume of a given keyword, such as how many hits it gets per month or how many searches it gets per month.&lt;/p&gt;

&lt;p&gt;It is widely used by digital marketers. It mostly works for backlinks and performs remarkable SEO analysis. Keep in mind that &lt;strong&gt;it is a paid tool&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://moz.com" rel="noopener noreferrer"&gt;Moz Pro&lt;/a&gt;
&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%2Fk5dn8jiawi2iujrgoiuo.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%2Fk5dn8jiawi2iujrgoiuo.png" alt="Moz Pro website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's an all-in-one SEO optimization tool that includes plethora of useful resources that primarily assist you in obtaining all of the information about your competitors' rankings.&lt;/p&gt;

&lt;p&gt;You may optimise your website from its suggestions and make it more valuable for ranking with the help of this tool. &lt;/p&gt;

&lt;p&gt;When you start using this tool, you'll be able to get a full report on your competition, which I believe is the greatest approach to figure out what's working and what's not, so you can optimise your website and attain a higher Google ranking.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. &lt;a href="https://answerthepublic.com" rel="noopener noreferrer"&gt;AnswerThePublic&lt;/a&gt;
&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%2F05amtd9oe0ss6lne273j.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%2F05amtd9oe0ss6lne273j.png" alt="AnswerThePublic website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tool is mostly used for keyword research and analysis. Assume you're seeking for a program that focuses largely on keywords so you can evaluate the websites of your competitors.&lt;/p&gt;

&lt;p&gt;You'll get amazing insights into other websites that are doing great, as well as helpful suggestions for your own website, such as what you should do to improve your ranking.&lt;/p&gt;

&lt;p&gt;Many users report increased traffic and conversions after employing these solutions!&lt;/p&gt;

&lt;h2&gt;
  
  
  6. &lt;a href="https://keyword-hero.com" rel="noopener noreferrer"&gt;Keyword Hero&lt;/a&gt;
&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%2F3dh5silmp7if1iml8oeu.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%2F3dh5silmp7if1iml8oeu.png" alt="Keyword Hero website screenshot" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the times we write articles without doing proper keyword research. We do not optimize our posts to target specific keywords which we want the article to rank for.&lt;/p&gt;

&lt;p&gt;Have you considered which specific keyword your visitors search on Google before clicking on your website? If you know those keywords, I'm sure you'll focus primarily on maintaining rankings for those!&lt;/p&gt;

&lt;p&gt;And for both the above reasons, Keyword-Hero is great because it lets us do comprehensive keyword research and it also assists you in a variety of methods!&lt;/p&gt;

&lt;h2&gt;
  
  
  7. &lt;a href="https://www.spyfu.com" rel="noopener noreferrer"&gt;SpyFu&lt;/a&gt;
&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%2F54sp87dfpwixzd0n2ah2.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%2F54sp87dfpwixzd0n2ah2.png" alt="SpyFu website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a fantastic tool for analysing competitors!&lt;/p&gt;

&lt;p&gt;Spyfu is a reliable tool for spying on your competitor's website keywords if you want to track each step, get detailed insights for ranking, and see what your competitors are up to.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. &lt;a href="https://seomator.com" rel="noopener noreferrer"&gt;SeoMater&lt;/a&gt;
&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%2Fyumptq9fe2nt45capdi3.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%2Fyumptq9fe2nt45capdi3.png" alt="SeoMater website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a one-of-a-kind SEO tool that includes SEO auditing and a website crawling tool!&lt;/p&gt;

&lt;p&gt;With this tool, you may perform on-page optimization based on the analysis of your competitors.&lt;/p&gt;

&lt;p&gt;It's a really professional application that keeps you up to date with reports and essential suggestions that you should review and implement in your websites for higher Google rankings!&lt;/p&gt;

&lt;h2&gt;
  
  
  9. &lt;a href="https://www.contentkingapp.com" rel="noopener noreferrer"&gt;ContentKing&lt;/a&gt;
&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%2Fmx2i4txv5gv8rrntupea.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%2Fmx2i4txv5gv8rrntupea.png" alt="ContentKing website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a tracking tool that meets all of your needs. If you're searching for a bundle tool that has all the capabilities you need, I recommend ContentKing because it offers practically everything you need.&lt;/p&gt;

&lt;p&gt;It's a tool that works 24 hours a day, 7 days a week to provide you with complete in-depth details on your competitors' websites.&lt;/p&gt;

&lt;p&gt;Because you'll get an accurate audit of your competitors' websites when you use Content King, you could implement the strategies that work for them that'll get you a higher chance of gaining a better rating.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. &lt;a href="https://woorank.com" rel="noopener noreferrer"&gt;Woorank&lt;/a&gt;
&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%2F75175craeti2aayzl5e3.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%2F75175craeti2aayzl5e3.png" alt="Woorank website screenshot" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to the reports, this is one of the best SEO analysis tools. This tool has a wide range of applications due to the fact that both the free and paid plans perform admirably. I recommend that you start with its free plan and then upgrade if you're happy with it.&lt;/p&gt;

&lt;p&gt;You may track and analyse your competitors' websites using Woorank. This tool provides you with comprehensive reports.&lt;/p&gt;

&lt;p&gt;You can see which keywords your competitors rank higher for and how you may improve your own rankings. This tool will tell you where you're falling short and what improvements you may make to improve your rankings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus Tools
&lt;/h2&gt;

&lt;p&gt;Here's another list of 4 other &lt;a href="https://dev.to/must-have-free-seo-tools-for-everyone"&gt;Must-Have Free SEO Tools For Everyone&lt;/a&gt; that will help you with SEO analysis and growing in rankings!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Originally published at &lt;a href="https://genicsblog.com/10-seo-tools-you-need-to-use-in-2022" rel="noopener noreferrer"&gt;genicsblog.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Thank you for reading
&lt;/h2&gt;

&lt;p&gt;If you liked this post, subscribe to my &lt;a href="https://abhirajbhowmick.substack.com" rel="noopener noreferrer"&gt;newsletter&lt;/a&gt; to never miss out on &lt;a href="https://abhiraj.co" rel="noopener noreferrer"&gt;my articles&lt;/a&gt;, product launches, and tech news. Follow me on &lt;a href="https://twitter.com/rainboestrykr" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; for daily threads on web dev resources.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 projects you can make to become a better web developer</title>
      <dc:creator>Abhiraj Bhowmick</dc:creator>
      <pubDate>Fri, 04 Feb 2022 14:47:41 +0000</pubDate>
      <link>https://dev.to/genicsblog/5-projects-you-can-make-to-become-a-better-web-developer-3ekk</link>
      <guid>https://dev.to/genicsblog/5-projects-you-can-make-to-become-a-better-web-developer-3ekk</guid>
      <description>&lt;p&gt;The demand for web developers is growing as web development becomes more popular in the market. Web development has evolved as a viable field, attracting students and professionals from a wide range of academic and professional backgrounds.&lt;/p&gt;

&lt;p&gt;Working on web development projects is the ideal approach to gain experience in this sector if you're also interested in it. Your skills will improve the more you practise and experiment with web development projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Simple Clock
&lt;/h2&gt;

&lt;p&gt;It's a simple app that you can develop using HTML, CSS and basic JS for functionality. In this project, you have to build a simple webpage and then update the time.&lt;/p&gt;

&lt;p&gt;To make it more attractive, you can add start, stop features. Also, you can add an alarm function, ringtone function for alarms, Etc.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rainboestrykr/embed/MWOWyNJ?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Weather/News App
&lt;/h2&gt;

&lt;p&gt;Making a weather/news app will test your skills, and in this project, you can use two APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One to get the user's location.&lt;/li&gt;
&lt;li&gt;Another to fetch weather data based on the user's location.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a beginner, having this project in your resume will help you stand apart from the crowd.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. To-do list
&lt;/h2&gt;

&lt;p&gt;It's one of the best and simple projects that you can develop using HTML, CSS and JS. This project will help you to store your personal to-do lists and it will be saved in your local storage, which can be accessed anytime.&lt;/p&gt;

&lt;p&gt;Moreover, even if you  host the app, the data will be stored in the user’s computer's local storage which will maintain privacy.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rainboestrykr/embed/mdqdPvv?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Forms
&lt;/h2&gt;

&lt;p&gt;HTML, CSS, and JavaScript can all be used to make forms. You can create a gorgeous landing page design with a little effort and attention. You can begin with a modest project, such as designing a survey form or a consultation form, depending on the type of business you're starting.&lt;/p&gt;

&lt;p&gt;Name, address, e-mail, date of birth, phone number, and other pertinent information can be included in the form. You can send the form to your friends and see what they have to say!&lt;/p&gt;

&lt;p&gt;Companies nowadays use survey forms to gather information from their target audiences. In addition, having a landing page project on your resume will be a bonus!&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Coinflip
&lt;/h2&gt;

&lt;p&gt;This is the most unexpected item on the list but it can prove to be very helpful in the long run. You can learn about using the random method to derive a random result from an array of options.&lt;/p&gt;

&lt;p&gt;We all know that getting a random value on is very hard, but certain functions utilise computations to deliver a result that appears random enough.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/rainboestrykr/embed/ExbxyvR?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;These were the top 5 web development projects. All of the projects listed are beginner-friendly, and working on them will help you improve your web development abilities and enhance your career.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Origninally posted at &lt;a href="https://genicsblog.com/five-projects-to-become-better-at-webdev" rel="noopener noreferrer"&gt;genicsblog.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Thank you for reading
&lt;/h3&gt;

&lt;p&gt;If you liked this post, you can subscribe to my &lt;a href="https://abhirajbhowmick.substack.com/" rel="noopener noreferrer"&gt;newsletter&lt;/a&gt;&lt;br&gt;
to never miss out on &lt;a href="https://abhiraj.co" rel="noopener noreferrer"&gt;my blogs&lt;/a&gt;, product launches, and tech news. Follow me on &lt;a href="https://twitter.com/rainboestrykr" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; for daily threads on web dev resources.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 CSS methodologies you need to know in 2022</title>
      <dc:creator>Abhiraj Bhowmick</dc:creator>
      <pubDate>Fri, 04 Feb 2022 14:41:02 +0000</pubDate>
      <link>https://dev.to/genicsblog/5-css-methodologies-you-need-to-know-in-2022-2ipf</link>
      <guid>https://dev.to/genicsblog/5-css-methodologies-you-need-to-know-in-2022-2ipf</guid>
      <description>&lt;p&gt;In large, complicated, rapidly-iterated systems, CSS is notoriously difficult to maintain. The lack of a built-in scoping mechanism in CSS is one of the reasons.&lt;/p&gt;

&lt;p&gt;In CSS, everything is global. Until CSS gets its native scoping mechanism, we need to devise our own system for locking down styles to specific sections of an HTML document. CSS methodologies are the solution.&lt;/p&gt;

&lt;p&gt;In this article, we will take a look at the CSS methodologies you need to know in 2022!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Object-oriented CSS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://oocss.org/" rel="noopener noreferrer"&gt;OOCSS&lt;/a&gt; concepts help us write components that are flexible, modular and interchangeable.&lt;/p&gt;

&lt;p&gt;For example, the style of your button elements might be set via two classes that you have given the class of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.button&lt;/code&gt; — Provides the button’s basic structure.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.grey-btn&lt;/code&gt; — Applies colors and other visual properties.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.grey-btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#EEE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#DDD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;3px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#555&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;HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"button grey-btn"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Click me!
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Atomic CSS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://acss.io/" rel="noopener noreferrer"&gt;Atomic CSS&lt;/a&gt; is the approach to CSS architecture that favors small, single-purpose classes with names based on visual function.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Colors are set using hexadecimal values. Alpha transparency is created by appending the opacity value to the hex color.&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"Bgc(#0280ae.5) C(#fff) P(20px)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Lorem ipsum
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. BEM
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://getbem.com/" rel="noopener noreferrer"&gt;Block Element Modifier&lt;/a&gt; is a methodology that helps you to create reusable components and code sharing in front-end development.&lt;/p&gt;

&lt;p&gt;Example:&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;form&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"loginform loginform--errors"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"loginform__username loginform__username--error"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; 
        Username &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"username"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"loginform__password"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Password &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"password"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"password"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"loginform__btn loginform__btn--inactive"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Sign in
    &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;.loginform&lt;/code&gt; class is a block composed of three elements:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;loginform__username&lt;/td&gt;
&lt;td&gt;Takes in the username&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;loginform__password&lt;/td&gt;
&lt;td&gt;Takes in the password&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;loginform__btn&lt;/td&gt;
&lt;td&gt;Allow the user to submit the web form&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. SMA CSS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://smacss.com/" rel="noopener noreferrer"&gt;SMACSS&lt;/a&gt; is a way to examine your design process and as a way to fit those rigid frameworks into a flexible thought process.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Let’s say our layout is called &lt;code&gt;.l-footer&lt;/code&gt;. We have a search form module inside it. The search form has already been submitted at least once by the user.&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;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"l-footer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"search is-submitted"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"search"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Search"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Systematic CSS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.yumpu.com/en/document/read/47573458/systematic-css" rel="noopener noreferrer"&gt;Systematic CSS&lt;/a&gt; shares many of the principles and ideas you can find in OOCSS, BEM, SMACSS, SUIT CSS, and other CSS methodologies. Systematic CSS is meant to be a simpler alternative to existing CSS methodologies. &lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Here’s the markup for two widgets that render a navigation bar and search form:&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="c"&gt;&amp;lt;!-- navigation bar --&amp;gt;&lt;/span&gt; 
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"NavBar"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Home&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"about.html"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;About&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"learn/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Learn&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"extend/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Extend&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"share/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Share&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- search form --&amp;gt;&lt;/span&gt; 
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"SearchBox"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"search.html"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"get"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"input-search"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Search&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"q"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"search"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"input-search"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Search&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Content — in the form of widgets and naked HTML elements — is then placed within the layout. Finally, modifier classes are added to vary the default presentation of things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By providing a class-based approach for dividing up large web designs into many small, modular, distinct components, all CSS techniques address the scalability and maintainability challenge in CSS.&lt;/p&gt;

&lt;p&gt;Each UI module can be reused throughout a design and even ported from one project to the next if the CSS methodologies are the same. CSS approaches do a lot more than just solving the CSS scalability issue.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Origninally posted at &lt;a href="https://genicsblog.com/five-css-methodologies-you-need-to-know-in-2022" rel="noopener noreferrer"&gt;genicsblog.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Thank you for reading
&lt;/h3&gt;

&lt;p&gt;If you liked this post, subscribe to &lt;a href="https://abhirajbhowmick.substack.com" rel="noopener noreferrer"&gt;my newsletter&lt;/a&gt; to never miss out on &lt;a href="https://abhiraj.co" rel="noopener noreferrer"&gt;my articles&lt;/a&gt;, product launches, and tech news!&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
