<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Hillary Nyakundi - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Hillary Nyakundi - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 16:29:58 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/larymak/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Contribute to Open-Source Projects – A Handbook for Beginners ]]>
                </title>
                <description>
                    <![CDATA[ Over the past decade, open-source projects have become the backbone of the technology ecosystem. They power everything from applications to innovations across different fields. These collaborative inventions bring together people with different skill... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-contribute-to-open-source-handbook/</link>
                <guid isPermaLink="false">66b8dbd4abe19f6180038a2b</guid>
                
                    <category>
                        <![CDATA[ beginners guide ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ handbook ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Wed, 06 Sep 2023 15:39:30 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/09/How-to-Contribute-to-Open-Source--with-photo--Cover--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Over the past decade, open-source projects have become the backbone of the technology ecosystem. They power everything from applications to innovations across different fields.</p>
<p>These collaborative inventions bring together people with different skill sets including developers, designers, and tech enthusiasts in general with one goal in mind to build: to improve and share software freely.</p>
<p>The open source movement champions the idea that knowledge should be accessible to all, and fosters a culture of openness, transparency, and cooperation.</p>
<p>Contributing to open source has many benefits not only for those taking part in it but also the community at large.</p>
<p>Now, if you are just a beginner trying to get into the open-source world, you should keep in mind that you are embarking on a journey that will not only improve your technical skills but also open many doors for you and give you multiple opportunities to interact with like-minded individuals.</p>
<p>This is just a portion of what you can achieve. You'll also have an opportunity to:</p>
<ul>
<li><p>Create an impact through your work</p>
</li>
<li><p>Build your portfolio</p>
</li>
<li><p>Network and connect with other devs, and</p>
</li>
<li><p>Give back to the developer community.</p>
</li>
</ul>
<p>This beginner friendly handbook is crafted to be your companion as you begin your journey into the world of open-source. It will cover concepts that will allow a beginner like you to make your mark in the open-source world.</p>
<p>We will start with the fundamentals of open source, and I'll guide you through setting up your development environment, navigating open-source communities, selecting the right projects, and making your first contribution.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-what-is-open-source-software">What is Open-Source Software?</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-characteristics-of-open-source-software">Characteristics of Open-Source Software</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-types-of-open-source-licenses">Types of Open-Source Licenses</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-benefits-of-contributing-to-open-source-projects">Benefits of Contributing to Open-Source Projects</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-get-started-with-open-source-contributions">How to Get Started with Open-Source Contributions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-navigate-open-source-communities">How to Navigate Open-Source Communities</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-understanding-community-dynamics">Understanding community dynamics</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-find-and-join-open-source-communities">How to Find and Join Open-Source Communities</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-etiquette-communication-norms-and-best-practices">Etiquette, Communication Norms, and Best Practices</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-set-up-a-development-environment">How to Set Up a Development Environment</a></p>
<ul>
<li><p><a class="post-section-overview" href="#howtoinstallthenecessarytools">How to Install the Necessary Tools</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-text-editors-and-integrated-development-environments-ides">Text Editors and Integrated Development Environments (IDEs)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-version-control-systems-1">Version control systems</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-fork-clone-and-set-up-projects">How to fork, clone, and set up projects</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-understanding-project-structure-and-workflow">Understanding Project Structure and Workflow</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-make-your-first-contribution">How to Make Your First Contribution</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-step-by-step-guide-to-making-a-contribution">Step-by-Step Guide to Making a Contribution</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-collaboration-within-the-community">Collaboration within the Community</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-beyond-code-non-coding-contributions">Beyond Code: Non-Coding Contributions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-best-practices-for-quality-contributions">Best Practices for Quality Contributions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-handle-challenges">How to Handle Challenges</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-showcase-your-open-source-contributions">How to Showcase Your Open-Source Contributions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-additional-resources">Additional Resources</a></p>
</li>
</ul>
<p>By the end of this guide you will be equipped with the necessary skills to become an active member of the open-source community. This is the beginning of your open source journey where you will get to continuously learn, collaborate with others, and create an impact. Let's get started!</p>
<h2 id="heading-what-is-open-source-software">What is Open-Source Software?</h2>
<p>In simple words, open source can be described as source code and projects that are made available to the public to view, use, modify, and distribute under a permissive license.</p>
<p>Open-source projects are usually developed in a collaborative manner, mostly by a community of volunteers. Unlike proprietary software, which is usually controlled by a single entity, open source promotes transparency, collaboration, and innovation through community support.</p>
<p>Open-source projects don't only empower their users to use the projects themselves, but also gives them an opportunity to understand how the project works, contribute to its growth, and improve it too.</p>
<p>The main idea behind the open-source software is not only to share the code but create communities with a culture of collaboration, transparency and shared learning.</p>
<p>With this approach in mind, the open-source world has given a rise to some of the most innovative and impactful technologies in use today.</p>
<h3 id="heading-characteristics-of-open-source-software">Characteristics of Open-Source Software</h3>
<ul>
<li><p><strong>Free to use</strong> - users can feely use, modify and redistribute the software.</p>
</li>
<li><p><strong>Transparent</strong> - source code is accessible to all. This promotes trust among the users, as well as openness amongst developers who peer review and fix bugs.</p>
</li>
<li><p><strong>Collaborative</strong> - most open source projects promote collaboration, which enables different people from around the world to contribute their skills, ideas, and expertise.</p>
</li>
<li><p><strong>Community-driven</strong> - open-source projects foster and promote the building of strong communities of like minded individuals with common goals.</p>
</li>
<li><p><strong>Diversity</strong> - brings together people from different backgrounds who share a common goal.</p>
</li>
<li><p><strong>Continuous Improvement</strong> - open source software is continuously evolving. This means that bugs are fixed regularly, new features are added often, and updates are released from time to time.</p>
</li>
<li><p><strong>Licensing</strong> - each open source software has a license that protects the rights of both authors and users, enabling the software's continued openness.</p>
</li>
</ul>
<h3 id="heading-types-of-open-source-licenses">Types of Open-Source Licenses</h3>
<p>Open-source licenses protect the rights of both the authors and the users. They also define terms under which the software can be used, modified, and distributed.</p>
<p>Some of the most common licenses are:</p>
<ul>
<li><p><strong>GNU General Public License (GPL)</strong> - this guarantees the end user the freedom to run, study, share and modify the software.</p>
</li>
<li><p><strong>MIT License</strong> - originates from the Massachusetts Institute of Technology (MIT). It permits reuse of proprietary software.</p>
</li>
<li><p><strong>Apache License</strong>- commonly used for projects associated with the Apache software Foundation.</p>
</li>
<li><p><strong>BSD Licenses</strong> - they are a family of free software licenses that impose minimal restrictions on the use and distribution of covered software.</p>
</li>
<li><p><strong>Mozilla Public License (MPL)</strong> - this is a copyleft license that will require the authors to share modifications they make on your code.</p>
</li>
<li><p><strong>Creative Commons Licenses</strong> - most commonly used not only in software but for other creative works, too. Used when an author wants to give other people right to share, use, and build upon their work.</p>
</li>
</ul>
<p>Having an understanding of these licenses at an early stage is really important as they dictate how your contributions can be used and distributed.</p>
<h2 id="heading-benefits-of-contributing-to-open-source-projects">Benefits of Contributing to Open-Source Projects</h2>
<p>Contributing to open source can be a rewarding way to learn, teach, share, and build experience. There are plenty of benefits that extend beyond the contributions you make.</p>
<p>By contributing to open-source projects you can:</p>
<ul>
<li><p><strong>Learn and Grow</strong> - It will open different avenues for you by giving you an opportunity to experience real world development practices, code review processes, problem solving techniques, and so on.</p>
</li>
<li><p><strong>Build a Portfolio</strong> - Your contributions serve as a proof of your skills, which can be helpful when applying for jobs.</p>
</li>
<li><p><strong>Community and Networking</strong> - It gives you the opportunity to engage and interact with like-minded individuals from around the world. It opens doors for mentors and professional contacts who can guide you.</p>
</li>
<li><p><strong>Solving Real Problems</strong> - Some projects are targeted at solving problems faced by many people like security and healthcare. Contributing to them means you are making a direct impact in solving issues that matter.</p>
</li>
<li><p><strong>Improving Software</strong> - The contributions you make may help improve the quality, functionality, and usability of software you use or that's used by millions of people. Each contribution you make, whether it's fixing a bug, typo, or adding code potentially benefits countless users.</p>
</li>
<li><p><strong>Recognition and Respect</strong> - As you work your way into the open-source world and become consistent, you will gain recognition and be celebrated for your work.</p>
</li>
<li><p>Additionally, it's a fun experience and gives you <strong>personal satisfaction</strong>. And hey, you never know who is watching, maybe it's your next employer or partner 🙂.</p>
</li>
</ul>
<h2 id="heading-how-to-get-started-with-open-source-contributions">How to Get Started with Open-Source Contributions</h2>
<p>Before taking a deep dive into the open-source world, it's important to first evaluate your skills and interests.</p>
<p>Reflect on the programming languages you know, your general technical abilities, and your areas of expertise. Identify your strengths and areas where you want to grow.</p>
<p>This self-assessment will help you find projects that align with your skills and passions.</p>
<h3 id="heading-1-setting-up-the-right-mindset">1. Setting Up the Right Mindset</h3>
<p>As you may know, contributing to open-source is not only about code – it's more of collaboration that will promote growth, learning and positive community engagement.</p>
<p>Before getting started, having the right mindset will empower you throughout the journey. For that you will need to:</p>
<ul>
<li><p><strong>Understand the value of open-source</strong> - the key principle behind the success of open-source projects is collaboration. Each contribution made, no matter how small, adds value. These collective contributions add benefits to the global community.</p>
</li>
<li><p><strong>Embrace the learning process</strong> - not knowing everything is okay, and that's why open-source encourages learning through collaboration. Remember to always do your research and then, if needed, seek help when you are stuck. This is a sign of progress and not weakness.</p>
</li>
<li><p><strong>There is more than code</strong> - as much as code is the core of most open-source projects, it's not the only way to get involved. Before making contributions consider your strengths and interests and then explore non-coding avenues, too.</p>
</li>
</ul>
<h3 id="heading-2-choosing-a-programming-languagetechnology">2. Choosing a Programming Language/Technology</h3>
<p>In order for you to make effective contributions, you'll need to decide which programming languages/technologies you feel most comfortable with. And for that you will need to do the following:</p>
<ul>
<li><p><strong>Assess your skillset</strong> - assessing your skillset will help you decide whether to leverage the skills you already have or venture into learning new ones.</p>
</li>
<li><p><strong>Research technologies</strong> - consider technologies used in different projects that you are interested in and whether they align with your interests.</p>
</li>
<li><p><strong>Personal interests</strong> - passion fuels contributions, and contributing to projects that resonate with you can be fulfilling and fun.</p>
</li>
</ul>
<h3 id="heading-3-finding-projects">3. Finding Projects</h3>
<p>Identifying the right open-source projects can really enhance your contribution experience. There are a few different ways you can search for projects. Here are a few highlights on that:</p>
<ul>
<li><p><strong>Use Open-Source Directories</strong> - explore different platforms that list different open-source projects. Websites like <a target="_blank" href="https://github.com/explore">GitHub Explore</a>, <a target="_blank" href="https://gitlab.com/explore">GitLab Explore</a>, <a target="_blank" href="https://opensourcefriday.com/">Open Source Friday</a> and others all list projects, making it easier to search through.</p>
</li>
<li><p><strong>Source code platforms</strong> - platforms such as GitHub and GitLab are central to the open-source world. Search on these platforms using keywords, and filter across different projects to easily find ones that match your interests.</p>
</li>
<li><p><strong>Project activity</strong> - while searching, look for recent commits, open issues, and ongoing discussions. An active community is a positive sign for the success of the project.</p>
</li>
<li><p><strong>Community engagement</strong> - before you begin making contributions, engage with the project's community. This can be through joining forums, a mailing list, or chat channels. Ask questions and interact with others, as this will help you understand the project's dynamics.</p>
</li>
</ul>
<h3 id="heading-4-choosing-the-right-project">4. Choosing the right project</h3>
<p>Ensuring that you pick the right project to work on is important, as it will be the first step to achieving all your goals.</p>
<p>In order to more easily navigate the open-source landscape and find the right project to work on, here are a few thing to consider:</p>
<ul>
<li><p><strong>Interest alignment</strong> - Make sure you look for projects that align with your technical interests and areas of expertise.</p>
</li>
<li><p><strong>Project activity</strong> - Be sure to check how active the project is. A project with a vibrant community with recent issues and commits indicates it's actively maintained.</p>
</li>
<li><p><strong>Friendliness</strong> - If you are beginner getting into open source for the first time, opt for projects with a reputation of welcoming newcomers.</p>
</li>
<li><p><strong>Project goals</strong> - Have an understanding of the project goals and be sure they align with your values.</p>
</li>
</ul>
<p>After you have found the project you want to contribute to, it's time to do a little vetting. Make sure it meets the following criteria so you know it'll be a good project to work on:</p>
<ul>
<li><p>Check out if it has a license file.</p>
</li>
<li><p>Look for the number of contributors.</p>
</li>
<li><p>Check how often people make commits.</p>
</li>
<li><p>Does it have any open issues? If yes, this might be a good sign – you will have a place to begin.</p>
</li>
<li><p>How long does it take for maintainers to respond? You can check and see how often issues are closed and PRs are merged.</p>
</li>
<li><p>Is there an active discussion on an issue?</p>
</li>
<li><p>Are the issues getting closed regularly?</p>
</li>
<li><p>How many open pull requests are there?</p>
</li>
<li><p>How recently was the latest pull requests merged?</p>
</li>
<li><p>Do the maintainers thank people for contributing?</p>
</li>
</ul>
<p>If this vetting process checks out, then you are probably good to go and start your contributions.</p>
<h2 id="heading-how-to-navigate-open-source-communities">How to Navigate Open-Source Communities</h2>
<p>Open-source projects are more than just code repositories. They are communities where developers from around the world collaborate to create something impactful.</p>
<p>In order to contribute effectively, it's essential to understand the dynamics of these communities and engage with them in a meaningful way.</p>
<p>When it comes to building strong, sustainable open-source contributor communities, it's not just about providing robust newcomer support. For many people, getting involved with open-source projects can be intimidating, overwhelming, and frustrating - especially if they lack exposure to and experience with the different tools and workflows commonly used in the open-source world.</p>
<p>But with the right support structures in place, new members can quickly become valuable contributors to any project - bringing fresh perspectives, enthusiasm, and a willingness to learn.</p>
<p>The benefits offered by these communities are 'on another level' as I would say. They have helped people start from scratch and gain new skills, create connections, and even land their dream jobs.</p>
<p>Other benefits include:</p>
<ul>
<li><p>They promote exchange of ideas, solutions, and best practices.</p>
</li>
<li><p>Overcoming challenges is often easier as a community, and can make problem solving more efficient.</p>
</li>
<li><p>Peer review from different contributors ensures code quality, and can help you catch bugs and improve the project in general.</p>
</li>
<li><p>Contributing to open source projects often provides you with networking opportunities.</p>
</li>
</ul>
<h3 id="heading-understanding-community-dynamics">Understanding community dynamics</h3>
<p>Each open source community has its own culture and values. Understanding these dynamics is key to integrating successfully into the project's workflow.</p>
<ul>
<li><p><strong>Project Vision and Goals</strong> - In order for you to make an effective and meaningful contribution, make sure you understand the project's vision and objectives.</p>
</li>
<li><p><strong>Community Norms and Values</strong> - Every community has both written and unwritten rules and values that contributors should respect. These can include coding standards, communication etiquette, and diversity and inclusion principles.</p>
</li>
<li><p><strong>Recognizing Hierarchy and Roles</strong> - Open source projects often have a hierarchy of roles, from maintainers to newcomers. Understand these roles and how decisions are made within the community.</p>
</li>
</ul>
<h3 id="heading-how-to-find-and-join-open-source-communities">How to Find and Join Open-Source Communities</h3>
<p>Finding the right community is an important step to ensure you have a meaningful open-source experience. So here are a few tips you can use to discover and join open-source communities.</p>
<ul>
<li><strong>Research</strong> - use the readily available platforms to search for projects that align with your skillset. As a beginner at first it might not be a walk in the park for you but with enough guidance you will find it easy.</li>
</ul>
<p>For starters, platforms such as GitHub, Gitlab and Bitbucket can be good platforms to search for projects. One similarity that cuts across all this platforms is that you can use the search functionality to find projects by keywords, technologies used or specific topics.</p>
<p>For example, using GitHub if you are interested in finding Python development projects they you can have your search as shown below and additionally from the left panel further filter the search to suit your desires.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/find-project.png" alt="find-project" width="600" height="400" loading="lazy"></p>
<ul>
<li><strong>Forums and mailing lists</strong> - many projects use different ways to communicate. By finding the right one you can easily introduce yourself and ask questions. The communications options you choose will also depend with the kind of info you want to get.</li>
</ul>
<p>If you are interested in just receiving updates and news about a specific project you are interested in, then consider joining the mailing lists which in most cases is weekly, monthly or quarterly. To sign up for a mailing list/newsletter, you can visit either the official site of the project or a related repository.</p>
<p>If you are more into engaging with other contributors, then joining the forum/discussion boards is the right thing to do. These boards enable the maintainers and contributors to have discussions and share knowledge among themselves. Below is section of freeCodeCamp's forum and some of the conversation that take place.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/forum.png" alt="forum" width="600" height="400" loading="lazy"></p>
<p><strong>Note</strong> the freeCodeCamp forum is subdivided into different sub-forums. This is a very common practice for big projects as it makes it easier for different contributors with questions to know where to ask for help</p>
<ul>
<li><p><strong>Social Media</strong> - follow open-source project accounts on platforms such as X (Twitter), LinkedIn, and GitHub to easily get updates. This works best for those who are actively participating on the social media platforms. For quick updates and news regarding a specific project, then this is the right place to get it – plus it also allows you to enage with other people interested with the same project as you.</p>
</li>
<li><p><strong>Meetups and conferences</strong> - start attending local meetups, conferences, and workshops that are related to open-source projects. This may act as a good opportunity to start making connections.</p>
</li>
<li><p><strong>Online communities</strong> - use platforms such as Stack Overflow, Reddit, and Discord to connect with fellow contributors.</p>
</li>
</ul>
<h3 id="heading-etiquette-communication-norms-and-best-practices">Etiquette, Communication Norms, and Best Practices</h3>
<p>Once you've found a community to join, it's important to follow etiquette and communication norms. Here's a guide to best practices:</p>
<ul>
<li><p><strong>Read the guidelines</strong> - Read and understand the community guidelines. They help ensure that everyone feels equal, safe, and respected.</p>
</li>
<li><p><strong>Introduce yourself</strong> - How we introduce ourselves will often be how others remember us. When you introduce yourself, remember to be respectful and concise.</p>
</li>
<li><p><strong>Listen and learn</strong> - Before you begin making any kind of contributions, take some time to first understand the culture of the community.</p>
</li>
<li><p><strong>Ask questions</strong> - whenever you encounter a challenge, feel free to ask a question and be sure to provide some context to indicate you did attempt to find an answer yourself.</p>
</li>
<li><p><strong>Accept feedback</strong> - whenever you receive feedback of any kind, thank the person and accept their opinion. Remember that continuous learning is key.</p>
</li>
<li><p><strong>Don't spam</strong> - Avoid spamming the communication channels with the same questions. Just use appropriate channels for different topics.</p>
</li>
<li><p><strong>Be patient</strong> - remember that the communities have contributors from different time zones, so give them adequate time to respond.</p>
</li>
</ul>
<h2 id="heading-how-to-set-up-a-development-environment">How to Set Up a Development Environment</h2>
<p>A well-configured environment is the foundation not only for open-source contribution but for development in general.</p>
<p>It may sound like a difficult thing to do, but when you are contributing to multiple projects and working on personal projects from your machine, having an environment will be really helpful.</p>
<p>Here are a few things to note when it comes to setting up your development environment:</p>
<h3 id="heading-install-the-necessary-tools">Install the Necessary Tools</h3>
<ul>
<li><p>Local setup - In most projects, they will list all the requirements needed for setup. Just be sure to install them as instructed on the project's documentation.</p>
</li>
<li><p>Consider using a virtual environment, as this will help in isolating project-specific dependencies.</p>
</li>
<li><p>Using Docker is a good option, too, as it ensures consistent environments across different machines you might be working with.</p>
</li>
</ul>
<h3 id="heading-text-editors-and-integrated-development-environments-ides">Text Editors and Integrated Development Environments (IDEs)</h3>
<p>Text Editors and IDEs are the tools that help your write, edit, and manage your code. Depending on your programming language of choice and personal preference, you can choose from different options such as Visual Studio Code, Sublime Text, or JetBrains IDEs like PyCharm or IntelliJ IDEA.</p>
<p>These tools offer features like:</p>
<ul>
<li><p>syntax highlighting,</p>
</li>
<li><p>auto-completion</p>
</li>
<li><p>debugging</p>
</li>
</ul>
<p>These features can help enhance your coding experience.</p>
<p>In addition to the regular installation, be sure to install any necessary extensions that will help make your workflow smoother.</p>
<h3 id="heading-version-control-systems">Version control systems</h3>
<p>Version control is the cornerstone of collaboration in software development. The most commonly known and used one is Git. It allows you as a developer to record changes made to code, create branches to easily add new features without interfering with main code, and allows easy merging of the changes.</p>
<p>But Git by itself can't accomplish all this, so it works together with GitHub.</p>
<p>GitHub is a web-based platform that allows you to host source code in what is referred to as a repository. Together with Git, GitHub offers multiple beneficial features to developers – but the most important one, apart from collaboration, is that it offers a visual interface for managing the repositories. This makes it easier to track issues, merge changes and so on.</p>
<p>You can learn more about the basics of Git and GitHub in this <a target="_blank" href="https://www.freecodecamp.org/news/git-and-github-the-basics/">guide</a>.</p>
<p>Moving forward, just like with any other software, to get started using Git you'll first need to download and set it up. But first make sure that you already have a GitHub account created. If not, you can visit <a target="_blank" href="https://github.com/">github.com</a> and create one, then proceed with the steps below afterwards.</p>
<ul>
<li><p>Step 1: Download Git from the <a target="_blank" href="https://git-scm.com/downloads">official site</a>.</p>
</li>
<li><p>Step 2: Run the executable file to install Git locally. If you are on another OS than Windows, be sure to check the specific commands you can use to install Git from the official site.</p>
</li>
<li><p>Step 3: Configure Git with your details, including your username and email. For that you will need to open the Git terminal and run the commands below:</p>
</li>
</ul>
<pre><code class="lang-python">git config --<span class="hljs-keyword">global</span> user.name <span class="hljs-string">"Your name here"</span>
git config --<span class="hljs-keyword">global</span> user.email <span class="hljs-string">"your_email@example.com"</span>
</code></pre>
<p>For some extra customization, you can run the commands below. The first one will add some color to the output, and the second one will tell Git to use emacs.</p>
<pre><code class="lang-python">git config --<span class="hljs-keyword">global</span> color.ui true
git config --<span class="hljs-keyword">global</span> core.editor emacs
</code></pre>
<p>Now you should be ready to use Git. If you want to learn more and dive in deeper, here's a helpful <a target="_blank" href="https://www.freecodecamp.org/news/how-to-use-git-best-practices-for-beginners/">beginner-friendly Git resource</a> for you.</p>
<p>We will be discussing the most common Git commands later on in the upcoming sections.</p>
<h3 id="heading-how-to-fork-clone-and-set-up-projects">How to fork, clone, and set up projects</h3>
<p>Now we'll cover some of the most important parts of using Git.</p>
<p>First, what is <strong>forking</strong>? Well, it allows you to make a personal copy of a project's repository to your GitHub account. This step is important mostly when you want to make contribution to a project that you don't have direct access to.</p>
<p>In order to fork a repo, on the GitHub repository page, click <code>Fork</code>, usually on the top right corner.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/fork-repo-1.png" alt="fork-repo-1" width="600" height="400" loading="lazy"></p>
<p>This will create a copy of the repository under your account, changing the URL of the project to:</p>
<p><code>https://github.com/&lt;your-user-name&gt;/projectname</code></p>
<p><strong>Cloning</strong> allows you to download a copy of the already forked repo to your own local machine. In order for you to perform this step, you must have Git installed locally in your machine. If you haven't done this yet, check out the <a class="post-section-overview" href="#heading-version-control-systems-1">Version control systems</a> section above.</p>
<p>First, you will need to navigate to your account and locate the forked repo. Then copy the URL directly from the browser or click the <code>Code</code> button to copy the URL. You'll have three option to choose from: HTTPS, SSH, and GitHub CLI. You can choose either of the first two options.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/clone-repo.png" alt="clone-repo" width="600" height="400" loading="lazy"></p>
<p>Next, in your local machine, open the terminal and run this command:</p>
<p><code>git clone https://github.com/&lt;your-user-name&gt;/&lt;projectname&gt;</code></p>
<p>Be sure to navigate to where you need the project to be copied to, for example Downloads, Desktop, and so on:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/git-clone.jpg" alt="git-clone" width="600" height="400" loading="lazy"></p>
<p>Alternatively, you can opt to use the GitHub Desktop application to perform all the above steps. But first you will need to have it <a target="_blank" href="https://desktop.github.com/">installed</a> and fully configured.</p>
<p>Next, instead of copying the URL and pasting it on your terminal, select the option that says <code>Open with GitHub Desktop</code>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/github-desktop.png" alt="github-desktop" width="600" height="400" loading="lazy"></p>
<p>Now you'll need to know how to <strong>set up the project locally</strong>. Navigate to the project directory using the terminal and be sure to install dependencies if there are any that are listed.</p>
<p>To check if everything is set up correctly, run the project locally and ensure that it works as expected.</p>
<h2 id="heading-understanding-project-structure-and-workflow">Understanding Project Structure and Workflow</h2>
<p>Open-source projects come in various shapes and sizes, but what's common among them all is the structure and workflow. By having a clear understanding of the development process, it will make your contributing process easier.</p>
<h3 id="heading-overview-of-a-typical-open-source-project-structure">Overview of a Typical Open-Source Project Structure</h3>
<p>A typical open-source project will have the following people associated with it:</p>
<ul>
<li><p><strong>Author</strong> - Also referred to as Owner. Represents the person who created the project. They have the power to assign new roles to other members to help with the project's maintenance.</p>
</li>
<li><p><strong>Maintainers</strong> - They are responsible for driving the vision and goals of the project. They're usually responsible for the direction of the project and are committed to improving it.</p>
</li>
<li><p><strong>Contributors</strong> - This represents people like you who add/make changes to the project in one way or another. They follow the same code review process, are subject to the same requirements on code style, and so on.</p>
</li>
<li><p><strong>Community Members/Users</strong> - These valuable members of the community can provide feedback about features, bug reports, and more.</p>
</li>
</ul>
<p>In addition the different roles and people, the structure will usually look like this:</p>
<ul>
<li><p>The <strong>Root Directory</strong> will consist of important project files, such as the README, license information, and configuration files.</p>
</li>
<li><p>The <strong>Source Code Directory</strong> houses the main source code of the project. It can be organized by either libraries, modules or components.</p>
</li>
<li><p>The <strong>Documentation Directory</strong> contains user manuals, guides for any APIs to help users and contributors understand the project.</p>
</li>
<li><p>The <strong>Configuration Files</strong> contain files with instructions on how to setup the project's build process, dependencies and other helpful configurations.</p>
</li>
<li><p>The <strong>Assets Directory</strong> contains no-code files like images and other templates used by the project.</p>
</li>
<li><p>The <strong>Scripts Directory</strong> contains automation tools that the project might need.</p>
</li>
</ul>
<p>Below is a section of the freeCodeCamp repository workflow with most of the files listed above:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/workflow-structure.png" alt="workflow-structure" width="600" height="400" loading="lazy"></p>
<h2 id="heading-how-to-make-your-first-contribution">How to Make Your First Contribution</h2>
<p>Before making your first contribution, make sure that you have chosen beginner friendly issues or task to work on. To help you find good beginner friendly issues/tasks, here are a few tips:</p>
<ul>
<li><p>Browse through project issues trackers on platforms such as GitHub. During the search, look for projects labeled "beginner-friendly," "good first issue," or "help wanted." This are usually designed for beginners. <a target="_blank" href="https://www.freecodecamp.org/news/how-to-find-good-first-issues-on-github/">Here's a guide</a> that shares more info on this topic.</p>
</li>
<li><p>Make sure you understand the issue's description before you begin working on the task. This will help you choose a task that aligns with your skills and interests.</p>
</li>
<li><p>If you are completely new with no prior knowledge, check for projects that offer mentorships to beginners.</p>
</li>
</ul>
<p>For a detailed guide on <a target="_blank" href="https://www.freecodecamp.org/news/github-search-tips/">how to search for issues and repos on GitHub, check out this guide</a>.</p>
<h3 id="heading-step-by-step-guide-to-making-a-contribution">Step-by-Step Guide to Making a Contribution</h3>
<p>Now that you know how to search for a beginner friendly project – and assuming you have already gotten one that aligns with your skills – the next step is making your contributions.</p>
<p>For a demo, I will be making a non-code contribution (and I'll discuss more about this later).</p>
<ul>
<li><p>Step 1: Fork the repository</p>
</li>
<li><p>Step 2: Clone the repo onto your local machine.</p>
</li>
<li><p>Step 3: Create a new branch</p>
</li>
</ul>
<p>To create a branch, run the below command and remember to give your branch a descriptive name:</p>
<p><code>git checkout -b descriptive name</code></p>
<p>This will create the branch and switch to it automatically.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/branch-name.jpg" alt="branch-name" width="600" height="400" loading="lazy"></p>
<ul>
<li><p>Step 4: Make the necessary changes – this can be fixing typos, fixing a bug, and so on – it all depends with the issue you have chosen.</p>
</li>
<li><p>Step 5: After making your changes, it's time to add the new changes into the main branch. You can see all changes made by running: <code>git status</code></p>
</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/git-status.jpg" alt="git-status" width="600" height="400" loading="lazy"></p>
<p>You can choose to add each file modified individually using <code>git add file-name</code> or you can add the modified files all at once using: <code>git add *</code></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/git-add.jpg" alt="git-add" width="600" height="400" loading="lazy"></p>
<p>You will notice that the changes are no longer highlighted in red but instead in green. This means that they are ready to be committed.</p>
<p>To make a commit, we move on to the next step which is adding a commit message. This basically explains the changes we have made: <code>git commit -m "&lt;message here&gt;"</code>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/commit-message.jpg" alt="commit-message" width="600" height="400" loading="lazy"></p>
<ul>
<li>Step 6: We need to regularly sync the forked repo with the original repo. This incorporates all the changes made by other contributors. To do this, run the commands below one after the other:</li>
</ul>
<pre><code class="lang-python">git fetch upstream
git rebase upstream/main
</code></pre>
<ul>
<li>Step 7: Push the changes to GitHub Now that everything is set, it's time to let our maintainer know what we have added. You do this by pushing the changes with this command: <code>git push origin descriptive-branch-name</code>.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/git-push.jpg" alt="git-push" width="600" height="400" loading="lazy"></p>
<ul>
<li>Step 8: This is the last step, where we submit a PR. For this step you will need to go back to GitHub under the repo you had forked earlier. You should be able to see a pop-up with a button saying <code>Compare &amp; pull request</code> – click on it.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/pull-request.png" alt="pull-request" width="600" height="400" loading="lazy"></p>
<p>Clicking this will allow you to give your PR a name, add a description of what you have done, mark the checklist (if there is one) to ensure that you have fulfilled all the requirements, and then finally clicking on the <code>Create pull request</code> button which is slightly below the description box.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/create-pr.png" alt="create-pr" width="600" height="400" loading="lazy"></p>
<p>Then the maintainer will merge all your changes into the master branch of this project (unless they need you to make updates first). You will get a notification email once the changes have been merged.</p>
<h2 id="heading-collaboration-within-the-community">Collaboration Within the Community</h2>
<p>Being part of a new community or environment in any kind of setting isn’t easy – and more so for people who refer to themselves as introverts.</p>
<p>When it comes to open-source communities, newcomers often face various challenges that can deter them from feeling comfortable and affect their contributions.</p>
<p>The first step in fixing a problem is to identify it. This will bring you closer to finding a solution. Some of the most common challenges faced by newcomers in OS communities include:</p>
<ul>
<li><p>Feeling overwhelmed/intimidated by the expertise of other community members.</p>
</li>
<li><p>Struggling to understand the project structure and codebase.</p>
</li>
<li><p>Lack of clear understanding of the contribution guidelines.</p>
</li>
<li><p>Encountering an unwelcoming community.</p>
</li>
<li><p>Lack of recognition and appreciation of contributions.</p>
</li>
<li><p>Struggling to find tasks that matches your skills/expertise</p>
</li>
</ul>
<p>By addressing the above challenges, we will be one step closer to creating supportive communities which are comfortable for all. As we know collaboration is key for the success of any open-source project and community engagement can play a major role on your career while at the same time shaping you to become a better contributor.</p>
<p>There are different ways to address these common challenges while at the same time engaging with the community to ensure the project's success:</p>
<ol>
<li><p>Participating in discussions and forums</p>
</li>
<li><p>Giving and receiving feedback on contributions</p>
</li>
<li><p>Learning from the experienced contributors</p>
</li>
<li><p>Mentoring other contributors and taking part in pair programming.</p>
</li>
<li><p>Attending and being part of community events.</p>
</li>
</ol>
<p>In addition to this remember to be patient, stay humble, listen actively, celebrate others, and take part in discussions about the future of the project.</p>
<h2 id="heading-beyond-code-non-coding-contributions">Beyond Code: Non-Coding Contributions</h2>
<p>The good thing about opens-source projects is that they can often accommodate people with all kinds of skillsets. Contributing extends beyond just writing code. Non-coding skills are also important to the success of the open-source projects.</p>
<p>If you are looking for different ways to get involved in open-source and don't have coding skills, this section is for you.</p>
<h3 id="heading-update-the-documentation">Update the Documentation</h3>
<p>Good documentation is the backbone of any successful project, not only in open-source but even in the real-world products. Clear and detailed documentation will help users and developers understand the project easily.</p>
<p>Some ways you can contribute to the documentation include:</p>
<ul>
<li><p><strong>Writing tutorials</strong> - You can opt to write step-by-step tutorials that will guide users through steps such as installation, setup, usage and troubleshooting.</p>
</li>
<li><p><strong>API Documentation</strong> - Document the project's APIs, and provide code examples for the developers who might want to integrate the project.</p>
</li>
<li><p><strong>User guides</strong> - Write user-friendly guides that break down the complex concepts in simple and easy to understand sections.</p>
</li>
</ul>
<h3 id="heading-contribute-to-the-design-and-user-experience-ux">Contribute to the Design and User Experience (UX)</h3>
<p>Any project that is made for an end user will greatly benefit from a well-designed user interface. If you have some skills in the design field, you can contribute by:</p>
<ul>
<li><p><strong>Improving UI/UX</strong> - improve the project's look by suggesting more user-friendly designs and creating mockups for the same.</p>
</li>
<li><p><strong>Creating Icons and Graphics</strong> - design logos, icons, banners and other visual assets that will help promote the project's branding.</p>
</li>
<li><p><strong>User Testing</strong> - take part in testing the designs and provide feedback.</p>
</li>
</ul>
<h3 id="heading-help-with-translation-and-localization">Help with Translation and Localization</h3>
<p>Many projects are trying to reach a global audience, and as a native speaker of your language you can help with this.</p>
<p>Contribution by translation and localization ensures that the projects can easily be accessible by people from different backgrounds all around the world. As a contributor you can help by:</p>
<ul>
<li><p><strong>Translating Content</strong> - you can translate the documentation, user interface, and any other relevant content.</p>
</li>
<li><p><strong>Cultural Adaptation</strong> - whenever you translate a project, be sure that the content is relevant to the culture and aligns with local contexts.</p>
</li>
</ul>
<h3 id="heading-participate-in-quality-assurance-and-testing">Participate in Quality Assurance and Testing</h3>
<p>It may not seem like much, but testing is crucial for maintaining any good open-source project. The good thing about testing is that even though you are not a developer you can contribute by:</p>
<ul>
<li><p><strong>User Testing</strong> - this involves testing the projects under different use cases and giving feedback on any encountered bugs, glitches, and issues. This feedback will help make the project better for the next development face.</p>
</li>
<li><p><strong>Beta Testing</strong> - this involves being part of testing products before they are officially released. Help identify any issues that the end user might encounter.</p>
</li>
</ul>
<h3 id="heading-engage-with-the-community">Engage with the Community</h3>
<p>Having a strong community creates a safe space where contributors can focus on major things like improving the software's quality and ensuring the long-term sustainability of the project. You can contribute by:</p>
<ul>
<li><p><strong>Moderation</strong> - you can offer to moderate discussion forums, chat rooms, and community platforms to ensure a positive and inclusive environment.</p>
</li>
<li><p><strong>Answering Questions</strong> - you can assist other community members by answering any questions that they may have.</p>
</li>
</ul>
<h3 id="heading-do-marketing-and-outreach">Do Marketing and Outreach</h3>
<p>The more an open source project is visible to the community, the better - and this includes visibility on social platforms. If you have marketing or communication skills you can contribute by:</p>
<ul>
<li><p>Promoting the projects on social media platforms.</p>
</li>
<li><p>Writing tutorials and articles that highlight features offered by different projects, along with their importances and use cases.</p>
</li>
</ul>
<h3 id="heading-help-with-fundraising-and-donations">Help with Fundraising and Donations</h3>
<p>Lack of adequate funds to support the project's growth and sustainability may lead to its collapse before you even know it. A good way to address such a problem is by:</p>
<ul>
<li><p><strong>Fundraising initiatives</strong> - organizing fundraising campaigns to support the project financially.</p>
</li>
<li><p><strong>Sponsorship outreach</strong> - applying for grants, seeking sponsorship, and joining incubator programs.</p>
</li>
</ul>
<h2 id="heading-best-practices-for-quality-contributions">Best Practices for Quality Contributions</h2>
<p>Contributing to open-source is not just about writing code, it's about creating high-quality and valuable contributions that will make the project easily accessible to others.</p>
<p>Here are some best practices that will help you contribute code that is clean, easy to maintain, and follows the industry standards.</p>
<h3 id="heading-write-clean-and-maintainable-code">Write Clean and Maintainable Code</h3>
<p><a target="_blank" href="https://www.freecodecamp.org/news/how-to-write-clean-code/">Clean code</a> can be described as code that is easy to read, understand, and maintain.</p>
<p>By writing clean code you will not only make it easier for others to read through but also for your future self.</p>
<p>When trying to write clean code, here are some key best practices:</p>
<ul>
<li><p>Use meaningful variable, function, and class names.</p>
</li>
<li><p>Break down the code into smaller managable sections.</p>
</li>
<li><p>Make use of comments to provide additional context.</p>
</li>
<li><p>Maintain consistency in your coding style.</p>
</li>
<li><p>Don't Repeat Yourself (DRY)</p>
</li>
</ul>
<h3 id="heading-test-and-document-your-code">Test and Document Your Code</h3>
<ul>
<li><p>Always write unit tests, integration tests, and end-to-end tests to ensure that the code works correctly.</p>
</li>
<li><p>Remember to always document your development progress. This includes the code's purpose, usage instruction, and so on.</p>
</li>
</ul>
<h2 id="heading-how-to-handle-challenges">How to Handle Challenges</h2>
<p>Being a new person in any field, you are bound to encounter different challenges that may make you question your desire to contribute.</p>
<p>But you can also see the challenges as stepping stones rather than roadblocks, preparing you to be a better contributor.</p>
<h3 id="heading-how-to-handle-rejection-and-criticism">How to handle rejection and criticism</h3>
<p>Rejection and criticism can be tough to handle, especially for beginners. Not everyone in a community can be as welcoming as we'd like, but just remember – this experience is still an opportunity of focus and improvement.</p>
<p>In case you encounter rejection and criticism, here are a few things to help you overcome them:</p>
<ul>
<li><p><strong>Maintain a growth mindset</strong> - approach the rejection with an open mind and view it as a chance for you to learn and improve on your skills.</p>
</li>
<li><p><strong>Ask for feedback</strong> - in a case you have made a contribution and it has been rejected, always ask for feedback. This will help guide your future contributions while at the same time improving your skills</p>
</li>
<li><p><strong>Learn from others</strong> - before making your contributions, take time to learn from what other experienced contributors are doing. This can help you know how to structure your code, write documentation, and how to address issues. In return you will be on the safe side while making your contributions.</p>
</li>
<li><p><strong>Be persistent</strong> - use rejection as a motivation to refine your work and resubmit again.</p>
</li>
</ul>
<h3 id="heading-how-to-ask-for-help">How to ask for help</h3>
<p>Many beginners, not only in the open-source world but in other fields as well, may be hesitant to ask for help. This is often because they don't want to appear to be inexperienced.</p>
<p>If you find yourself feeling this way, you may be forgetting that you're new to the field, and asking for assistance is part of the learning process. Even if you're a more seasoned contributor, you may still feel insecure at times (imposter syndrome, anyone?) - and this is ok. Everyone has their doubts at times. Just keep pushing forward.</p>
<p>As a beginner in open-source, to ensure that you receive the help you need, here are some tips:</p>
<ul>
<li><p><strong>Do your research</strong> - attempt to solve the issue by yourself first before seeking help. This demonstrates your commitment to learning and problem solving skills.</p>
</li>
<li><p><strong>Be specific</strong> - provide detailed info about the problem you are facing. This can include mentioning the steps you have taken so far, the result you have gotten, highlighting the errors you faced, and so on. The more detailed the question, the easier it is for others to help you.</p>
</li>
</ul>
<h3 id="heading-strategies-for-overcoming-common-challenges">Strategies for Overcoming Common Challenges</h3>
<ol>
<li><p>Time management - balancing between open-source and personal work can be challenging sometimes. Be sure to set realistic goals and avoid overcommitting.</p>
</li>
<li><p>Impostor syndrome - this is where you feel inadequate despite there being solid evidence of your skills. Remember that we all begin somewhere – just try to appreciate your learning journey and focus on your progress.</p>
</li>
<li><p>Large code bases can be overwhelming to beginners. As a good practice, start small and work your way up as you gain more confidence and familiarize yourself with the codebase.</p>
</li>
<li><p>Burnout prevention - prioritize self-care, take breaks when necessary, and always remember that making small steps is more valuable than overwhelming yourself with a task.</p>
</li>
</ol>
<h2 id="heading-how-to-showcase-your-open-source-contributions">How to Showcase Your Open-Source Contributions</h2>
<p>Just like in any other field of work, you need to market yourself. And one of the best ways to do that is by showcasing your projects and contributions online. It's time to shine a spotlight on your work.</p>
<p>In return, this may attract potential employers, collaborators, and give you recognition in the broader tech ecosystem.</p>
<h3 id="heading-build-an-online-portfolioprofile">Build an online portfolio/profile</h3>
<p>The most common way to showcase any form of work online is through personal portfolio and here is how you can achieve this to showcase your open-source contributions:</p>
<p>Begin by selecting a platform that best works for you. This might include GitHub pages, your personal website, and platforms like Behance or Dribbble for designer-related projects.</p>
<p>Now that you have a platform, organize you your work in categories including a brief description, role played, and any challangages you might have encountered.</p>
<p>Remember to add code samples for different projects you have wokred on and a brief explanation of what the project/code does.</p>
<p>Finally, add a short bio that highlights your passion for open source and technology. Make it engaging and relatable.</p>
<h3 id="heading-highlight-your-contributions-on-your-resumesocial-media-platforms">Highlight your contributions on your résumé/social media platforms</h3>
<p>This is mostly helpful when potential employers are reviewing your résumé or GitHub/LinkedIn profile. Your contributions may set you apart from other applicants.</p>
<p>Here is how you can utilize this to stand out:</p>
<ul>
<li><p>Have a dedicated section where you can list all your open-source contributions and a brief description of your involvement.</p>
</li>
<li><p>Quantify the impact that you contribution played to the success of the project.</p>
</li>
<li><p>Highlight the skills you gained through contributing to open-source.</p>
</li>
<li><p>If you have an online profile, be sure to include a link of it on your resume, this will help recruiters explore your contribution in depth.</p>
</li>
</ul>
<h3 id="heading-networking">Networking</h3>
<p>Networking can open doors and connect you with multiple opportunities.</p>
<p>Here is how you can leverage your open-source experience for networking purposes:</p>
<ul>
<li><p>Talk about your contributions to open-source projects. This can be through sharing insights, asking questions, and so on.</p>
</li>
<li><p>Attend meetups and conferences related to technologies you have worked with or have experince in.</p>
</li>
<li><p>Connect with fellow contributors on platforms such as GitHub.</p>
</li>
<li><p>Take part in hackathons, workshops, mentorships and collaborative coding events with people os same interest.</p>
</li>
<li><p>Share your thought by writing tutorials about your open-source experiences, challenges you've overcome, and lessons you've learned.</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>As you come to the end of this guide, take a moment to reflect on the journey. You have gained valuable insights while at the same time discovering how impactful you contributions can be no matter how small they are.</p>
<p>If you have contributed to open-source before, think back to when you first began your open-source journey. Remember the joy you felt when your first PR was merged, the satisfaction you had when you solved that bug, wrote that line of code, resolved that issue, or updated that documentation.</p>
<p>All this has left a mark on the projects you have worked on. Be proud of yourself 😊.</p>
<p>Remember that the open-source community thrives on diversity, and every contribution, no matter how small, adds value. By participating in open source, you're contributing to a global movement that values transparency, cooperation, and the free exchange of knowledge.</p>
<p>Here's to your continued success in open-source contributions, learning, and making a difference.</p>
<p>Happy coding! 🚀🌍</p>
<h2 id="heading-additional-resources">Additional Resources</h2>
<ul>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/open-source-projects-every-dev-should-know/">Open Source Projects Every Developer Should Know About</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/automate-open-source-projects-with-github-actions/">How to Use GitHub Actions to Automate Open-Source Projects</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/github-search-tips/">GitHub Search Tips – How to Search Issues, Repos, and More Effectively on GitHub</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/how-to-write-a-good-readme-file/">How to Write a Good README File for Your GitHub Project</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/developer-communities-to-join-to-grow-your-career/">Developer Communities to Join to Help You Grow Your Tech Career</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/how-to-contribute-to-open-source-projects-beginners-guide/">How to Contribute to Open Source Projects – A Beginner's Guide</a></p>
</li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Check if a Key Exists in a Dictionary in Python – Python Dict Has Key ]]>
                </title>
                <description>
                    <![CDATA[ Python is one of the most popular programming languages today. Its usage cuts across multiple fields, but the most common ones are data science, machine learning, and web development.  When you're coding in Python, you'll use different data structure... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-check-if-a-key-exists-in-a-dictionary-in-python/</link>
                <guid isPermaLink="false">66b8dbcd57c651c38343a9b6</guid>
                
                    <category>
                        <![CDATA[ dictionary ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Tue, 27 Jun 2023 16:59:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/06/CoverImage-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Python is one of the most popular programming languages today. Its usage cuts across multiple fields, but the most common ones are data science, machine learning, and web development. </p>
<p>When you're coding in Python, you'll use different data structures. In Python, among the most used is the dictionary. </p>
<p>A dictionary is a collection of key-value pairs that allows you to store and retrieve data. </p>
<p>When working with dictionaries, it's a common practice to check if a key exists or not. This can be most helpful when you are working with a large dataset and need to access values based on their keys. </p>
<p>In this article, we are going to explore different ways that we can use to check if a key exists in a dictionary in Python. Let's get started.</p>
<h2 id="heading-method-1-using-the-in-operator">Method 1: Using the <code>in</code> Operator</h2>
<p>You can use the <code>in</code> operator to check if a key exists in a dictionary. It's one of the most straightforward ways of accomplishing the task. When used, it returns either a <code>True</code> if present and a <code>False</code> if otherwise. </p>
<p>You can see an example of how to use it below:</p>
<pre><code class="lang-python">my_dict = {<span class="hljs-string">'key1'</span>: <span class="hljs-string">'value1'</span>, <span class="hljs-string">'key2'</span>: <span class="hljs-string">'value2'</span>, <span class="hljs-string">'key3'</span>: <span class="hljs-string">'value3'</span>}

<span class="hljs-keyword">if</span> <span class="hljs-string">'key1'</span> <span class="hljs-keyword">in</span> my_dict:
    print(<span class="hljs-string">"Key exists in the dictionary."</span>)
<span class="hljs-keyword">else</span>:
    print(<span class="hljs-string">"Key does not exist in the dictionary."</span>)
</code></pre>
<p>From the code sample above, we check if <code>key1</code> exists in <code>my_dict</code>. If it does, then the confirmation message will be displayed. If not, the message indicating the key does not exist gets printed. </p>
<h2 id="heading-method-2-using-the-dictget-method">Method 2: Using the <code>dict.get()</code> Method</h2>
<p>The <code>dict.get()</code> method will return the value associated with a given key if it exists and <code>None</code> if the requested key is not found. </p>
<pre><code class="lang-python">my_dict = {<span class="hljs-string">'key1'</span>: <span class="hljs-string">'value1'</span>, <span class="hljs-string">'key2'</span>: <span class="hljs-string">'value2'</span>, <span class="hljs-string">'key3'</span>: <span class="hljs-string">'value3'</span>}

<span class="hljs-keyword">if</span> my_dict.get(<span class="hljs-string">'key1'</span>) <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>:
    print(<span class="hljs-string">"Key exists in the dictionary."</span>)
<span class="hljs-keyword">else</span>:
    print(<span class="hljs-string">"Key does not exist in the dictionary."</span>)
</code></pre>
<p>From the code sample above, we used the <code>dict.get()</code> method to get the values associated with <code>key1</code>. If the requested key is present, the <code>my_dict.get('key1') is not None</code> evaluates to True, meaning the requested key is present.</p>
<h2 id="heading-method-3-using-exception-handling">Method 3: Using Exception Handling</h2>
<p>Exception handling allows you to first try and access the value of the key and handle the <code>KeyError</code> exception if it occurs. </p>
<pre><code class="lang-python">my_dict = {<span class="hljs-string">'key1'</span>: <span class="hljs-string">'value1'</span>, <span class="hljs-string">'key2'</span>: <span class="hljs-string">'value2'</span>, <span class="hljs-string">'key3'</span>: <span class="hljs-string">'value3'</span>}

<span class="hljs-keyword">try</span>:
    value = my_dict[<span class="hljs-string">'key1'</span>]
    print(<span class="hljs-string">"Key exists in the dictionary."</span>)
<span class="hljs-keyword">except</span> KeyError:
    print(<span class="hljs-string">"Key does not exist in the dictionary."</span>)
</code></pre>
<p>The code sample above allows us to access the value associated with <code>key1</code>. If it exists, the code inside <code>try</code> executes and the message gets printed. But if the <code>KeyError</code> exception occurs, then it means the key does not exist and the code inside the <code>except</code> block will be executed. </p>
<h3 id="heading-additional-points">Additional Points</h3>
<ul>
<li><p><strong>Key exists versus value exists</strong>
The methods we have discussed above only check if a key exists. If we were to check if a value is present, we will need to iterate through the values using methods like <code>dictname.values()</code>.</p>
</li>
<li><p><strong>Performance considerations</strong>
Different methods may have different performance implications depending on the size of your dictionary. Generally the <code>in</code> operator is best for small to medium-sized dictionaries while <code>dict.get()</code> and exemption handling are a good fit for large dictionaries.</p>
</li>
<li><p><strong>Combining methods</strong>
A good thing about working with Python dictionary methods is that you can combine them. For example, you can use the <code>in</code> operator to check if a key exists and the <code>dict.get()</code> to retrieve its value if it exists.</p>
</li>
<li><p><strong>Using <code>dict.setdefault()</code></strong>
It allows you to check if a key exists and returns the value if present. In case the key is missing, then you can set a default value while adding it to the dictionary at the same time.</p>
</li>
</ul>
<p>With an understanding of the above points and good practice using these methods, you should be comfortable working with dictionaries in Python. </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ ImportError: cannot import name 'force text' from 'django.utils.encoding' [Python Error Solved] ]]>
                </title>
                <description>
                    <![CDATA[ Encountering errors is very common during software development, and when working with Python and Django one such error is ImportError: cannot import name 'force text' from 'django.utils.encoding'. This particular error indicates that there is a probl... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/importerror-cannot-import-name-force-text-from-django-utils-encoding-python-error-solved/</link>
                <guid isPermaLink="false">66b8dbeff88daef58d10eef0</guid>
                
                    <category>
                        <![CDATA[ error ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Tue, 27 Jun 2023 16:43:24 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/06/CoverImage-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Encountering errors is very common during software development, and when working with Python and Django one such error is <code>ImportError: cannot import name 'force text' from 'django.utils.encoding'</code>.</p>
<p>This particular error indicates that there is a problem with importing the <code>force text</code> method from the <code>django.utils.encoding</code> module. The missing method is used for converting input data into a consistent text string format.</p>
<p>Perhaps you might wonder, what exactly caused this error even though you seem to have done everything right, well here is what might have happened: </p>
<ul>
<li>Outdated package</li>
<li>Incorrect import statement</li>
</ul>
<p>So, we know the cause but how do we solve the error? Below are a couple of steps to solve it:</p>
<h2 id="heading-step-1-update-packages-and-django">Step 1: Update Packages and Django</h2>
<p>In most cases, the error message will contain information about the package that caused the error. After confirming which one it is, follow the necessary steps to update it. </p>
<p>In most cases, to update a package in Python, you can use <code>pip install &lt;packagename&gt; --upgrade</code>, replacing the <code>packagename</code> with your desired package.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/force_text.png" alt="force_text" width="600" height="400" loading="lazy"></p>
<p>Another cause for an outdated package is if you are using an older version of Django. Previous versions of Django used the <code>force_text</code> method which changed to <code>force_str</code> in the newer version. So updating Django might also solve the problem.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/version.png" alt="version" width="600" height="400" loading="lazy"></p>
<h2 id="heading-step-2-update-import-statement">Step 2: Update Import Statement</h2>
<p>Next you'll need to confirm that the import statement is correct. The correct import statement should look like this:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> django.utils.encoding <span class="hljs-keyword">import</span> force_text
</code></pre>
<p>For Django 3.0 and above, it looks like this:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> django.utils.encoding <span class="hljs-keyword">import</span> force_str
</code></pre>
<p>Generally when working with Django, understanding the possible cause of an error will bring you one step closer to solving it. </p>
<p>Be sure to read through the error message carefully, as in most cases it points you to the correct area and how to solve the error you may encounter.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is a PWA? Progressive Web Apps for Beginners ]]>
                </title>
                <description>
                    <![CDATA[ These days, everything is made possible with the help of mobile phones and applications. Let's say you need to order food – you can do so instantly via the company's app. Maybe you need government services – the same thing applies. You can even get m... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-are-progressive-web-apps/</link>
                <guid isPermaLink="false">66b8dc0a34a5a4a0df79b3ee</guid>
                
                    <category>
                        <![CDATA[ progressive web app ]]>
                    </category>
                
                    <category>
                        <![CDATA[ PWA ]]>
                    </category>
                
                    <category>
                        <![CDATA[ responsive design ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Tue, 27 Jun 2023 12:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/06/CoverImagePWA.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>These days, everything is made possible with the help of mobile phones and applications.</p>
<p>Let's say you need to order food – you can do so instantly via the company's app. Maybe you need government services – the same thing applies. You can even get medical emergency dial services via an app.</p>
<p>There's an app for everything – from banking to studying and from trading to shopping. Every business has an app, and even our governments have simplified their services into app form.</p>
<p>Hold on, building and maintaining an app is cumbersome, and it's quite expensive for small businesses, so how do they manage?</p>
<p>Well it's simple: with the help of advancements in technology there is an option that helps small businesses out. This option combines the features of an app with the technology used in web development to build affordable services for businesses – I'm talking about <strong>Progressive Web Apps</strong>.</p>
<p>Let's dive in and get a better understanding of what PWAs are all about.</p>
<h2 id="heading-what-is-a-progressive-web-app">What is a Progressive Web App?</h2>
<p>Progressive Web Applications (PWAs) are apps built with web technologies that we probably all know and love, like HTML, CSS, and JavaScript. But they have the feel and functionality of an actual native app. Wait a minute! Native Apps, what do we mean by this?</p>
<p>A <strong>Native App</strong> is a software application built in a specific programming language for a specific device platform, either IOS or Android.<br>PWAs are built with the capabilities like push notifications and the ability to work offline. They are also built on and enhanced with modern APIs which makes it easy to deliver improved capabilities along with reliability and the ability to install them on any device.</p>
<p>PWAs takes advantage of the huge web ecosystem this is inclusive of the plugins, and community and the relative ease of deploying and keeping a website contrary to a native application which is pretty difficult to develop. This means you can build a PWA quickly and easily.</p>
<p>With its popularity many companies have shifted into the product, I tend to believe that this is because of its ability to run on an android and iOS without much difference. Some good examples of top companies who have their products as PWAs include: <em>Twitter, Pintrest, Uber, Tiktok, Spotify, Jumia (a leading e-commerce site in Africa)</em> etc...</p>
<p>A common feature about this products is that they are all installable on your home screen, able to work offline from where you last left and offer a comparable experience and features to their native apps.</p>
<p>Just like when building a native mobile app there are some expectations that should be met to make a good product for consumer use, the same thing applies to PWAs. Let's discuss what makes a good PWA.</p>
<h2 id="heading-characteristics-of-pwas">Characteristics of PWAs</h2>
<p>Below is what should be considered when developing a PWA:</p>
<h3 id="heading-responsiveness">Responsiveness</h3>
<p>Different companies produce gadgets with different screen sizes, and as a developer it's your responsibility to ensure all the different users enjoy the product regardless the device they are using. So it's a good idea to make sure your app can be used on any screen size and it's content is available at any view-port size.</p>
<h3 id="heading-installable">Installable</h3>
<p>Research has shown that users tend to engage more with installed apps compared to visiting the official sites. Having a PWA as your product gives the users the look, feel and engagement of a normal app.</p>
<h3 id="heading-independent-connectivity">Independent Connectivity</h3>
<p>By keeping a user engaged to your app even while they are offline, provides a more consistent experience than dropping them back to a default offline page.</p>
<p>A good example to illustrate this will be that of a music app, your users should be able to access offline playback and listen to saved music even without internet connection. Another good example is twitter app, a user is able to go back a read through tweets which they might have missed.</p>
<h3 id="heading-discoverability">Discoverability</h3>
<p>Since most PWAs are converted websites, it is fair to make them discoverable on the search engines, this will help generate extra traffic to your app. This also acts as an advantage over native apps which can't be discovered over the search engines.</p>
<h3 id="heading-appearance">Appearance</h3>
<p>The appearance of the app should feel and look like that of a normal app, so be sure to include things like an app icon, this will help make it easily recognizable also things like splash screen will add the touch and feel of an app.</p>
<h3 id="heading-cross-platform">Cross Platform</h3>
<p>PWAs are developed as web app first, which means that they need to work on all browsers/systems and not just a selected few. Users should be able to use them in any browser before they decide to install them.</p>
<p>So folks! there you have it, the general info about PWAs. Along the way you might have noticed occasionally a comparison between PWAs and Native App and this might have confused you a bit, Well let's clear the airwaves by checking the comparison between the two to get a clear understanding.</p>
<h2 id="heading-differences-between-pwas-and-native-apps">Differences Between PWAs and Native Apps</h2>
<h3 id="heading-development-cost">Development Cost</h3>
<p>PWAs are cheaper to develop compared to Native AppsWhen you're developing a native app, you'll have to learn a certain programming language and then build a version of the app for each type of device, Android and iOS. On the other hand you can choose to hire a experienced professional to do the work for you which will even turn out to be more costly.</p>
<p>Down the road, you will also need resources to maintain and update the app, which means lots of money and time is required.</p>
<p>In the case of a PWA, you can have a single codebase for the different platforms. It's also time-saving since you will not need to develop it from scratch you can configure your current web site to fit.</p>
<p>And if you choose to hire developer it will only be one compared to native where you can hire up-to two depending on where you need your app.</p>
<h3 id="heading-discoverability-1">Discoverability</h3>
<p>Native apps cannot be indexed by the search engines, they can just be found through the App/Play store's website. You can make your app more discoverable on the App/Play store by using App Store Optimization(ASO), but that's another story.</p>
<p>Unlike native apps, PWAs work like websites so they can be indexed by search engines. This helps them rank better in search results.</p>
<h3 id="heading-safety">Safety</h3>
<p>Nowadays in order to run a website, it should be encrypted with a SSL certificate, this adds an extra layer of security. Now, as we already know PWAs are site converted into app which means they are more secure because they run on HTTPS. These are security protocols that allow safe exchange of data between client and server so that is doesn't get tampered with.</p>
<p>To secure your native apps, you need to implement various security measures, like multi-factor authentication and so on.</p>
<h3 id="heading-installation-and-download">Installation and Download</h3>
<p>Native apps need to be downloaded and installed from an app store. This requires some commitment from the user to do it from start to finish. Users have to pass and check multiple permissions before installing an app.</p>
<p>On the other hand, PWAs don't require any of those steps. From the browser you can bookmark it and add the app to your home screen with just a few taps.</p>
<h2 id="heading-benefits-of-pwas">Benefits of PWAs</h2>
<p>A lot of organizations both private and public are switching to PWAs not only because they are cheap to develop but also because they offer greater engagement.<br>Now let's look at a quick summary of the benefits of a PWA:</p>
<ul>
<li>They are responsive and work with many different screen sizes.</li>
<li>They can run on multiple platforms and any device with a modern web browser.</li>
<li>They function just like normal Native Apps.</li>
<li>The updates are independent, you don't need to visit the play store for an update.</li>
<li>They're built with common web technologies.</li>
<li>They're fast and lightweight.</li>
<li>They work offline unlike other sites.</li>
<li>They are discoverable via search engine.</li>
<li>They are easily installable.</li>
<li>Low maintenance cost.</li>
</ul>
<h2 id="heading-requirements-to-get-started-with-pwa-development">Requirements to Get Started with PWA Development</h2>
<p>It does not take much to get started building a PWA. You just need a few things and you are good to go.</p>
<p><strong>Tools</strong><br>The best known technology stack to develop PWAs is AngularJS. Speaking of Angular, <a target="_blank" href="https://allfront.io/blog/how-to-take-your-angular-apps-offline/">here</a> is a resourceful guide on how you can convert your already existing Angular app into PWA. Others stacks include ReactJS and Polymer.</p>
<p><strong>HTTPS</strong><br>You will need a server with a HTTPS connection. This makes sure your user's data is secure. It adds an extra layer of security to you site.</p>
<p><strong>Application Shell</strong><br>It provides a good first impression when your app loads. In simpler words this is what the user sees when they interact with your app for the first time.</p>
<p><strong>Service workers</strong><br>This is one of the key technologies behind PWAs. They help support your app work offline, and they perform advanced caching and run background tasks. Service workers can complete tasks even when your PWA is not running.Some other functions associated with Service Worker include:</p>
<ul>
<li>Sending push notification</li>
<li>Badging icons</li>
<li>Running background fetch tasks etc...</li>
</ul>
<p><strong>Manifest file</strong><br>This is a JSON file that is created with a <a target="_blank" href="https://app-manifest.firebaseapp.com/">Web App Manifest Generator</a>. This file contains the information that tells how your PWA should appear and function. It allows you to determine the name, description, icon, colors and other features of your PWA. Here's an example of a manifest file:</p>
<pre><code class="lang-json">{
<span class="hljs-attr">"short_name"</span>: <span class="hljs-string">"DevBlogger"</span>,  
<span class="hljs-attr">"name"</span>: <span class="hljs-string">"DevBlogger"</span>,  
<span class="hljs-attr">"description"</span>: <span class="hljs-string">"All dev stories under one roof"</span>,
<span class="hljs-attr">"theme_color"</span>: <span class="hljs-string">"#eb5252"</span>,  
<span class="hljs-attr">"background_color"</span>: <span class="hljs-string">"#000000"</span>,  
<span class="hljs-attr">"display"</span>: <span class="hljs-string">"fullscreen"</span>,  
<span class="hljs-attr">"Scope"</span>: <span class="hljs-string">"/"</span>,  <span class="hljs-attr">"orientation"</span>: <span class="hljs-string">"portrait"</span>,  
<span class="hljs-attr">"icons"</span>: [    
    {
        <span class="hljs-attr">"src"</span>: <span class="hljs-string">"images/android/android-launchericon-48-48.png"</span>,      
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"image/png"</span>,      
        <span class="hljs-attr">"sizes"</span>: <span class="hljs-string">"48x48"</span>
    },
    {      
        <span class="hljs-attr">"src"</span>: <span class="hljs-string">"images/android/android-launchericon-96-96.png"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"image/png"</span>,      
        <span class="hljs-attr">"sizes"</span>: <span class="hljs-string">"96x96"</span>    
    },    
    {      
        <span class="hljs-attr">"src"</span>: <span class="hljs-string">"images/android/android-launchericon-192-192.png"</span>,
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"image/png"</span>,      
        <span class="hljs-attr">"sizes"</span>: <span class="hljs-string">"192x192"</span>    
    }  
   ],  
       <span class="hljs-attr">"start_url"</span>: <span class="hljs-string">"index.html?utm_source=homescreen"</span>
  }
</code></pre>
<ul>
<li><strong>Audit your App</strong><br>This is possible using the Google Lighthouse tool. Google Lighthouse is a open-source software that anyone can use on any webpage. Google is a big champion of PWAs and pushes them as the future of the web. You can use Lighthouse to help you see how fast, accessible, and SEO readiness your PWA is.</li>
</ul>
<h2 id="heading-how-to-build-a-pwa">How to Build a PWA</h2>
<p>By following the steps below, you can easily create a fully functional PWA that offers an mazing user experience across all devices.</p>
<h3 id="heading-step-1-plan-your-app">Step 1 - Plan your app</h3>
<p>Before diving into development, you should consider the goals of your PWA, what features you want to include, priorities and user experience. You can create first design concepts and wireframes for the app to visualize the structure and layout.<br>In most scenarios, this is often referred to as a ‘<a target="_blank" href="https://allfront.io/blog/project-discovery-phase-guide/">discovery phase</a>’. You get the opportunity to ideate and gather user and stakeholder feedback as well as considering the functionalities of your to be product.</p>
<h3 id="heading-step-2-designing-the-user-interface">Step 2 - Designing the User Interface</h3>
<p>After getting everything right from planning, you can now proceed to designing the UI of your app. During this stage consider things like responsiveness, compatibility with different platforms etc.. Be sure to capture all details that are crucial to the user including their interaction and engagement during usage.</p>
<h3 id="heading-step-3-developing-the-front-end">Step 3 - Developing the Front-End</h3>
<p>Using the web technologies that is HTML, CSS, JavaScript and frameworks like Angular. React or Vue.js develop a visually appealing interface for the users. And always remember they key principle in development using this stack implement a mobile first approach while ensuring responsiveness for larger screens too.</p>
<h3 id="heading-step-4-implementing-service-workers">Step 4 - Implementing Service Workers</h3>
<p>As mentioned previously, service workers are a key component of PWAs. They are JavaScript files that run in the background, enabling offline functionality, push notifications, and caching. To make sure your PWA works to its fullest potential, you’ll need to register and implement a service worker. The way on how you can do this massively depends on which framework you are using.</p>
<h3 id="heading-step-5-adding-push-notifications">Step 5 - Adding Push Notifications</h3>
<p>Leverage the Push API and service workers to implement push notifications. Obtain the necessary user consent and use a push notification service to send notifications to users.</p>
<h3 id="heading-step-6-optimizing-performance">Step 6 - Optimizing Performance</h3>
<p>Optimization is a very important step in development in general. This is how you provide a seamless experience to your users. by ensuring you reduce loading times. by leveraging techniques such as code splitting and caching we should be able to achieve a fast and efficient operation for our PWA.</p>
<h3 id="heading-step-7-testing-and-debugging">Step 7 - Testing and Debugging</h3>
<p>Test your PWA on different devices, browsers and network condition to be sure that it meets the objective. Also be sure to gather user feedback and make necessary improvements when necessary.</p>
<h2 id="heading-resources-to-get-started-with-pwa-development">Resources to Get Started with PWA Development</h2>
<p>If you want to learn and move with the trend, finding resources to help you might be a bit tedious, to help you get started here are some of the best resources listed for you:<br><strong>Online Tutorials and Guides</strong></p>
<ul>
<li><a target="_blank" href="https://developers.google.com/web/progressive-web-apps">Google Developers - Progressive Web Apps</a></li>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps">MDN Web Docs - Progressive Web Apps</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/learn/front-end-development-libraries/">freeCodeCamp - Frontend Technologies</a></li>
<li><a target="_blank" href="https://web.dev/learn/pwa/">Learn PWA</a></li>
</ul>
<p><strong>Documentation and Reference Materials</strong></p>
<ul>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API">Service Workers API Documentation</a></li>
<li><a target="_blank" href="https://learn.microsoft.com/microsoft-edge/progressive-web-apps-chromium/?WT.mc_id=%3Fwt.mc_id%3Dstudentamb_223976">Progressive Web Apps (PWAs)</a></li>
</ul>
<p><strong>PWA Development Tools</strong></p>
<ul>
<li><a target="_blank" href="https://developers.google.com/web/tools/workbox">Workbox - Offline Caching and Service Worker Library</a></li>
<li><a target="_blank" href="https://www.pwabuilder.com/">PWA Builder - PWA Generation Platform</a></li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Keeping in mind that PWAs are new to the industry and haven't yet been fully utilized, they can be a great addition to add to your toolkit.</p>
<p>With the latest technologies and the right tools getting started with PWAs can ultimately increase sales and monetary gain for your product either as an individual or organization. With it's many features including they are fast, able to work offline, and also they perform like normal native apps. This offers your users a great experience and keeps them satisfied.</p>
<p>If you have read this far I really appreciate it.</p>
<p>Enjoy Coding ❤.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Ethical Hacking? A Cybersecurity Definition of Ethical Hackers ]]>
                </title>
                <description>
                    <![CDATA[ As technology continues to advance, cyber-threats are becoming the norm. Cyber-criminals are constantly trying to find ways to exploit systems and networks, all with the purpose of stealing sensitive information or causing damage.  These challenges i... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-ethical-hacking/</link>
                <guid isPermaLink="false">66b8dc1ab448790656a32e79</guid>
                
                    <category>
                        <![CDATA[ cybersecurity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Ethical Hacking ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Tue, 09 May 2023 00:06:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/05/Opensource--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>As technology continues to advance, cyber-threats are becoming the norm. Cyber-criminals are constantly trying to find ways to exploit systems and networks, all with the purpose of stealing sensitive information or causing damage. </p>
<p>These challenges in the tech space have led to the emergence of the term ethical hacking. The purpose of this field is to do what the cybercriminals are doing, but this time around with good intentions with the goal to stop the criminal acts. </p>
<p>Ethical hacking primarily involves identifying and fixing weaknesses to prevent cyber attacks and protect infrastructure.</p>
<h2 id="heading-a-little-background">A Little Background</h2>
<p>I don't know about you, but my journey into tech was inspired by the term "hacker". I know what you are thinking, but hear me out. </p>
<p>I grew up in an environment where the internet and access to technology were limited, and just like any other kid my career options were limited to the most glorified paths in a common African household, that is: Doctor, Engineer, Pilot, etc... ask any kid from an African household, and I bet these are the paths their parents wanted them to pursue.</p>
<p>But this ideology was changed by two things: my love for movies and my neighbor's computer. I would spend most of my time watching movies at my friend's place and I would take note of specific things, like how technology played a role in outsmarting the bad guys. This concept would later on push me to venture into the tech. </p>
<p>My interest in cybersecurity, on the other hand, was inspired by watching my friends play games. Remember the old-day fun games like GTA, Mortal Kombat, and Roadrash? Yep, those games. One thing that was common in these games was that they all had cheat codes that would help you cheat through a mission. </p>
<p>I wanted to learn more about how this was possible. But whenever I asked, the response I got was, "The game is hacked that's why we are able to cheat and finish quickly". </p>
<p>Now I hope you understand why I said the term hacker inspired me. Basically at first, I wanted to venture into the field to learn how to hack my way through games. But with more research and learning, my understanding of the term changed quite a bit.</p>
<p>And that's what we will be discussing in this article: A cybersecurity definition of what it means to be an Ethical Hacker and its importance. </p>
<p>We'll also take a look at the different types of ethical hacking, the roles of an ethical hacker, the skills they need, the challenges they face in the field, and what exactly you should learn to pursue a successful career in this cybersecurity. </p>
<p>By the end of this article, you should have a clear understanding of what exactly ethical hacking is all about and how you can use it to protect not only yourself but also your family, friends, and organization from cyber threats.</p>
<p>Let's get started!</p>
<h2 id="heading-what-is-hacking">What is Hacking?</h2>
<p>Before we define the term Ethical Hacking, we first need to understand what we mean by the term hacking. Hacking has been in existence since the early days of computer development. The only difference is that back in the day, hacking was done as a way to help people learn how computers functioned and what they machines could do.</p>
<p>Now, as technology continued to evolve, the experimentation that was meant for learning and understanding purposes evolved too. It gave rise to people exploiting the systems for their personal gain. This is where the common definition of the term Hacking comes from. </p>
<p>For simplicity, I would describe "hacking" as the illegal process of gaining access/breaking into a computer system or network without the owner's permission for personal gain. </p>
<h3 id="heading-different-types-of-hackers">Different Types of Hackers</h3>
<p>We have different types of hackers, and they include:</p>
<ul>
<li><p>Black Hat Hackers - They break into a system without the owner's permission for personal gain or malicious intent.</p>
</li>
<li><p>Gray Hat Hackers - They break into a computer system/network without the owner's permission but they don't mean any harm. They may choose to inform the owner of the vulnerabilities or even use the skills for personal gain.</p>
</li>
<li><p>Script Kiddie - Also known as Amateurs. They are attackers with little or no hacking skills They mostly rely on existing tools and available online instructions and scripts to launch an attack. It's worth noting as most of them are not aware of what they are doing, their acts may result in devastating results.</p>
</li>
<li><p>Organized Hackers - Also known as hacker groups or hacker collectives. These hackers are a group of individuals who work together to conduct an attack against a specific target to achieve a common goal. These groups can be categorized into a few categories:
  – Cybercriminals
  – Hacktivists
  – State-sponsored hackers</p>
</li>
</ul>
<p>The most commonly known of these groups include Anonymous, Lizard Squad, and APT groups. It's important to note that these groups are illegal and their acts may cause serious harm to individuals, organizations, and governments.</p>
<ul>
<li>White Hat Hackers - Also known as Ethical Hackers. They break into a system with the owner's permission. Their main task is to identify vulnerabilities and fix them to avoid exploitation from the outside. We'll learn more about them in the coming sections.</li>
</ul>
<h2 id="heading-what-is-ethical-hacking">What is Ethical Hacking?</h2>
<p>To counter these malicious practices, organizations and governments realized the need for security professionals whose sole purpose was to protect the systems from unauthorized access. Their roles also included testing the systems to ensure they were safe. </p>
<p>That's how the term ethical hacking came into existence. And from there people started pursuing it as a career.</p>
<p>With this brief explanation, we can define Ethical hacking as breaking into a computer system/network with the permission of the system/network owner with the sole purpose of identifying weaknesses that might be exploited or used for malicious intentions. </p>
<p>The main goal of ethical hacking is to identify potential security threats and fix them before they can be used for malicious acts. Ethical hacking also involves "penetration testing" or "pen testing". People who practice it are known as Ethical Hackers or White hat hackers. </p>
<h3 id="heading-different-types-of-ethical-hacking">Different Types of Ethical Hacking</h3>
<p>We do have different types of ethical hacking, and the most common ones include: </p>
<ul>
<li>Network hacking - This type of attack involves testing the security of an organization's infrastructure, firewalls, and other networking devices. </li>
<li>Web application hacking - Involves testing for vulnerabilities in an organization's web applications such as e-commerce sites, online banking platforms, and other web-based services.</li>
<li>Social engineering - Involves testing how likely it is that employees will fall for phishing attacks and other social engineering techniques.</li>
<li>Wireless hacking - Involves testing the wireless security of organizations and how likely it is to be the point of attack.</li>
<li>Physical penetration testing - Involves testing the organization's physical premises security including data centers and other facilities.</li>
</ul>
<h2 id="heading-role-of-an-ethical-hacker">Role of an Ethical Hacker</h2>
<p>Being an ehthical hacker involves many tasks. But their primary role is to help identify vulnerabilities in the system before they are exploited by malicious hackers. By doing this, the affected parties are able to improve security and prevent any form of cyber attack. </p>
<p>In addition to this, other tasks include: </p>
<ul>
<li>Vulnerability assessment</li>
<li>Enhance security awareness in their respective organization</li>
<li>Ensure compliance with the industry regulation and standards</li>
<li>Security research and development</li>
<li>Ensure there is minimal risk of data breaches and other security incidents.</li>
<li>Training and education - ethical hackers spend better part of their time creating awareness about cybersecurity and how to prevent the attacks.</li>
</ul>
<h2 id="heading-benefits-of-ethical-hacking">Benefits of Ethical Hacking</h2>
<p>Ethical Hacking plays a crucial role in preventing cyber attacks. The main idea behind this is to use the same tools and techniques used by attackers to identify vulnerabilities. The good thing is that it has proven to play a major role in many organizations in a positive way. </p>
<p>In addition to helping identify vulnerabilities and helping organizations improve their security, ethical hacking can provide a wide range of benefits including:</p>
<ul>
<li>Mitigating risks - this can help prevent data breaches, cyber attacks and other security incidents.</li>
<li>Cost effective - ethical hacking is a cost effective way for an organization to test their security systems.</li>
<li>Compliance - ethical hacking can help an organization ensure that they meet the required compliance requirements and avoid costly penalties. </li>
<li>Continuous Improvement - ethical hacking is not a one time process. It's an evolving field, meaning there will be new risks each day. Having an ethical hacker in place can help ensure security is up to date with the latest technologies. </li>
</ul>
<h2 id="heading-challenges-of-ethical-hacking">Challenges of Ethical Hacking</h2>
<p>Just like any other career, the ethical hacking field has some challenges too. These challenges can range from legal and ethical to technical issues, which from time to time need to be addressed to ensure success in the testing and the work itself. </p>
<p>The most common problem that faces many people is how to correctly navigate the legal and ethical considerations around the field. As much as ethical hacking is legal in many countries, it is still important to ensure that everything is done within the bounds of the law. You have to be extra careful not to fall on the wrong side of the law. </p>
<p>In addition to adhering to specific countries' laws, ethical hackers should also adhere to strict ethical standards, which regulate and ensure their activities do not cause any harm. </p>
<p>Another common challenge is obtaining the proper authorizations and credentials to conduct the testing. As much as we live in a free world, you just can't decide to perform an ethical test because you have the skills. You need to have written consent showing that you have permission to conduct the test. </p>
<p>Having credentials like certificates can also help during job hunting. But this comes as a challenge to those who can't afford to pay for such certifications.</p>
<p>Speaking of technical challenges, the primary technical challenge that most ethical hackers face is identifying vulnerabilities in complex systems. If you want to be an efficient ethical hacker, you must be proficient in various technologies including programming languages, security tools, and so on. This enables you to have a strong understanding of the network architecture and protocols making it easy to find vulnerabilities.</p>
<p>Prioritizing can also be a big challenge at some point. In a scenario where there are many vulnerabilities within a system, since all may pose a serious threat, it may be a challenge for the ethical hacker to prioritize which needs to be tended to first.</p>
<h2 id="heading-ethical-hacking-certifications-and-training">Ethical Hacking Certifications and Training</h2>
<p>In order for one to become an ethical hacker, having a solid understanding of computer systems, networks, and programming languages is essential. The good thing is that you can gain these skills through formal education, practical experience, online certifications, training, and so on.</p>
<p>The most preferred method by many employers is going through certifications from recognized bodies. In this industry, there are multiple certificates and learning resources, so if you are looking at where to get started you might want to try out these platforms for both certificates and knowledge.  </p>
<p><strong>Learning platforms</strong> </p>
<ul>
<li><a target="_blank" href="https://www.cybrary.it/">Cybrary</a></li>
<li><a target="_blank" href="https://www.hackthebox.com/">HackTheBox</a></li>
<li><a target="_blank" href="https://www.offensive-security.com/metasploit-unleashed/">Metasploit Unleashed</a></li>
<li><a target="_blank" href="https://www.sans.org/emea/">SANS Institute</a></li>
<li><a target="_blank" href="https://www.offsec.com/">Offensive Security</a></li>
<li><a target="_blank" href="https://www.hackthissite.org/">HackThisSite</a></li>
<li><a target="_blank" href="https://tryhackme.com/">TryHackMe</a></li>
<li><a target="_blank" href="https://www.eccouncil.org/">EC-Council</a></li>
</ul>
<p><strong>YouTube Channels</strong></p>
<ul>
<li><a target="_blank" href="https://www.youtube.com/@HackerSploit/videos">HackerSploit</a></li>
<li><a target="_blank" href="https://www.youtube.com/@TCMSecurityAcademy/videos">The Cyber Mentor</a></li>
<li><a target="_blank" href="https://www.youtube.com/@_JohnHammond/videos">John Hammond</a></li>
<li><a target="_blank" href="https://www.youtube.com/@LiveOverflow/videos">LiveOverflow</a></li>
<li><a target="_blank" href="https://www.youtube.com/@NullByteWHT/featured">Null Byte</a></li>
</ul>
<p><strong>Practice platforms</strong></p>
<ul>
<li><a target="_blank" href="https://www.uscyberpatriot.org/">CyberPatriot</a></li>
<li><a target="_blank" href="https://nationalcyberleague.org/">National Cyber League</a></li>
<li><a target="_blank" href="https://ctftime.org/">Capture the Flag (CTF)</a></li>
<li><a target="_blank" href="https://www.hackthebox.com/">HackTheBox</a></li>
<li><a target="_blank" href="https://defcon.org/html/links/dc-ctf.html">DEF CON CTF</a></li>
<li><a target="_blank" href="https://www.cyber-fasttrack.org/">Cyber FastTrack</a></li>
<li><a target="_blank" href="https://bsidescyber.com/ctf/">BSides CTF</a></li>
</ul>
<p><strong>Certifications</strong> </p>
<ul>
<li><a target="_blank" href="https://www.eccouncil.org/">International Council of Electronic Commerce Consultants (EC-Council)</a> - offers certifications such as Certified Ethical Hacker (CEH), Certified Network Defender (CND), and Certified Chief Information Security Officer (CCISO). </li>
<li><a target="_blank" href="https://www.offsec.com/">Offensive Security</a> - offers certifications such as Offensive Security Certified Professional (OSCP) and Offensive Security Wireless Professional (OSWP). </li>
<li><a target="_blank" href="https://www.isc2.org/">International Information System Security Certification Consortium (ISC)²</a> - offers certifications such as Certified Information Systems Security Professional (CISSP), Certified Cloud Security Professional (CCSP), and Systems Security Certified Practitioner (SSCP). </li>
<li><a target="_blank" href="https://www.giac.org/">Global Information Assurance Certification (GIAC)</a> - offers certifications such as GIAC Penetration Tester (GPEN), GIAC Certified Incident Handler (GCIH), and GIAC Certified Forensic Analyst (GCFA). </li>
<li><a target="_blank" href="https://www.comptia.org/">CompTIA</a> - offers certifications such as CompTIA Security+, CompTIA Cybersecurity Analyst (CySA+), and CompTIA Advanced Security Practitioner (CASP+). </li>
<li><a target="_blank" href="https://www.cisco.com/">Cisco</a> - offers certifications such as Cisco Certified Network Associate Security (CCNA Security), Cisco Certified Network Professional Security (CCNP Security), and Cisco Certified CyberOps Associate.</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>As tech continues to evolve so do the cyber threats. This means that organizations must invest in cybersecurity strategies to help prevent any form of exploitation. After all, prevention is better than cure. Taking early measures might come in handy along the way, saving you more than you can imagine. </p>
<p>Given the importance of ethical hacking in ensuring security, we should all take it very seriously. This involves using secure networks and encrypted networks, enabling advanced layers of protection like 2FA and MFA, investing in qualified security personnel, and constantly creating awareness amongst employees and communities at large. </p>
<p>By following these steps we will be able to improve on our security and protect our sensitive data, minimizing the risk of being victims of cyber attacks.</p>
<p>Keep Safe 🛡️.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Open Source Projects Every Developer Should Know About ]]>
                </title>
                <description>
                    <![CDATA[ Many companies use code from open source projects in the modern world of software development.  This approach not only benefits those organizations but also different developers working on different projects. And it has created an environment where d... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/open-source-projects-every-dev-should-know/</link>
                <guid isPermaLink="false">66b8dbf447c23b7ae1ad0bb2</guid>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Fri, 05 May 2023 21:31:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/05/Opensource.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Many companies use code from open source projects in the modern world of software development. </p>
<p>This approach not only benefits those organizations but also different developers working on different projects. And it has created an environment where developers are able to work in a collaborative manner while also learning from each other.</p>
<p>Just like any other field of development, open source isn't easy if you don't know what you are looking for and where to look. </p>
<p>For the past few years since my first publication about <a target="_blank" href="https://www.freecodecamp.org/news/how-to-contribute-to-open-source-projects-beginners-guide/">How to Contribute to Open Source Projects – A Beginner's Guide</a>, I have had people reach out, appreciating the article and how it helped them. There have been others who wanted more guidance on how to navigate the open source field.</p>
<p>Most questions that I get range from "How can I find the correct projects and programs to work on", to "Can I really make a living through open-source", or "Most programs I find aren't beginner friendly, how should I proceed?", just to mention a few. </p>
<p>Well, I can relate to these questions, because at some point I was in the same situation but never got the answers I wanted until later on. </p>
<p>If you're in the same situation and you have questions about open source, relax – I gotcha.</p>
<p>One thing that I can assure you is that participating in open-source can be beneficial if you find the correct path. That correct path can be either through joining a project or just contributing to a codebase. There are many ways to help. And then you'll have numerous opportunities to develop your skills and grow as a developer. </p>
<p>The good thing about open source is it accommodates everyone, whether you are a student, professional, or an open-source enthusiast. Open source projects can provide you with a unique platform for learning, collaborating, and showcasing your skills. After all, <strong>there is something for everyone</strong>.</p>
<p>With that said, let's get started!</p>
<h2 id="heading-what-is-open-source">What is Open Source?</h2>
<p>Before we get started reviewing different open-source projects, let's first have a recap of what open source is and why you should consider joining in. </p>
<p>Open source code is code that is made available to the public to not only view and use but also modify and distribute under a permissive license. </p>
<p>As a developer, contributing to open-source can be rewarding and can help you learn, teach others, and grow your skills. </p>
<p>Apart from this, there are plenty other reasons why you should consider contributing to open source, including:</p>
<ul>
<li>You get an opportunity to improve the software you rely on daily.</li>
<li>Through the process you can find a mentor if you need one.</li>
<li>You will be able to learn new skills or improve on existing ones.</li>
<li>You get to share and showcase your skills to others.</li>
<li>In the process you can gain a deeper understanding of a given technology.</li>
<li>It's a good way to build your reputation and grow your career.</li>
</ul>
<h2 id="heading-types-of-open-source-projects">Types of Open Source Projects</h2>
<p>Now that you have an understanding of what open-source is and some of its benefits, let's learn about the different types of open-source projects that are available for aspiring contributors. </p>
<p>From education to internships to hackathons, there are numerous opportunities for you to improve your skills, gain practical experience, earn a living, and make valuable contributions to the open-source community.</p>
<p>These projects offer a unique opportunity for developers of all levels to learn and gain experience while working on real-world projects. The open source community is also a place where like-minded individuals from around the world get to connect and share. </p>
<p>Now, with so many projects available, it can be challenging for beginners in the field to know where exactly to begin. To make it easier, after a little research, I was able to classify the projects into six main categories, that is: </p>
<ul>
<li>Education and Training </li>
<li>Internships and Mentorships </li>
<li>Grants and Funding</li>
<li>Community Building &amp; Advocacy</li>
<li>Research and Development</li>
</ul>
<p>These categories house different projects, making it easier for you to know exactly what you are looking for. </p>
<p>If after reading this article you feel like I'm missing a certain type of project that might be helpful, you can head over to GitHub and add it to this repo dedicated to listing all open-source projects for easy access: <a target="_blank" href="https://github.com/larymak/Awesome-Open-Source-Programs">Awesome-Open-Source-Programs</a>.</p>
<h3 id="heading-education-and-training-projects">Education and Training Projects</h3>
<p>These projects present an excellent opportunity for individuals who want to learn and gain new skills, knowledge, and experience while contributing to open source and the community. </p>
<p>Some projects that fall under this category include: </p>
<h4 id="heading-freecodecamphttpswwwfreecodecamporg"><a target="_blank" href="https://www.freecodecamp.org/"><strong>freeCodeCamp</strong></a></h4>
<p>freeCodeCamp's curriculum is designed in a manner that provides learners with practical experience building real-world projects while at the same time allowing them to contribute to open-source. </p>
<p>In return, learners get the skills and also get to earn a certificate which they can add to their résumés.</p>
<h4 id="heading-the-linux-foundation-traininghttpstraininglinuxfoundationorg"><a target="_blank" href="https://training.linuxfoundation.org/"><strong>The Linux Foundation Training</strong></a></h4>
<p>This particular project offers a wide range of resources including courses and certifications on various technologies. Some of the technologies that are given priority include Kubernetes, Linux, and Hyperledger. </p>
<p>The project's structure is designed to provide learners with hands-on experience and practical guidance, enabling them to build their careers on open-source technologies.</p>
<h4 id="heading-cncf-initiativeshttpsgithubcomcncfmentoring"><a target="_blank" href="https://github.com/cncf/mentoring"><strong>CNCF Initiatives</strong></a></h4>
<p>This project mainly focuses on teaching its mentees more about cloud-native technologies and how to contribute to open-source projects based on this ecosystem. </p>
<p>In addition to this, learners are also able to learn more about coding and documentation.</p>
<h4 id="heading-mozilla-developer-network-mdnhttpsdevelopermozillaorgen-us"><a target="_blank" href="https://developer.mozilla.org/en-US/"><strong>Mozilla Developer Network (MDN)</strong></a></h4>
<p>MDN is a web platform that provides developers with extensive documentation, tutorials, and other resources on web development technologies like HTML, CSS, JavaScript, and Web APIs. They also offer a range of online courses and learning paths that allow learners to develop their skills and knowledge in specific areas of web development. </p>
<p>Its content is created and maintained by a large community of developers meaning it's open-source and anyone can contribute to it.</p>
<h4 id="heading-recurse-centerhttpswwwrecursecom"><a target="_blank" href="https://www.recurse.com/"><strong>Recurse Center</strong></a></h4>
<p>This is a 12-week project designed to run as a retreat. The program is open for anyone who wants to get better at programming. Whether you are a self-taught or a professional you will get an opportunity to work with people who share similar skills as you. The retreats are free, self-directed, and project-based.</p>
<h4 id="heading-open-source-guideshttpsopensourceguide"><a target="_blank" href="https://opensource.guide/">Open Source Guides</a></h4>
<p>This platform acts as the go-to place for beginners looking for guides on how to get started with open-source and contribution. </p>
<p>The site is easy to navigate with quick links to articles ranging from how to contribute to open-source and how to start an open-source project to building and maintaining open-source communities. </p>
<h3 id="heading-internship-and-mentorship-projects">Internship and Mentorship Projects</h3>
<p>These open source projects give aspiring contributors the opportunity to gain valuable experience while receive mentorship from people with experience in different fields. </p>
<p>In return, contributors who get accepted through applications get an opportunity to contribute to real-world projects, create connections within the open-source community, and sometimes get stipends for the work done. These projects will usually range from 10 weeks to 6 months. </p>
<h4 id="heading-google-summer-of-code-gsoc"><strong>Google Summer of Code (GSoC)</strong></h4>
<p>This program pairs students with mentors to work on open-source projects during the summer. The program has helped thousands of students gain skills and experience by contributing to a variety of open-source projects. In return, the participants receive a stipend for the work done and experience that can help in their careers. </p>
<p>Read out more about GSoC <a target="_blank" href="https://summerofcode.withgoogle.com/">here</a>.</p>
<p>Other programs that promote GSoC include: </p>
<ul>
<li><a target="_blank" href="https://winterofcode.com/">Winter of Code</a></li>
<li><a target="_blank" href="https://jwoc.tech/">JWOC</a></li>
</ul>
<h4 id="heading-outreachy"><strong>Outreachy</strong></h4>
<p>This is an internship program that provides underrepresented communities with an opportunity to contribute to open-source projects. The program runs twice a year offering a three-month remote internship with a stipend at the end of the period. </p>
<p>Participants who get through the application phase get paired with mentors who help them along the way as they work on real-world projects, gaining experience in diverse fields including, software development, documentaion, UI/UX and more. You can read more on their website: https://www.outreachy.org/</p>
<h4 id="heading-google-season-of-docs-gsod"><strong>Google Season of Docs (GSoD)</strong></h4>
<p>This particular program focuses on providing opportunities to technical writers who want to contribute to open-source projects. </p>
<p>The participants are paired with mentors from different open-source projects to improve on their documentation. The program runs for three months and provides stipends at the end of the period. You can read more on their website: https://developers.google.com/season-of-docs</p>
<h4 id="heading-rails-girls-summer-of-code"><strong>Rails Girls Summer of Code</strong></h4>
<p>This program mainly focuses on encouraging women and non-binary people to contribute to open-source projects. </p>
<p>The program takes three months and the participants receive stipends afterward. Through out the period, participants are paired with mentors who provide guidance and help where necessary. Here's their website: https://railsgirlssummerofcode.org/</p>
<h4 id="heading-linux-foundation-mentorship-program-lfx"><strong>Linux Foundation Mentorship Program (LFX)</strong></h4>
<p>This is a 12 week program that offers mentorship opportunites to developers who are interested in contributing to open-source projects. Upon completion of the program participants receive a stipend. Here's their <a target="_blank" href="https://lfx.linuxfoundation.org/tools/mentorship/">Website</a>.   </p>
<p>Other mentorship programs that run under the Linux foundation include:  </p>
<ul>
<li><a target="_blank" href="https://wiki.linuxfoundation.org/lkmp">Linux Kernel Mentorship Program</a></li>
<li><a target="_blank" href="https://wiki.lfnetworking.org/display/LN/LFN+Mentorship+Program">Linux Foundation Networking (LFN) Mentorship Program</a></li>
<li><a target="_blank" href="https://www.openmainframeproject.org/all-projects/mentorship-program">Open Mainframe Project Mentorship Program</a></li>
<li><a target="_blank" href="https://wiki.hyperledger.org/display/INTERN">Hyperledger Mentorship Program</a></li>
<li><a target="_blank" href="https://chaoss.community/">CHAOSS</a></li>
</ul>
<h4 id="heading-season-of-kde"><strong>Season of KDE</strong></h4>
<p>This program offers opportunities to everyone who wants to participate in both coding and non-coding projects that benefits the KDE ecosystem. </p>
<p>The program usually runs for approximately six months and offers a stipend to participants who successfully complete the program. Here's their website: https://season.kde.org/</p>
<h4 id="heading-girlscript-summer-of-code"><strong>Girlscript Summer of Code</strong></h4>
<p>This is a 3-month program conducted by the GirlScript Foundation. Its main aim is to change lives by imparting tech education and relevant skills while fostering diversity. </p>
<p>During this period participants contribute to numerous projects under the careful guidance of skilled mentors. Visit their website for more info: https://gssoc.girlscript.tech/</p>
<h4 id="heading-free-software-foundation-fsf-internship"><strong>Free Software Foundation (FSF) Internship</strong></h4>
<p>This program presents participants with an opportunity to work closely with the organization staff on their interests. </p>
<p>According to the platform's site, its major focus is on campaign and community organizing, free software licensing, systems, and network administration, GNU Project support, and Web development. Read more <a target="_blank" href="https://www.fsf.org/volunteer/internships">here</a></p>
<h4 id="heading-xorg-endless-vacation-of-code-evoc"><strong>X.Org Endless Vacation of Code (EVoC)</strong></h4>
<p>This program is similar to GSoc but with a few differences. EVoC mentorship can be initiated at any time during the calendar year and the EVoC board can fund as many of these mentorships as it sees fit. </p>
<p>Although they accept a wide range of projects, their major focus is on technical documentation. The program lasts for three to four months of contiguous nearly-full-time work. Read more about EVoC <a target="_blank" href="https://www.x.org/wiki/XorgEVoC/">here</a>.</p>
<h4 id="heading-julia-seasons-of-contributions-jsoc"><strong>Julia Seasons of Contributions (JSoC)</strong></h4>
<p>The Julia Seasons of Contributions (JSoC) is a seasonal program for mentoring students and other developers to contribute to the open-source ecosystem. Read more about JSoC <a target="_blank" href="https://julialangblogmirror.netlify.app/jsoc/">here</a>.</p>
<h4 id="heading-summer-of-haskell"><strong>Summer of Haskell</strong></h4>
<p>The Summer of Haskell is a program initiated by Haskell.Org with the aim to reach out to students and encourage them to contribute to the Haskell community with the aid of experienced mentors. </p>
<p>The program has the same features as GSoC including mentorship and stipends to Haskell contributors. Read more on how to get involved <a target="_blank" href="https://summer.haskell.org/">here</a>.</p>
<h4 id="heading-summer-of-bitcoin"><strong>Summer of Bitcoin</strong></h4>
<p>This is a global program that offers online summer internships that focus on introducing university students to Bitcoin open-source development and design. </p>
<p>Over the internship period, participants get to learn how Bitcoin works, and how to contribute to Bitcoin projects. In return, they earn Bitcoin as a stipend and build a career in Bitcoin. Read more <a target="_blank" href="https://www.summerofbitcoin.org/">here</a>.</p>
<h3 id="heading-grants-and-funding">Grants and Funding</h3>
<p>One of the major challenges facing most open-source projects is finding sustainable funding. </p>
<p>Thankfully there are many grants programs that are available and ready to provide financial support to open-source communities and projects. Some of these programs include:</p>
<h4 id="heading-github-sponsors"><strong>GitHub Sponsors</strong></h4>
<p>GitHub Sponsors is a funding platform that allows the developer community to financially support other developers and organizations who design, build, and maintain open-source projects. Read more <a target="_blank" href="https://github.com/sponsors">here</a>.</p>
<h4 id="heading-mozilla-open-source-support-moss"><strong>Mozilla Open Source Support (MOSS)</strong></h4>
<p>MOSS is a program that offers funding to open-source projects that align with Mozilla's mission. MOSS offers several types of awards including:</p>
<ul>
<li>Foundational Technology, which supports open-source projects that Mozilla relies on.</li>
<li>Mission Partners, which support open source projects that contribute to Mozilla's mission.</li>
<li>Secure Open Source, which supports open source projects that improve the security of the internet.</li>
</ul>
<p>Read more <a target="_blank" href="https://www.mozilla.org/en-US/moss/">here</a>.</p>
<h4 id="heading-igalia-coding-experience-program"><strong>Igalia Coding Experience Program</strong></h4>
<p>This is a grant program specifically meant for people studying Computer Science, Information Technology, or Free Software, whether in a formal setting or an informal one. </p>
<p>Its main purpose is to give participants their first exposure to the professional world, working hand in hand with Igalia programmers and learning with them. Read out more <a target="_blank" href="https://www.igalia.com/coding-experience/">here</a>.</p>
<h3 id="heading-community-building-amp-advocacy-programs">Community Building &amp; Advocacy programs</h3>
<p>Most open-source communities thrive on collaboration, inclusivity, and diversity. </p>
<p>To help achieve these goals, in recent years there has been a rise of community-building programs aiming to provide a welcoming and supportive environment for different people in tech while at the same time promoting a culture of inclusivity and diversity. </p>
<p>Some of these programs include: </p>
<ul>
<li><a target="_blank" href="https://opensourcediversity.org/">Open Source Diversity</a></li>
<li><a target="_blank" href="https://opensource.org/">OpenSource Initiative</a></li>
<li><a target="_blank" href="https://oscafrica.org/">Open Source Community Africa (OSCA)</a></li>
<li><a target="_blank" href="http://www.opensourceforamerica.org/">Open Source for America</a></li>
<li><a target="_blank" href="https://hacktoberfest.digitalocean.com/">Hacktoberfest</a></li>
<li><a target="_blank" href="https://www.writespeakcode.com/">WriteSpeakCode</a></li>
<li><a target="_blank" href="https://processingfoundation.org/fellowships/">Processing Foundation Fellowships</a></li>
<li><a target="_blank" href="https://www.openeducationweek.org/">Open Education Week</a></li>
</ul>
<h3 id="heading-research-and-development">Research and Development</h3>
<p>If you are interested in research and development, these projects will help you get into that field. Most of these programs focus on advancing open-source technologies and innovation in various fields into solving real-world problems. </p>
<p>Some of them include:</p>
<h4 id="heading-google-summer-of-earth-engine"><strong>Google Summer of Earth Engine</strong></h4>
<p>This is a research program targeting mainly university students and researchers from India. The participants of the program are offered an opportunity to work with leading research organizations that work to find solutions around issues affecting environment, water and agriculture. </p>
<p>The program lasts for a period of three months. After completion, the participants are awarded with a certificate of recognition, Earth Engine Swag, and stipend. Read more about the program <a target="_blank" href="https://sites.google.com/view/summerofearthengine/home?authuser=0">here</a>.</p>
<h4 id="heading-free-and-open-source-silicon-foundation-fossi"><strong>Free and Open Source Silicon Foundation (FOSSi)</strong></h4>
<p>The program's mission is to promote and assist free and open digital hardware designs and their related ecosystems. It operates as an open, inclusive, vendor-independent group. </p>
<p>Some of the projects under this particular organization include the ORCONF conference, the LibreCores portal for open-source hardware, and the PULP Platform for energy-efficient computing. Read more <a target="_blank" href="https://www.fossi-foundation.org/">here</a>.</p>
<h4 id="heading-open-robotics-foundation-osrf"><strong>Open Robotics Foundation (OSRF)</strong></h4>
<p>OSRF is an independent non-profit organization founded by members of the global robotics community. It's mission is to support the development, distribution, and adoption of open source software for use in robotics research, education, and product development. </p>
<p>Some of it's projects include Gazebo, Ignition, ROS, and ROS-Industrial. Read more <a target="_blank" href="https://www.openrobotics.org/">here</a></p>
<h4 id="heading-reinforcement-learning-open-source-festhttpswwwmicrosoftcomen-usresearchacademic-programrl-open-source-fest"><a target="_blank" href="https://www.microsoft.com/en-us/research/academic-program/rl-open-source-fest/"><strong>Reinforcement Learning Open-Source Fest</strong></a></h4>
<p>The major focus of this program is to introduce students to open-source reinforcement learning programs and software development while working alongside researchers, data scientists, and engineers on the Real World Reinforcement Learning team at Microsoft Research. </p>
<h3 id="heading-other-rampd-projects">Other R&amp;D projects</h3>
<ul>
<li><a target="_blank" href="https://www.eclipse.org/"><strong>The Eclipse Foundation</strong></a></li>
<li><a target="_blank" href="https://osoc.be/">Open Summer of Code</a></li>
<li><a target="_blank" href="https://codeheat.org/">Codeheat</a></li>
<li><a target="_blank" href="https://fossasiataipei.github.io/fossasia-cht/apply/">FOSSASIA Program</a></li>
<li><a target="_blank" href="https://segment.com/opensource/">Segment Open Fellowship</a></li>
<li><a target="_blank" href="https://www.openoffice.org/">Apache OpenOffice</a></li>
<li><a target="_blank" href="https://www.outreachy.org/opportunities/">Career Opporunites in Open-Source</a></li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>With all of these projects and programs, you can see how many opportunities the open-source community can present. All of these programs can help you develop your skills, collaborate with others, and most importantly create a positive impact on society by solving real-world problems. </p>
<p>If you are interested in exploring the projects listed above, make sure to read more about ones that interest you so you can find a suitable program that fits your expertise. </p>
<p>You can also join different <a target="_blank" href="https://www.freecodecamp.org/news/developer-communities-to-join-to-grow-your-career/">online communities available and forums</a> to connect with other contributors, learn from their experiences, and get support.</p>
<p>I hope this article points you on the right path, and inspires you to venture into the world of open-source. Remember, every contribution counts, no matter how small. So don't hesitate to get involved and start making a difference today!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Communicate with ChatGPT – A Guide to Prompt Engineering ]]>
                </title>
                <description>
                    <![CDATA[ AI has become an integral part of our lives and businesses. Over the past few years, we’ve seen the rapid rise of AI tools, and their impact on our day-to-day activities can't be ignored.  From virtual assistants to chatbots, AI just keeps getting sm... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-communicate-with-ai-tools-prompt-engineering/</link>
                <guid isPermaLink="false">66b8dbd1b16665d8febd7f4f</guid>
                
                    <category>
                        <![CDATA[ Artificial Intelligence ]]>
                    </category>
                
                    <category>
                        <![CDATA[ chatgpt ]]>
                    </category>
                
                    <category>
                        <![CDATA[ communication ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Machine Learning ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Thu, 20 Apr 2023 20:54:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/04/ChatGPT--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>AI has become an integral part of our lives and businesses. Over the past few years, we’ve seen the rapid rise of AI tools, and their impact on our day-to-day activities can't be ignored. </p>
<p>From virtual assistants to chatbots, AI just keeps getting smarter with more functionalities than before. This technology has changed the way we interact with both humans and machines.</p>
<p>As this evolution continues, there's a constant need to improve the communication between humans and machines. By fully understanding how to effectively communicate with AI, it can take us a step closer to unlocking its full potential. </p>
<p>This will not only enable us to extract relevant information but also allow us to gain new insights, making us more informed on different fields of interest. To get these advantages, understanding prompt engineering is essential.</p>
<p>As a growing developer, I spend the better part of my time on learning and implementation. In the process, I may need to do research, and it might take forever to find what I need browsing the net. But with new technologies like ChatGPT, I am able to easily get what I need as long as I ask the right questions. </p>
<p>Just like many others, figuring out the platform wasn't easy. It took me a while before I could understand how to communicate with the model. A key aspect is knowing how to structure and phrase the prompts. With this, you will be able to improve the quality and accuracy of the responses you get.</p>
<p>In this guide, you’ll learn what prompt engineering is and how you can use it to improve your communication with AI tools. In addition to this, we’ll also explore different categories of prompts and the design principles used to craft effective prompts. </p>
<p>By the end of this guide, you should be able to write good prompts and tailor them to your needs, facilitating a better interaction between you and the language models. </p>
<p>Let's get started!</p>
<h2 id="heading-what-is-prompt-engineering">What is Prompt Engineering?</h2>
<p>Communication with AI is crucial and understanding how to communicate with it effectively is helpful. The entire communication process revolves around writing commands which are referred to as prompts. </p>
<p>With that said, we can easily define prompt engineering as the step-by-step process of creating inputs that determine the output to be generated by an AI language model.</p>
<p>High quality inputs will result in better output. Similarly, poorly defined prompts will lead to inaccurate responses or responses that might negatively impact the user. After all, "With great power comes great responsibility".</p>
<p>Prompt engineering cuts across different applications, including chatbots, content generation tools, language translation tools, and virtual assistants. But you might be wondering how AI technology generates its responses. Let’s find out in the next section.</p>
<h2 id="heading-how-do-language-models-work">How do Language Models Work?</h2>
<p>AI language models such as GPT-4 rely on deep learning algorithms and natural language processing (NLP) to fully understand human language. </p>
<p>All this is made possible through training that consists of large datasets. These datasets include articles, books, journals, reports, and so on. This helps the language models develop their language understanding capabilities. With the data, the model is fine-tuned in a way that enables it to respond to particular tasks assigned to it.</p>
<p>Depending on the language model, there are two main learning methods – supervised or unsupervised learning. </p>
<p>Supervised learning is where the model uses a labeled dataset where the data is already tagged with the right answers. In unsupervised learning, the model uses unlabeled datasets, meaning the model has to analyze the data for possible and accurate responses. Models like GPT-4 use the unsupervised learning technique to give responses.</p>
<p>The model has the ability to generate text based on the prompt given. This process is referred to as language modeling, and it's the foundation of many AI language applications. Learn more about <a target="_blank" href="https://www.ibm.com/cloud/blog/supervised-vs-unsupervised-learning">Supervised vs Unsupervised Learning from IBM</a>.</p>
<p>At this point, you should understand that the performance of an AI language model mainly depends on the quality and quantity of the training data. Training the model with tons of data from different sources will help the model understand human language including grammar, syntax, and semantics.</p>
<p>Note that, irrespective of the quantity of data used to train these models, there will always be challenges when it comes to understanding natural language. After all, this is an artificial being and understanding things like sarcasm, irony, or human feelings can be difficult for an AI model to interpret.</p>
<p>Now that we have an understanding of how the AI language model works, let's look at different prompt categories that are available to help us communicate with the models.  </p>
<h2 id="heading-what-are-prompt-categories">What are Prompt Categories?</h2>
<p>You can use prompts to ensure smooth communication with AI language models. The first step to writing quality prompts is understanding their different classifications so you can easily structure the prompts with a given target response in mind. </p>
<p>Some of the major prompt categories include:</p>
<ol>
<li><strong>Information-seeking prompts</strong> - These prompts are specifically designed to gather information. The prompts mostly answer the question <strong>What</strong> and <strong>How</strong>. Examples of such prompts: "What are the most popular tourist attractions in Kenya?", "How do I prepare for a job interview?"</li>
<li><strong>Instruction-based prompts</strong> - These are used to give instructions to the model to perform a specific task. A good example of such prompts is the use of Siri, Alexa, or Google Assistant. For example, an instruction prompt might be "Call mom”, or “Play the latest episode from my favorite TV show." </li>
<li><strong>Context-providing prompts</strong> - Just as the name suggests, these prompts provide information to the AI to help it better understand what the user needs as a response. For example, if you’re planning a party and need some decoration ideas and activities for attendees, you can structure your prompt like so: "I am planning a party for my child, what are some decoration ideas and activities that the attendees might do to make it enjoyable and memorable?"</li>
<li><strong>Comparative prompts</strong> - These are used to compare or evaluate different options given to the model to help the user make an appropriate decision. For example: "What are the strengths and weaknesses of Option A compared to Option B?"</li>
<li><strong>Opinion-seeking prompts</strong> - These are designed to get the AI's opinion on a given topic. For example: "What would happen if we could travel back in time?"</li>
<li><strong>Reflective prompts</strong> - These prompts are designed to help individuals gain a deeper understanding of themselves, their beliefs, and their actions. They are more like encouragement/self-growth prompts based on a topic or personal experience. You might be required to give the model a bit of info before getting a desirable response.</li>
<li><p><strong>Role-based prompts</strong> - These prompts provide responses by framing the user's request within a specific role. It's the most commonly used category of prompts. By giving the AI a role, it gives responses based on the role given. 
A trick that has worked for this particular category is making use of the <strong>5 Ws framework</strong>, that is: </p>
</li>
<li><p>Who - Assigns the role you need the model to play. A role like a teacher, developer, chef, and so on.</p>
</li>
<li>What - Refers to the action you want the model to do.</li>
<li>When - Your desired timeline to complete a particular task.</li>
<li>Where - Refers to the location or context of a particular prompt.</li>
<li>Why - Refers to the reasons, motivations, or goals for a particular prompt.</li>
</ol>
<p>An example of a role-based prompt is:</p>
<pre><code>As a coding tutor, your role is to create personalized study plans to help individuals learn how to code. Your responsibilities will include understanding the goals, time commitment, and preferred learning resources <span class="hljs-keyword">of</span> each student, and using that information to develop a comprehensive study plan <span class="hljs-keyword">with</span> clear timelines and links to relevant resources. You should be able to adapt your teaching style to meet the individual needs <span class="hljs-keyword">of</span> each student and provide ongoing support and guidance throughout the learning process. Your ultimate goal will be to help each student develop the skills and knowledge they need to achieve their coding goals.
</code></pre><p>This prompt should also include what you intend to learn, the intended learning period, and your goal for learning. Remember that the more details you give, the more tailored results you will get.</p>
<p><strong>NOTE:</strong> If you lack prior knowledge on what you need help with, you shouldn’t fully rely on the response you get from the model. Be sure to crosscheck with other sources if you doubt the model’s responses, as the model is not always correct.</p>
<h2 id="heading-principles-of-effective-prompt-engineering">Principles of Effective Prompt Engineering</h2>
<p>Now that we have covered the different prompt categories, let's look at how you can craft good prompts. To help you understand better, we’ll go through different prompt engineering frames that optimize the responses we get by providing clear queries meant for NLP. </p>
<p>You should keep the following in mind when creating prompts:</p>
<ul>
<li><p><strong>Clarity</strong> – In any communication setting, clarity is very important. The same principles apply to prompt engineering. If you want to craft a good prompt, it's important to be clear about what you want. A good prompt helps the AI provide more accurate responses.</p>
</li>
<li><p><strong>Provide context and examples</strong> – This involves providing additional info that can help the AI better understand what the prompt is meant to achieve. By doing this, you increase the chances of getting more accurate responses. </p>
</li>
<li><p><strong>Set limitations and constraints</strong> – This involves setting boundaries within which the AI should operate. This increases the chances of getting the intended response, and avoiding undesired/irrelevant information.</p>
</li>
<li><p><strong>Break down queries</strong> – Breaking down queries into smaller and more manageable blocks will make it easier for the AI to process the info. This will help the model understand each query and produce better responses.</p>
</li>
<li><p><strong>Iterate and rephrase</strong> – In some cases, after giving the AI a query, you might not be satisfied with the response you get. In such cases you can rephrase your prompt and also provide more context for better results.</p>
</li>
<li><p><strong>Prioritize important info</strong> – This is where you highlight the most important information in the prompt. By doing this you are telling the AI to focus on providing responses that are relevant to the highlighted information.</p>
</li>
<li><p><strong>Use multiple choice questions</strong> – In a situation where you're stuck with choosing from multiple options, you can provide the AI with different options to work with so you can save time.</p>
</li>
<li><p><strong>Request step-by-step explanation</strong> – Let's say you need detailed information or a breakdown of a complex topic. You can structure your prompt in a way that instructs the AI to give responses in a more thorough manner by breaking down each step.</p>
</li>
<li><p><strong>Encourage critical thinking</strong> – This can be useful when you are relying on information like a piece of advice from the AI. By encouraging the AI to think critically, you increase the chances of getting a response based on realistic logic.</p>
</li>
<li><p><strong>Verify the accuracy of generated response</strong> – Last, but not least, <strong>it's always important to verify the AI-generated responses</strong>. This involves making sure the information is accurate and up to date. By doing this you are able to make sure that you are making an informed decision based on the response generated.</p>
</li>
</ul>
<h2 id="heading-practical-example-of-a-prompt">Practical Example of a Prompt</h2>
<p>Having discussed the different prompt categories and principles for effective prompt writing, let's take a closer look at how to apply these concepts in a real-world setting. </p>
<p>To fully utilize what we have covered so far, we'll look at some practical examples, address some common AI response issues, and also take a look at how AI is being used across different industries.</p>
<p>I know crafting a good question isn't easy, but believe me when I say I have been there. The process becomes easier when you learn how to create appropriate prompts. </p>
<p>For example, let's say that you want to get started with learning to code with front-end technologies, and you're confused and don't know where to start. Instead of asking an open question like: "Where can I learn about front-end development?", you can use a more specific and targeted prompt like: </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/crafting-prompts.png" alt="crafting-prompts" width="600" height="400" loading="lazy"></p>
<p>As you can see in the image above, here's the prompt I gave:</p>
<blockquote>
<p>"When it comes to learning front-end web development online, what are the differences between various coding education platforms in terms of curriculum content, learning resources, and community support? For example, which platform provides more comprehensive and up-to-date courses in HTML, CSS, and JavaScript, and which have a more active and engaged community to support learners in their front-end development journey?"</p>
</blockquote>
<p>The AI provided a reasonably detailed and informative answer based on the information I provided.</p>
<p>The good thing about this prompt is that it is applicable across different industries. We're increasingly seeing different applications of AI in fields like entertainment, finance, law, medicine, education, and so on.</p>
<p>Among these fields, the entertainment field is one of the most common where AI has been used. We've seen people use AI to create YouTube content from scratch. This involves a series of steps that includes creating a long conversation between you and the AI in such a scenario that the AI is given a role and you follow its instructions. </p>
<p>As much as we can rely on the AI to accomplish a specific task, it's also important to consider the task we are assigning to the AI and if it's appropriate. These language models mostly excel at tasks that require processing large amounts of data which help them identify unique response patterns. </p>
<p>In addition to this it's also important to choose an appropriate model for a specific task, as different models are trained to handle different tasks.</p>
<h2 id="heading-ai-pitfalls-and-limitations">AI Pitfalls and Limitations</h2>
<p>Despite all the advancements that AI has made in the recent years, we can agree that they aren't that perfect either.</p>
<p>One of the major concerns highlighted by multiple sources is that the AI models have potential for biasness. </p>
<p>How is this possible? Well, machine learning algorithms rely on human data to make predictions. In cases where the data fed to the model is biased, the resulting responses would also be biased. So, it's important to carefully evaluate the training data for any form of biasness and make adjustments at an early stage. </p>
<p>Also, while we can trust AI to automate certain tasks, the results of their findings may not always be accurate. If the AI isn't restricted by well defined parameters, it may go overboard beyond the user's capability. </p>
<p>To avoid these circumstances, it's always a good practice to have human oversight to continually monitor the model and also help in identifying errors with the model.</p>
<p>Another common area where AI struggles is understanding complex language and relating to how a real human would feel in different situations. Because it can't "feel", many of its decisions related to normal human behaviour aren't accurate and can't be fully trusted.</p>
<p>And finally, if the training data is incomplete, the model may not be able to give the most accurate responses. When this happens, a model might opt to generate ideas based on what it thinks the user might be asking for. This means that the model is struggling as it doesn't have enough accurate data to generate a good response.</p>
<h3 id="heading-current-issues-with-ai-responses">Current issues with AI responses</h3>
<p>The unfortunate truth at this point is that AI-generated responses aren't always correct. I have fallen victim to this. But luckily for me, I was aware of the error and was able to correct it. </p>
<p>Another thing to note is that if you give an AI alternative information that's not a correct response, the AI will always try to agree with you even if you are wrong. That's why it's a good idea to <strong>make sure you have some idea of what you are asking the AI about</strong>. In a case where the AI gives you an incorrect response, you can always try to rephrase your prompt by providing more context.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>It seems clear that AI technology will play a very important role in our lives in the future. This technology will continue to revolutionize the way we go through our daily routines at work, home, or school. </p>
<p>To fully take advantage of this, we need to make sure that we are able to communicate effectively with these systems. And that's where prompt engineering comes in. By understanding how to craft a good prompt, we can improve the interaction between humans and machines.</p>
<p>As we try to rely on information provided by AI, it's essential to consider the possible implications it can bring to our lives. One major issue is that AI systems are often biased, which might lead to discriminatory outcomes. </p>
<p>But regardless of the situation, it seems that AI is here to stay. So the earlier you learn to communicate with it, the better. Don't be left out of the party 😊.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Use GitHub Actions to  Automate Open-Source Projects ]]>
                </title>
                <description>
                    <![CDATA[ These days, developers use automation tools all the time to manage tasks effectively and streamline their daily activities. And one of these popular tools is GitHub Actions.  When talking about software, including the open-source variety, you'll like... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/automate-open-source-projects-with-github-actions/</link>
                <guid isPermaLink="false">66b8dbb7b16665d8febd7f4b</guid>
                
                    <category>
                        <![CDATA[ automation ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub Actions ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Tue, 28 Mar 2023 15:51:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/03/OOP--4-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>These days, developers use automation tools all the time to manage tasks effectively and streamline their daily activities. And one of these popular tools is GitHub Actions. </p>
<p>When talking about software, including the open-source variety, you'll likely agree with me that efficiency is in high demand. And with the help of of such automation tools, maintainers can automate repetitive tasks and focus on more important tasks such as writing quality code, reviewing contributions, and creating an active community around the project.</p>
<p>I have had to manually do certain tasks that could've been automated, so I feel like I am in a good position to share how using GitHub actions can save time. </p>
<p>I spend the better part of my mornings going over one of my <a target="_blank" href="https://github.com/larymak/Python-project-Scripts">mini-python-projects</a> that has attracted contributors. I write warm and welcoming message to new contributors, I check the recently made PRs to make sure they adhere to the rules of the project like including README files with instructions, screenshots if needed, and so on.</p>
<p>But what I didn't know is that I could automate some of these tasks and much more to reduce my workload. And I could do this with the help of GitHub Actions.</p>
<p>In this guide, I'll share more on GitHub Actions and how I use it. I'll show you how you can leverage it to automate various aspects of your projects from welcoming new contributors to assigning tasks, checking code quality, and much more. Let's make your project more efficient and interactive together.</p>
<h2 id="heading-what-is-github-actions">What is GitHub Actions?</h2>
<p>GitHub Actions is a tool that enables you to perform different automations within a GitHub repository. It lets you create custom workflows that you can use to automate your development process such as building, testing, and deploying code. </p>
<p>After integrating this tool with other GitHub features, you can transform your project management routine and make it more enjoyable and engaging for everyone contributing to it.</p>
<h3 id="heading-how-to-set-up-github-actions-in-your-repo">How to set up GitHub Actions in your repo</h3>
<p>It all begins in the root folder. By default, GitHub Actions is usually integrated within your GitHub repository, so you won't need to sig-up for a separete account on install it. But you will need to follow a few steps in order for you to access it's functionalities.</p>
<ul>
<li>In your GitHub repository, on the top navigation tab you will see the <strong>Actions</strong> tab. Click on it, and it will give you access to a list of recommended workflows and also an option to create your own. </li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/03/actions-tab.png" alt="actions-tab" width="600" height="400" loading="lazy"></p>
<ul>
<li><p>Now, depending on the nature of your project, you can either choose to pick an already created workflow from the available lists or you can choose to create one by yourself. Since you understand what your project is all about and what you may need to automate, I would recommend setting a new workflow yourself. This will give you a better understanding of what is happening. </p>
</li>
<li><p>To set up a new workflow, click on <strong>Set up a workflow yourself</strong>. This will take you to a workflow creation screen with a new YAML file named <code>main.yml</code>. At this point I should mention that having an understanding of YAML is really important since you have chosen to write your own workflows.</p>
</li>
</ul>
<p>What happens behind the scene is, once you have clicked this option, two folders are created alongside the <code>main.yml</code> file. If you access your repository afterwards or take a look at the path just before you file name you will see: <code>.github/workflows/&lt;filename&gt;</code>.</p>
<ul>
<li>Inside the <code>main.yml</code> file is where you define your workflow, and after writing everything you commit the changes just like your would do when making changes to a repository. With this, you have your workflow set and it'll run based on the triggers defined within the YAML file.</li>
</ul>
<p>Alternatively you can still accomplish all this from your favorite code editor. All you need to do is clone the repository onto your computer, create a <code>.github</code> folder on the root folder of your project, create another folder within it named <code>workflows</code>, and finally add a file with an extension of <code>.yml</code> and write your script in it. </p>
<p>In the examples below, I will be referencing the code that I implemented in my project to help you understand.</p>
<h2 id="heading-github-actions-components">GitHub Actions Components</h2>
<p>GitHub actions mainly consists of three main components, which include: </p>
<ul>
<li><p>Workflows - These are sets of rules that define the automation process. They are defined in the YAML file which is stored in the <code>.github/workflows</code> directory.</p>
</li>
<li><p>Events - These are what initiate a workflow. For example you can have an event set to run a workflow when a PR is created, or when an issue is opened. To define an event in a workflow, use the keyword <code>on</code> followed by the event names. </p>
</li>
</ul>
<p>For example:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">on:</span>
    <span class="hljs-attr">issues:</span>
        <span class="hljs-attr">types:</span> [<span class="hljs-string">opened</span>]
    <span class="hljs-attr">pull_request_target:</span>
        <span class="hljs-attr">types:</span> [<span class="hljs-string">opened</span>]
</code></pre>
<ul>
<li>Jobs - These are what make up a workflow. Jobs are run concurrently by default. To define your jobs in a given workflow, use the keyword <code>jobs</code> followed by a unique identifier for each job and its configuration. </li>
</ul>
<p>For example: </p>
<pre><code class="lang-yaml"><span class="hljs-attr">jobs:</span>
  <span class="hljs-attr">build:</span>
    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>
    <span class="hljs-attr">steps:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Check</span> <span class="hljs-string">out</span> <span class="hljs-string">repository</span>
        <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v2</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Set</span> <span class="hljs-string">up</span> <span class="hljs-string">Python</span>
        <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/setup-python@v2</span>
        <span class="hljs-attr">with:</span>
          <span class="hljs-attr">python-version:</span> <span class="hljs-number">3.10</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">dependencies</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">|</span>
          <span class="hljs-string">pip</span> <span class="hljs-string">install</span> <span class="hljs-string">-r</span> <span class="hljs-string">requirements.txt</span>
</code></pre>
<p>All of these components work together to ensure a given set of rules are successfully executed. Now let's start working on our project.</p>
<h2 id="heading-how-to-automate-issue-and-pull-request-management">How to Automate Issue and Pull Request Management</h2>
<p>Managing issues and pull requests can be a very time-consuming task especially for large open-source projects. But with GitHub Actions, maintainers are able to automate this processes and spend more time on coding and engaging with the community.</p>
<h3 id="heading-how-to-create-issue-and-pull-request-templates">How to Create Issue and Pull Request Templates</h3>
<p>If you are an active open-source contributor, chances are that you have come a cross a guide that tells you what to include either in your issue or PR submission. The main aim of such templates is to give guidance and ensure that the contributors provide all necessary info.</p>
<p>Now, let's see how you can implement this template on your projects: </p>
<ul>
<li>First step is to make sure there is a <code>.github</code> directory in the root of the repository if you don't already have it.</li>
<li>Within the <code>.github</code> folder, create two more folders <code>ISSUE_TEMPLATE</code> and <code>PULL_REQUEST_TEMPLATE</code>.</li>
<li>Within these two folders, add markdown files representing the content you want to be automated: For example you can have <code>feature_request.md</code> and <code>issue_report.md</code> for the issue template and <code>pull_request_template.md</code> for the PR template. </li>
</ul>
<p>Below is a reference of what I have in my <code>pull_request_template.md</code> file. It's a simple guide that tells the contributors what to include before submitting their pull request.</p>
<pre><code class="lang-markdown"><span class="hljs-strong">**Related Issue(s):**</span>
Please provide a title for this pull request.

<span class="hljs-strong">**Description:**</span>
Please provide a brief description of the changes you are proposing.

<span class="hljs-strong">**Checklist:**</span>

<span class="hljs-bullet">-</span>   [<span class="hljs-string"> </span>] I have read and followed the [<span class="hljs-string">contributing guidelines</span>](<span class="hljs-link">/CONTRIBUTING.md</span>).
<span class="hljs-bullet">-</span>   [ ] I have included a README file for my project.
<span class="hljs-bullet">-</span>   [ ] I have updated the main README file where necessary.
<span class="hljs-bullet">-</span>   [ ] I have included a requirements.txt file.
<span class="hljs-bullet">-</span>   [ ] I have added tests that prove my changes are effective or that my feature works.
<span class="hljs-bullet">-</span>   [ ] All new and existing tests pass.

<span class="hljs-strong">**Screenshots**</span>
If applicable, add screenshots to help explain behavior of your code.

<span class="hljs-strong">**Additional Notes:**</span>
Please provide any additional information about the changes you are proposing.
</code></pre>
<p>For a more detailed explanation, check out the GitHub Action's documentation about issue and pull request templates <a target="_blank" href="https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/about-issue-and-pull-request-templates">here</a>.</p>
<h3 id="heading-welcoming-new-contributors-and-recognizing-community-efforts">Welcoming New Contributors and Recognizing Community Efforts</h3>
<p>Being a maintainer and engaging with your community is important, as you get an opportunity to directly interact with and get feedback from your peers. But if you are running a large project that attracts many contributors you might not get that opportunity to directly engage with the community very often. </p>
<p>With the help of GitHub Actions, you can accomplish some of these tasks like welcoming new contributors, recognizing their efforts, and creating a positive atmosphere for the existing community members.</p>
<p>If you are managing a small project, you can probably directly interact with your community but still utilize automation to help yourself out. </p>
<p>For instance, here is some sample code that I have implemented to welcome new contributors when they open a pull request or create a new issue on the repository. In it, you can see I have a message thanking them for their effort and also assuring them that their changes will be reviewed as soon as I'm able. Despite this I do follow up through conversation if anything extra is required or to suggest new ideas.</p>
<pre><code class="lang-yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">Welcome</span> <span class="hljs-string">New</span> <span class="hljs-string">Contributors</span>

<span class="hljs-attr">on:</span>
    <span class="hljs-attr">issues:</span>
        <span class="hljs-attr">types:</span> [<span class="hljs-string">opened</span>]
    <span class="hljs-attr">pull_request_target:</span>
        <span class="hljs-attr">types:</span> [<span class="hljs-string">opened</span>]

<span class="hljs-attr">jobs:</span>
    <span class="hljs-attr">welcome:</span>
        <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>
        <span class="hljs-attr">steps:</span>
            <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Welcome</span> <span class="hljs-string">Issue</span>
              <span class="hljs-attr">if:</span> <span class="hljs-string">github.event_name</span> <span class="hljs-string">==</span> <span class="hljs-string">'issues'</span>
              <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/github-script@v5</span>
              <span class="hljs-attr">with:</span>
                  <span class="hljs-attr">script:</span> <span class="hljs-string">|
                      const issue = context.issue;
                      const repo = context.repo;
                      const issueAuthor = context.payload.sender.login;
                      const welcomeMessage = `
                        Hi @${issueAuthor}! :wave:
                        Thank you for creating an issue in our repository! We appreciate your contribution and will get back to you as soon as possible.
                      `;
                      github.rest.issues.createComment({
                        ...repo,
                        issue_number: issue.number,
                        body: welcomeMessage
                      });
</span>            <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Welcome</span> <span class="hljs-string">Pull</span> <span class="hljs-string">Request</span>
              <span class="hljs-attr">if:</span> <span class="hljs-string">github.event_name</span> <span class="hljs-string">==</span> <span class="hljs-string">'pull_request_target'</span>
              <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/github-script@v5</span>
              <span class="hljs-attr">with:</span>
                  <span class="hljs-attr">script:</span> <span class="hljs-string">|
                      const pr = context.issue;
                      const repo = context.repo;
                      const prAuthor = context.payload.sender.login;
                      const welcomeMessage = `
                        Hi @${prAuthor}! :wave:
                        Thank you for submitting a pull request! We appreciate your contribution and will review your changes as soon as possible.
                      `;
                      github.rest.issues.createComment({
                        ...repo,
                        issue_number: pr.number,
                        body: welcomeMessage
                      });</span>
</code></pre>
<p>In addition to this simple workflow, if you are leading a more complex project you might consider writing a more detailed workflow that is able to automatically assign badges, labels, or custom titles to contributors. </p>
<p>Similary you can choose to add a workflow that thanks contributors when their pull request is merged or issue closed. You can check out <a target="_blank" href="https://docs.github.com/en/actions/managing-issues-and-pull-requests/using-github-actions-for-project-management">GitHub's Action documentation</a> for a detailed guide.</p>
<h2 id="heading-how-to-automate-code-quality-assurance">How to Automate Code Quality Assurance</h2>
<p>For most developers, writing quality code is very important, especially if they're working on consumer related applications. While the success of a project depends on well-written and tested code, sometimes reviewing the changes might take time and even delay in-demand features. </p>
<p>With the help of code automation tools, you can maintain a consistent coding style and quickly and easily identify potential bugs, keeping your project clean. </p>
<p>So, how do you set up continuous integration (CI) with GitHub Actions, integrate code formatting and linting tools, and use automated code review services in your project?</p>
<p>Continuous Integration (CI) helps you automate processes like building, testing, and validating code changes. Just like the any other automation code, the CI code is written in a <code>.yml</code> file stored within the <code>.github/workflows</code> folders.</p>
<p>Below is an example of a Python project CI workflow that runs when a push or pull request is made to the <code>main</code> branch a repository. It tests the Python code with multiple versions, installs the necessary dependencies, and runs the tests using the <code>unittest</code> module. </p>
<pre><code class="lang-yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">Python</span> <span class="hljs-string">CI</span>

<span class="hljs-attr">on:</span>
  <span class="hljs-attr">push:</span>
    <span class="hljs-attr">branches:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">main</span>
  <span class="hljs-attr">pull_request:</span>
    <span class="hljs-attr">branches:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">main</span>

<span class="hljs-attr">jobs:</span>
  <span class="hljs-attr">build:</span>
    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>
    <span class="hljs-attr">strategy:</span>
      <span class="hljs-attr">matrix:</span>
        <span class="hljs-attr">python-version:</span> [<span class="hljs-number">3.7</span>, <span class="hljs-number">3.8</span>, <span class="hljs-number">3.9</span>, <span class="hljs-number">3.10</span>]

    <span class="hljs-attr">steps:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v2</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Set</span> <span class="hljs-string">up</span> <span class="hljs-string">Python</span> <span class="hljs-string">${{</span> <span class="hljs-string">matrix.python-version</span> <span class="hljs-string">}}</span>
      <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/setup-python@v2</span>
      <span class="hljs-attr">with:</span>
        <span class="hljs-attr">python-version:</span> <span class="hljs-string">${{</span> <span class="hljs-string">matrix.python-version</span> <span class="hljs-string">}}</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">dependencies</span>
      <span class="hljs-attr">run:</span> <span class="hljs-string">|
        python -m pip install --upgrade pip
        pip install -r requirements.txt
</span>    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Run</span> <span class="hljs-string">tests</span>
      <span class="hljs-attr">run:</span> <span class="hljs-string">|</span>
        <span class="hljs-string">python</span> <span class="hljs-string">-m</span> <span class="hljs-string">unittest</span> <span class="hljs-string">discover</span>
</code></pre>
<p>In addition to the above code, if you want help maintaining consistency in your coding style, you can integrate code formatting and linting tools such as <code>black</code>, <code>isort</code> or <code>flake8</code>. For that all you need to do is add them within your <code>requirements.txt</code> file which is already included in the above code and icluding the block below to run the tools. </p>
<pre><code class="lang-yaml"><span class="hljs-comment">#...</span>
    <span class="hljs-comment"># ...</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Run</span> <span class="hljs-string">black</span> <span class="hljs-string">for</span> <span class="hljs-string">code</span> <span class="hljs-string">formatting</span>
      <span class="hljs-attr">run:</span> <span class="hljs-string">|
        black --check .
</span>    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Run</span> <span class="hljs-string">isort</span> <span class="hljs-string">for</span> <span class="hljs-string">import</span> <span class="hljs-string">sorting</span>
      <span class="hljs-attr">run:</span> <span class="hljs-string">|
        isort --check --diff .
</span>    <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Run</span> <span class="hljs-string">flake8</span> <span class="hljs-string">for</span> <span class="hljs-string">linting</span>
      <span class="hljs-attr">run:</span> <span class="hljs-string">|</span>
        <span class="hljs-string">flake8</span> <span class="hljs-string">.</span>
</code></pre>
<p>If it finds any code formatting issues, the CI build will fail. To fix it you will have to manually check the logs. Check out this guide on <a target="_blank" href="https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python">building and testing Python</a> for more examples. </p>
<p>The above ideas are just a few of the automations you can use in your projects. For a more complex application, you might consider also adding workflows for generating documentation with tools like Sphinx or MkDocs, automating dependancy updates, automating release management and project tracking, and more.</p>
<h2 id="heading-tips-for-building-custom-github-actions">Tips for Building Custom GitHub Actions</h2>
<p>There are many pre-built actions already available in the <a target="_blank" href="https://github.com/marketplace?type=actions">GitHub Actions market place</a>. But sometimes you may want or need to customize your workflows to fit your needs. </p>
<p>For that, you can choose either JavaScript or Docker containers and share it with the community. </p>
<p>Here are some best practices to follow:</p>
<ul>
<li>Understand the problem – just like any other project, before you begin building make sure you understand the problem you are trying to solve and how you will solve it.</li>
<li>Choose the right stack – as discussed above, GitHub Actions can either be written using JavaScript or Docker. Make sure to choose what best fits your needs and understanding.</li>
<li>Make sure you adhere to the best coding practices so others can easily understand and read your code.</li>
<li>Make use of already available packages such as <code>@actions/core</code> and <code>@actions/github</code> which provide easy interaction with the GitHub Actions environment and the GitHub API.</li>
<li>Chances are that after successfully creating your own workflow, you might be want to publish it. Whether you publish or not, make sure to test your action for potential issues or bugs.</li>
</ul>
<p>With these easy tips, you can build a custom GitHub Action that automates some major/basic tasks in your project. In addition to the above tips, more details about creating custom actions can be found on the <a target="_blank" href="https://docs.github.com/en/actions/creating-actions">official documentation</a>.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In this guide, we have seen the potential benefits that GitHub Actions can bring to our projects. Not only does it simplify the production process, but it also allows us to customize the actions to fit our project needs. </p>
<p>This is just the tip of what we can achieve. I would encourage you to get a better understanding and explore different ways in which you can further implement GitHub Actions to enhance your open-source project. Let's embrace automation and utilize it to get more done.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Why Python is Good for Beginners – and How to Start Learning It ]]>
                </title>
                <description>
                    <![CDATA[ Python is a programming language that has relatively simple syntax. This makes it an ideal choice for beginners who are just starting out in the field of programming.  Python is also a very versatile language, which means that you can use i for a wid... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/why-learn-python-and-how-to-get-started/</link>
                <guid isPermaLink="false">66b8dc2016799add618d7f2e</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Wed, 01 Mar 2023 23:22:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/02/OOP--2-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Python is a programming language that has relatively simple syntax. This makes it an ideal choice for beginners who are just starting out in the field of programming. </p>
<p>Python is also a very versatile language, which means that you can use i for a wide variety of tasks and in different industries.</p>
<p>Just like most newbies trying to get into tech, I had difficulties finding the correct path of learning to code. I had to bounce back on forth trying to find a way that was comfortable for me. </p>
<p>I began my journey into the tech field by learning first the basics of web development – that is HTML, CSS and a little bit of JavaScript. Later on I tried out different programming languages, all in the name of trying to find the one that suited me perfectly. </p>
<p>I did a little bit of C and Java, and I even learned Pascal at some point <em>(basically because it was what was being taught at school as a freshman).</em> </p>
<p>All this was before I came across Python, gave it a try, learned a little bit about it, and decided that it would be my new normal. </p>
<p>Read along to get a better understanding why Python is the easiest language to learn for beginners, its benefits, and resources and tips to help you get started.</p>
<h2 id="heading-why-learn-python">Why Learn Python?</h2>
<p>Whether you are beginner or a person who has learned a couple of  programming languages, you will likely agree that learning a new programming language can be challenging. Even more so when you don't have the right resources and guidance. But with the right help, you can make it an enjoyable experience.</p>
<p>Python was created on December 3, 1989 by Guido van Rossum. He had a design philosophy which stated, "<strong>There's only one way to do it, and that's why it works</strong>". </p>
<p>Python is an interpreted, high-level, general-purpose programming language. As a programming language, Python uses mostly English keywords, so it has fewer exceptions and special cases compared to the languages.</p>
<p>Now let's look at some of the reasons you might want to learn Python.</p>
<h3 id="heading-pythons-simple-syntax">Python's Simple Syntax</h3>
<p>Python is a language that has a very simple syntax. This is one of the reasons it is ideal for beginners getting into tech to consider as a first language. I understand this alone might not be motivating enough, but believe me – after a thorough breakdown you will be convinced otherwise.</p>
<p>Compared to other languages, Python has one of the simplest syntaxes that uses fewer lines of code to accomplish a particular task. This makes it easier to learn the basics and understand the language within a shorter period of time. </p>
<p>In addition to this, Python is an interpreted language, which means that you don’t need a compiler to write and run Python code.</p>
<p>Let's take an example where we print the "Hello World" statement using Python, Java, and C++:</p>
<p>Here's "Hello World" in Python:</p>
<pre><code class="lang-python">print(<span class="hljs-string">"Hello World)</span>
</code></pre>
<p>Here it is in Java:</p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">HelloWorld</span> </span>{
  <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
    System.out.println(<span class="hljs-string">"Hello, world!"</span>);
  }
}
</code></pre>
<p>And here it is in C++:</p>
<pre><code class="lang-c++"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;iostream&gt;</span></span>
<span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> <span class="hljs-built_in">std</span>;

<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
  <span class="hljs-built_in">cout</span> &lt;&lt; <span class="hljs-string">"Hello, world!"</span> &lt;&lt; <span class="hljs-built_in">endl</span>;
  <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
</code></pre>
<p>As you can see from the code snippets above, Python has the most concise and easiest syntax compared to the others.</p>
<h3 id="heading-pythons-versatility">Python's Versatility</h3>
<p>This is one of the reasons why Python is such a popular language. No matter what field you are in, one way or the other you'll probably be able to use Python in your work and personal projects. </p>
<p>For instance: </p>
<ul>
<li><strong>Industrial Applications</strong> – Python is used in a wide range of fields including web development, data science, machine learning, artificial intelligence, scientific computing, and more. Recently its impact has really been felt in the fields of AI and ML, making it a high demand skill to have.</li>
<li><strong>Frameworks and Libraries</strong> – Python has a large collection of frameworks and libraries, all of which make it easier to use while creating applications and help you develop projects in a shorter period of time. </li>
<li><strong>Compatibility</strong> – Python is a cross platform language, meaning code that is written in one OS can be executed in another OS without any issues. This is mostly useful for developers working on web projects who would like to test the project functionality on multiple devices.</li>
<li><strong>Open-Source</strong> – One of the reason why I actually like Python is that it has a vibrant open-source community. This helps make many resources available to those who want to learn and contribute to the language. Also this makes Python an evolving language that is always getting better and better. </li>
</ul>
<h2 id="heading-benefits-of-learning-python-as-a-new-developer">Benefits of Learning Python as a New Developer</h2>
<p>As a beginner getting into tech, learning Python will have lots of benefits. In addition to what we just discussed, here are some more:</p>
<h3 id="heading-popularity-in-various-industries">Popularity in various industries</h3>
<p>Python is used in many industries such as web development, data science, artificial intelligence, finance, education, research, security and many more. </p>
<p>Having Python knowledge and skills can open doors to various career opportunities such as Software Engineer, DevOps Engineer, Data Scientist, Research Analyst and more, giving you an edge in the job market. </p>
<h3 id="heading-practicality">Practicality</h3>
<p>If you're comfortable with Python, you'll be able to put those skills to good use, solving real world problems. </p>
<p>With its wide variety of libraries and frameworks you will be able to develop applications and systems that can help predict outcomes, visualize data, and understand different trends. Python's also very good at helping you automate tasks. </p>
<h3 id="heading-community-and-support">Community and Support</h3>
<p>The Python community provides many resources to help first timers learn. These resources include online <a target="_blank" href="https://www.freecodecamp.org/news/the-python-handbook/">tutorials</a>, forums, coding challenges, <a target="_blank" href="https://www.freecodecamp.org/news/learn-python-free-python-courses-for-beginners/">courses</a>, and more. </p>
<p>freeCodeCamp even offers a Python curriculum which <a target="_blank" href="https://www.freecodecamp.org/learn/scientific-computing-with-python/">you can check out here</a>.</p>
<p>This kind of support can help a newcomer get motivated and engaged as they try to build their career. </p>
<h2 id="heading-tips-for-learning-python">Tips for Learning Python</h2>
<p>While Python is a great first language to learn, that doesn't make it a walk in the park. You'll want to take the necessary steps and find the right tools to help you along your learning path.</p>
<p>First of all, having the right resources is a good start, and a roadmap can be very helpful. </p>
<p>For this you won't have to struggle much: <a target="_blank" href="https://roadmap.sh/python">roadmap.sh</a> is an open-source project that has roadmaps and guides to different career paths, including Python.</p>
<p>With this understanding of how to study in mind, now we can proceed to the resources to help you achieve your learning goals.</p>
<h3 id="heading-resources-for-learning-python">Resources for Learning Python</h3>
<p>There are a variety of resources to learn Python, some of which are paid and some of which are free. </p>
<ul>
<li>For step-by-step lessons that are interactive check out platforms like: Codecademy, W3Schools, Pythontutorial.net, Python.org, Google's Python Class, and Educative.</li>
<li>For fully facilitated courses check out platforms like: freeCodeCamp, Udemy, Coursera, edX, Programiz, Microsoft's Introduction to Python Course</li>
</ul>
<p>Another important thing to note is that writing code is essential to mastering Python – the more you practice the better you become. </p>
<p>Build projects is a great way to help improve your understanding of the language. Start with small projects and gradually work you way up to more complex projects. </p>
<p>To get you started, here's a <a target="_blank" href="https://www.freecodecamp.org/news/python-projects-for-beginners/">list of Python projects</a> you can check out.</p>
<p>Also, try learning in public. You can do this by participating in online communities and social media through sharing what you know and answering questions. For example, you can participate in #100DaysofCode on Twitter, or commit to some other challenge. In return you'll be able to get answers to questions you have.</p>
<p>As you learn, keep in mind that understanding the fundamentals of programming such as data types, functions, and control structures is very important before diving into advanced topics.</p>
<p>And as an aspiring Python developer, learning how to debug your code is crucial for your success as a developer. So make sure you learn and master the tricks at an early stage. </p>
<h3 id="heading-how-to-stay-motivated">How to Stay Motivated</h3>
<p>As the saying goes:</p>
<blockquote>
<p>Learning is a lifelong journey.</p>
</blockquote>
<p>There will always be something new to learn each and every day. And staying motivated will help you go a long way. Here is some advice to keep you going.</p>
<ul>
<li>Set achievable goals – having an achievable goal is important as it will help you stay motivated. For example you can set a goal of writing a simple program that does something each day.</li>
<li>Celebrate small wins along the way – this will keep you encouraged and eager to achieve more.</li>
<li>Find a mentor, study buddy or join a study group – this will help you learn from others, and remember to take breaks when necessary.</li>
<li>Lastly, remember that learning takes time and patience. Don't get discouraged if you don't understand a concept right away. Keep practicing and you'll get there.</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In this guide, I've highlighted some main reasons why you should consider Python as you first language. You have also seen Python's different applications and what you can do with it.</p>
<p>To help you get started, I would highly encourage you to take advantages of all resources available – both those listed here and others available online (including books) to get a better understanding of the language.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Secure User Authentication Methods – 2FA, Biometric, and Passwordless Login Explained ]]>
                </title>
                <description>
                    <![CDATA[ In today's digital world, user authentication is essential in ensuring secure access to online accounts and resources.  With the rise of cyber-threats, companies need to ensure that their users are authenticated before accessing any sensitive informa... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/user-authentication-methods-explained/</link>
                <guid isPermaLink="false">66b8dc06d3be22cd680b3b84</guid>
                
                    <category>
                        <![CDATA[ Application Security ]]>
                    </category>
                
                    <category>
                        <![CDATA[ authentication ]]>
                    </category>
                
                    <category>
                        <![CDATA[ biometric authentication ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Two-factor authentication ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Tue, 17 Jan 2023 18:05:56 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/01/OOP.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In today's digital world, user authentication is essential in ensuring secure access to online accounts and resources. </p>
<p>With the rise of cyber-threats, companies need to ensure that their users are authenticated before accessing any sensitive information. This helps protect the online safety of both parties.</p>
<p>In the past, the most common authentication method that we're all likely familiar with was using a username and password to sign in to apps and services. </p>
<p>And if you're a programmer, you've likely developed projects where you have implemented this method as a form of authentication.</p>
<p>But hey! Guess what? Things have changed over the past couple of years. With advancements in technology, this means security has to be taken more seriously and we need more strict authentication approaches.</p>
<p>And that's what we'll learn about in this tutorial.</p>
<h2 id="heading-different-authentication-methods">Different Authentication Methods</h2>
<p>There are many different methods of authenticating users, and each has its own advantages and disadvantages. The most common methods of user authentication are:</p>
<ul>
<li>username and password,</li>
<li>two-factor authentication,</li>
<li>biometrics</li>
</ul>
<p>just to list a few.</p>
<p>But as time passes, we continue to evolve and new methods are introduced that provide a safer way to store user data. Some examples of these methods include:</p>
<ul>
<li>Passwordless login</li>
<li>Multi-factor authentication, and</li>
<li>Token-based authentication</li>
</ul>
<p>In this article, we will explore the most common methods of user authentication. By understanding the different options available, you can choose the best method for your needs. </p>
<p>But first, let's understand what we mean by authentication.</p>
<h2 id="heading-what-is-user-authentication">What is User Authentication?</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/01/e79vtruyjlui8cz8j8r6-1.png" alt="e79vtruyjlui8cz8j8r6-1" width="600" height="400" loading="lazy"></p>
<p>To better understand what authentication is all about, we can relate it to a real world example. </p>
<p>Let's take a scenario where you are out at the store shopping and you need to make a payment with your credit card. You go through the steps of swiping your card to authenticate the payment, but what really happens before the transaction is complete?</p>
<p>After swiping your card, the machine will read the card info and send it to the issuer for verification. The issuer will then check for a couple of things in order to verify the transaction. </p>
<p>In this case, the issuer will check the card info against what is on record, like expiry date, card number, and account balance. If everything matches what is on record and there are sufficient funds, an authorization message is sent and the transaction is allowed. </p>
<p>In a case where the info doesn't match and/or there are not enough funds, a decline message is instead sent and the transaction is declined.</p>
<p>Now with this understanding, authentication is the process of verifying the identity of a user. User authentication verifies the identity of a user before granting access to sensitive information or systems. </p>
<h3 id="heading-what-are-some-common-authentication-methods">What are some common authentication methods?</h3>
<p>There are many ways to authenticate a user, and each platform has different methods that they use. But as I mentioned above, some common methods include username and password, fingerprint, facial recognition, and iris scan.</p>
<h4 id="heading-usernamepassword-authentication">Username/password authentication</h4>
<p>Username and password are the most common form of authentication. This is where a user enters their username and password into a login form, and if the credentials match what is stored in the database, the user is granted access. </p>
<p>But keep in mind that this method can be insecure if passwords are not properly encrypted or if users reuse the same password for multiple accounts.</p>
<h4 id="heading-biometric-authentication-methods">Biometric authentication methods</h4>
<p>Fingerprint authentication uses an individual's unique fingerprint to verify their identity. This can be done using a fingerprint scanner or by using a smartphone's built-in sensor. </p>
<p>This method is most commonly used in smart phones and recently there has been an increase in the use of this method in laptops, too.</p>
<p>Facial recognition works in a similar way, using an image of the user's face to verify their identity. Iris scanning is another biometric authentication method that uses an image of the user's iris to identify them.</p>
<h2 id="heading-more-secure-authentication-methods">More Secure Authentication Methods</h2>
<p>Even though these have historically been the most common methods, recently we have seen a rise in other methods which are said to be more secure. </p>
<p>In fact, many organizations are turning to these techniques in addition to the user providing a username and password. This is considered an extra layer of security.</p>
<p>These newer techniques include: </p>
<h3 id="heading-1-two-factor-authentication">1. Two-Factor Authentication</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/01/hktn8ib7inl9whmybqp2.jpg" alt="Two-Factor Authentication" width="600" height="400" loading="lazy"></p>
<p>Two-factor authentication, also known as 2FA, is an additional layer of security that can be used to protect your account. </p>
<p>2FA is a way of verifying a user from two different approaches, thats is: using something the user already knows (like their username and password), and using something the user has, like a phone.</p>
<p>When 2FA is enabled, apart from entering the username and password correctly, you will be prompted for the second piece of information (usually a code generated by an app on your phone or a code sent via SMS). This makes it much more difficult for someone to gain access to your account, even if they have your password.</p>
<p>2FA is not foolproof, but it is more secure compared to using only username and password. This makes it a valuable tool to help keep your account safe. If you are concerned about the security of your account, enabling 2FA will be of great help.</p>
<h3 id="heading-2-passwordless-login">2. Passwordless Login</h3>
<p>Passwordless login, just as the name suggests, is a method of logging into an account without needing a username or a password. There are many reasons why you might want to stop using a password and opt for a passwordless login experience.</p>
<p>For one, it's more convenient for users. They don't have to remember yet another username and password combination. And two, it's more secure. There are no weak passwords to be guessed or brute-forced by attackers.</p>
<p>So how do you set up a passwordless login? There are a few different methods you can use, each with its own set of pros and cons.</p>
<h4 id="heading-different-methods-of-passwordless-login">Different methods of passwordless login</h4>
<p>One popular method is to use an email link. When the user wants to log in, they provide their email address. They then receive an email with a link that expires after a certain amount of time. When they click the link, they're logged in without having to enter a password.</p>
<p>Another option is to use a one-time code generated by an app on the user's phone. The code is valid for only a short period of time, so even if someone were to intercept it, they wouldn't be able to use it.</p>
<p>Which method is best for you depends on your security needs and preferences. But whatever you choose, ditching the password is sure to make life easier for your users - and make your site more secure in the process.</p>
<p>For a practical guide on how to use the passwordless method, <a target="_blank" href="https://youtu.be/0OYA1c3bjgM">Auth0</a> has a step-by-step video guide on how to implement this.</p>
<h3 id="heading-3-multi-factor-authentication">3. Multi-factor Authentication</h3>
<p>Also known as MFA, multi-factor authentication is an authentication method that requires a user to verify their identity by providing more than one piece of information that identifies them. This can range from something the user knows, has, or is.</p>
<p>This means that in addition to having a username and password, you will be required to provide extra proof depending on the system you are trying to access. This extra proof can range from a fingerprint to a secret security key or even a code generated randomly.</p>
<p>A good example of this authentication is when you set up an online banking system. Despite having entered a correct username and password, your might be required to either provide your fingerprint or even a code in order for some transaction to happen. </p>
<p>This means that even if someone was to obtain your username and password, they would still need your fingerprint or a code that has been sent to your phone in order to accomplish a specific task.</p>
<h3 id="heading-4-token-based-authentication">4. Token-Based Authentication</h3>
<p>Token-based authentication is a method of authenticating users that involves providing them with a unique token. This token can be used to identify the user and provide access to certain resources. The toke usually contains a string of characters generated by the system that's sent to the user's device or email.</p>
<p>There are many benefits to using token-based authentication, including improved security and scalability. </p>
<p>Tokens, while costly and inconvenient at times, provide a greater level of security than passwords or biometrics since they are only issued when requested. In addition to this, they can also be set to expire after a certain period of time, making it more secure compared to the traditional approaches.</p>
<p>This method is relatively new and it has become more popular in recent years as web applications have become more complex and distributed across multiple servers. It offers several other advantages over other methods.</p>
<p>With token-based authentication, the token is stored on the client side, making it much more secure. In addition, since there's no need to store tokens on the server, scaling becomes much easier.</p>
<p>Overall, token-based authentication offers better security and performance than other methods. If you're looking to implement an auth system for your web application, consider using tokens.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>User authentication is a critical part of any application, whether it's mobile or web. </p>
<p>It is important to choose an authentication method that is both secure and easy to use. </p>
<p>There are many different factors to consider when choosing an authentication method, but the most important thing is to choose one that will protect your users' data. Hopefully this article has given you some insights into how to do that.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ API Testing Best Practices – How to Test APIs for Beginners ]]>
                </title>
                <description>
                    <![CDATA[ In this digital age, APIs have become the cornerstone of how data is shared and processed.  But many users are often unaware of the fact that they are putting their trust in an API and not a person. This is why it's important to leverage API testing ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/rules-of-api-testing-for-beginners/</link>
                <guid isPermaLink="false">66b8dbfb1ce2b93cb4142f0c</guid>
                
                    <category>
                        <![CDATA[ api ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Software Testing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Testing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Fri, 16 Dec 2022 21:25:46 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/12/OOP--2-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In this digital age, APIs have become the cornerstone of how data is shared and processed. </p>
<p>But many users are often unaware of the fact that they are putting their trust in an API and not a person.</p>
<p>This is why it's important to leverage API testing techniques to ensure that every aspect of your website or application works as expected.</p>
<h2 id="heading-why-api-testing-is-important">Why API Testing is Important</h2>
<p>My first interaction with APIs was while working on a personal project, a <a target="_blank" href="https://github.com/larymak/VirtualAssistant">VirtualAssistant</a>. It required me to fetch real data from third party apps. </p>
<p>As a beginner, the knowledge I acquired was mainly from tutorials I had watched which basically covered how to <code>GET</code>, <code>POST</code> and <code>DELETE</code> data. I didn't know that there were rules that I should follow while working with APIs. </p>
<p>But as time progressed I came to understand the importance of APIs and the major role they play in the daily applications of a developer's job.</p>
<p>Mastering the rules is an essential step in learning about APIs. Most applications today are made up of pieces of software, each of which needs to be tested in its own way. </p>
<p>There are always new and exciting ways to test an application – and we're not just talking about checking for bugs here. It's more about the app functionality.</p>
<p>As technology continues to advance, the trends related to how to test these applications will also change. </p>
<p>In this guide, we will be discussing the trends that apply to the testing of APIs, how they differ from other types of testing, tools we can leverage when it comes to testing APIs, and how you can stay on top of your game when it comes to API testing.</p>
<p>First, let's get an understanding of what we mean by APIs.</p>
<h2 id="heading-what-is-an-api">What is an API?</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/12/i50d3cqyx3ijgcla2tc4.png" alt="APIs" width="600" height="400" loading="lazy"></p>
<p>APIs are designed for developers to use. They are, in essence, a coding tool that allows your application to communicate with other applications. APIs allow you to integrate third-party applications into your work or use your own data and processes in the cloud.</p>
<p>The functionality of any application is defined by the connection it has with the outside world. For this reason, connecting your application with APIs becomes very helpful. </p>
<p>In today's development process, APIs have become an essential part in web and mobile applications. They enable communication of different components of these systems and help you access data and services.</p>
<p>A very important thing to keep in mind is that when dealing with APIs, you need to be sure everything works properly and that you get the correct feedback before integrating them into your applications. That's why testing them is essential.</p>
<p>For this reason, a vital part of testing any type of software requires evaluating whether or not there's a way the app can be broken. In order to ensure a certain level of continuity when using an API in multiple ways simultaneously, you need to conduct API testing.</p>
<p>Now that you have an understanding of what an API and why testing it is important, let's clarify what exactly might we mean by this – is there more to the term testing?</p>
<h2 id="heading-what-is-api-testing">What is API Testing?</h2>
<p>API Testing is a process that checks that an API adheres to the given 
requirements. Achieving this goal is not an easy task and there are many ways in which a tester can go about doing it effectively. </p>
<p>You can conduct API testing manually or automatically, and it is often considered a part of integration testing. </p>
<ul>
<li>Manual API testing involves directly interacting with the API using tools like <a target="_blank" href="https://www.postman.com/">Postman</a>, <a target="_blank" href="https://apitester.org/">API Tester</a> or any other available online tools. </li>
<li>Automated API testing uses specialized software to send requests to the API and then compares the results to the expected behavior.</li>
</ul>
<p>API testing is important because it helps ensure that the various components of a system are working together as expected. By verifying the functionality of the API, you can be confident that the system as a whole will function as intended.</p>
<h2 id="heading-api-testing-tools">API Testing Tools</h2>
<p>You can use API testing tools to test the functionality of an API. They can help you test the performance of an API, as well as to check for security vulnerabilities. </p>
<p>There are a number of different API testing tools available, each with its own advantages and disadvantages. Some of the most popular API testing tools include SoapUI, Postman, Runscope, and API Tester. </p>
<h2 id="heading-api-testing-principles">API Testing Principles</h2>
<p>Having a set of standard rules is the best way to ensure the quality of your APIs and their implementations. You can apply these rules during testing, coding, and development, as well as in production. </p>
<p>Here are some principles that you should keep in mind:</p>
<ol>
<li>API testing should be a part of your continuous integration and delivery pipeline.</li>
<li>API tests should be easy to maintain and write.</li>
<li>A well-designed API will make your tests easier to write.</li>
<li>You should test at the boundary of your system.</li>
<li>Keep your tests small and focused.</li>
<li>Make sure your tests are deterministic.</li>
<li>Run your tests in parallel for speed.</li>
<li>Use the available and freely accessible tools to simplify API testing. </li>
</ol>
<h2 id="heading-how-to-start-api-testing">How to Start API Testing</h2>
<p>There are many different types of tests you can perform on your APIs:</p>
<ul>
<li>Functionality tests focus on ensuring that the API is able to perform its intended functions. </li>
<li>Performance tests measure the response times of the API and check for bottlenecks. </li>
<li>Security tests assess the vulnerability of the API to attack vectors such as SQL injection and cross-site scripting (XSS). </li>
</ul>
<p>To get started with API testing, you will need to have access to an application with an exposed API. You will also need to choose a method for sending requests to the API (manual or automated), and select a tool or framework for writing your tests (if using automated testing).</p>
<p>Once you have these things set up, you can begin writing your test cases and running them against the API.</p>
<h2 id="heading-api-testing-tips">API Testing Tips</h2>
<p>API testing can be a challenge, but regardless of the tools you decide to use here are some tips that can help:</p>
<ol>
<li>Make sure you have a clear understanding of the API before you start testing. Read the documentation and any other available materials. This will help you know what to expect and how the API should work. </li>
<li>Use API testing tools: This will give you a better understanding of how the API works and make it easier to find any issues. </li>
<li>Test all aspects of the API, including input validation, error handling, and security. These are all important factors in ensuring that your API is working correctly.</li>
<li>Keep your tests up-to-date as the API changes. This will help ensure that you catch any new issues that may arise. </li>
<li>Use mobile apps for API testing. Things are changing all the time these days, where many people are working remotely, and from their phones too. By using mobile apps you can increase your productivity, become more mobile, and work from anywhere in the world. A good example of such a tool is the <a target="_blank" href="https://apitester.org/">API Tester</a>. </li>
</ol>
<p>By following these tips, you can help make sure that your API testing is effective and efficient. </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>API testing is a key part of ensuring the quality of your software. By following these highlighted rules you will be able to ensure your tests are functional, secure and have a reliable performance. </p>
<p>This will in turn help you improve the overall quality of your software applications and provide a better user experience.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ GitHub Search Tips – How to Search Issues, Repos, and More Effectively on GitHub ]]>
                </title>
                <description>
                    <![CDATA[ When I was a beginner to open-source contributions, one of my greatest challenge was finding the correct projects/issues to work on.  For the longest time I relied on resources curated by different writers on the internet (which were good, by the way... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/github-search-tips/</link>
                <guid isPermaLink="false">66b8dbc7f8e5d39507c4c131</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                    <category>
                        <![CDATA[ search ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Mon, 17 Oct 2022 19:27:10 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/10/Search--2-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>When I was a beginner to open-source contributions, one of my greatest challenge was finding the correct projects/issues to work on. </p>
<p>For the longest time I relied on resources curated by different writers on the internet (which were good, by the way). But I always wanted to find a way around this problem – a way I could search for and track projects that were right for my skill set. </p>
<p>Let's agree on one thing: unlike Google, searching GitHub is not easy. But as a developer, chances are that you'll interacting with GitHub or Gitlab on a daily basis. </p>
<p>Now the question isn't what you use these version control systems for, but how you are using them. Just like mastering Google search skills is essential for any regular internet user, I believe it's also essential for developers to learn how to effectively search GitHub.</p>
<p>In this article we are going to take a look at different techniques you can use to correctly search GitHub. You'll learn how to search through:</p>
<ul>
<li>Issues and Pull Requests</li>
<li>Repositories</li>
<li>Users</li>
<li>Topics</li>
</ul>
<p>And more. Let's get started.</p>
<h2 id="heading-github-search-queries">GitHub Search Queries</h2>
<p>In order to find detailed information about something on the internet, you need to have the correct searching skills. It's not any different with GitHub – to find detailed info you can utilize common filter, sort, and searching techniques to easily find specific issues and pull requests of a given project.</p>
<p>Even though you have multiple resources listed on the internet for different projects, the main problem comes in when you want to do a search by yourself. How do you get started? Which keywords should you use to find the correct results? </p>
<p>Most maintainers tend to label their projects with issues, which makes it easier for contributors to find suitable projects. Listed below are some of the tricks that might help you out  when you are using GitHub.</p>
<h3 id="heading-how-to-search-issues-and-pull-requests-on-github">How to Search Issues and Pull Requests on GitHub</h3>
<p>One of the most common ways of finding projects to contribute to is by searching through issues and related PRs. Here are some tricks you can use to easily find reliable answers:</p>
<ol>
<li><strong><a target="_blank" href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Abeginner&amp;type=issues">is:issue is:open label:beginner</a></strong> - This particular query will list all projects with issues that are open and labeled <code>beginner</code>.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Aeasy&amp;type=issues">is:issue is:open label:easy</a></strong> - This will list all open issues that are labeled <code>easy</code>.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Afirst-timers-only&amp;type=issues">is:issue is:open label:first-timers-only</a></strong> - This lists all open issues that welcome first-timer contributions.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Agood-first-bug&amp;type=issues">is:issue is:open label:good-first-bug</a></strong> - This lists projects with open issues labeled <code>good-first-bug</code>, to attract contributors to work on them.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&amp;type=issues">is:issue is:open label:"good first issue"</a></strong> - This will list all open issues with the label <code>good first issue</code>, meaning it is good for place for beginners to get started.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Astarter&amp;type=issues">is:issue is:open label:starter</a></strong> - This lists all open issues from across GitHub that are labeled <code>starte</code>r.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Aup-for-grabs&amp;type=issues">is:issue is:open label:up-for-grabs</a></strong> - This lists open issues that are ready to be worked on if you have the necessary skills.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=no%3Aproject+type%3Aissue+is%3Aopen&amp;type=issues">no:project type:issue is:open</a></strong> - This will list all open issues that are not assigned to a specific project.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=no%3Amilestone+type%3Aissue+is%3Aopen&amp;type=issues">no:milestone type:issue is:open</a></strong> - Many times, projects are tracked with milestones. But if you want to find issues that are not tracked, this search query will list those projects for you.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=no%3Alabel+type%3Aissue+is%3Aopen&amp;type=issues">no:label type:issue is:open</a></strong> - This lists all open issues that are not labeled.</li>
<li><strong><a target="_blank" href="https://github.com/search?q=is%3Aissue+is%3Aopen+no%3Aassignee&amp;type=issues">is:issue is:open no:assignee</a></strong> - This shows all open issues that have not yet been assigned to a person.</li>
</ol>
<h3 id="heading-how-to-search-repositories">How to Search Repositories</h3>
<p>By default, to make a search you will type the repository name in the search bar and voilà! You get some search results.</p>
<p>But the chances of you landing on the exact repo you intended are very low. </p>
<p>Let's look at some ways you can narrow down your search:</p>
<h4 id="heading-how-to-find-by-name-descriptionreadme">How to Find by Name, Description/README</h4>
<p>A thing to note when you search by Name and description of the README file is that your search phrase should begin with the <code>in</code> qualifier. This makes it possible to search "inside" what you are looking for.</p>
<p><strong>Example</strong></p>
<ul>
<li><p>Using <code>in:name</code>. Let's say you are looking for resources to learn more about Data Science. In this case, you can use the command <code>Data Science in:name</code> which will list repositories with Data Science in the repository name.</p>
</li>
<li><p>Using <code>in:description</code>. If you want to find repositories with a ceratin description, for example repositories where the term "freeCodeCamp" is included in the descriptionm, our search will be: <code>freecodecamp in:description</code></p>
</li>
<li><p>Using <code>in:readme</code>. You use this to search through a README of a file for a certain phrase. If we want to find repositories where the term freecodecamp is included in the README, our search will be: <code>freecodecamp in:readme</code>.</p>
</li>
<li><p>Using <code>in:topic</code>. You use this to find if a certain phrase or word is labeled in the topics. For example to find all repositories where freecodecamp is listed in the topic, our search will be: <code>freecodecamp in:topic</code></p>
</li>
</ul>
<p>You can also combine multiple search queries to further narrow down the search.</p>
<h4 id="heading-how-to-find-by-stars-forks">How to Find by Stars, Forks</h4>
<p>You can also search for a repository based on how many stars and forks the project has. This makes it easier for you to know how popular the project is.</p>
<p><strong>Examples</strong></p>
<ul>
<li><p>Using <code>stars:n</code>. If you search for a repository with 1000 stars, then your search query will be <code>stars:1000</code>. This will list repositories with exactly 1000 stars. </p>
</li>
<li><p>Using <code>forks:n</code>. This specifies the number of forks a repository should have. If you want find repositories that have less than 100 forks, your search will be: <code>forks:&lt;100</code>.</p>
</li>
</ul>
<p>The good thing is that you can always use relational operators like <code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code>, <code>&gt;=</code> &amp; <code>..</code> to help you further narrow your search. </p>
<h4 id="heading-how-to-find-by-language">How to Find by Language</h4>
<p>Another cool way to search through GitHub is by language. This helps you filter out repositories to a specific language.</p>
<p><strong>Example:</strong></p>
<ul>
<li>Using <code>language:LANGUAGE</code>. For example if you want to find repositories written in PHP, your search will be: <code>language:PHP</code></li>
</ul>
<h4 id="heading-how-to-find-by-organization-name">How to Find by Organization Name</h4>
<p>You can also search repositories/projects that are maintained or created by a specific organization. For this you need to begin your search with the keyword <code>org:...</code> followed by the organization name.</p>
<p>For example if you search <code>org:freecodecamp</code> it will list repositories that match freeCodeCamp.</p>
<h4 id="heading-how-to-find-by-date">How to Find by Date</h4>
<p>If you want your results based on a specific date, you can search using one of these keywords: <code>created</code>, <code>updated</code>, <code>merged</code> and <code>closed</code>. These keywords should be accompanied by date in the format <code>YYYY-MM-DD</code>.</p>
<p><strong>Example:</strong></p>
<ul>
<li>Using <code>keyword:YYYY-MM-DD</code>. Take an instance where we want to make a search of all repositories with the word freeCodeCamp that were created after 2022-10-01. Then our search will be: <code>freecodecamp created:&gt;2022-10-01</code></li>
</ul>
<p>You can also use <code>&lt;</code>, <code>&gt;</code>, <code>&gt;=</code> and <code>&lt;=</code> to search for dates after, before and on the specified date. To search within a range you can use <code>...</code>.</p>
<h4 id="heading-how-to-find-by-license">How to Find by License</h4>
<p>Licenses are very important when you are are looking for a project to contribute to. Different licenses give different rights as to what a contributor can do or can not do. </p>
<p>To make it easier for you to find projects with right licenses you need to have a good understanding of licenses. You can read more about them <a target="_blank" href="https://www.freecodecamp.org/news/how-open-source-licenses-work-and-how-to-add-them-to-your-projects-34310c3cf94/">here</a>.</p>
<p><strong>Example:</strong></p>
<ul>
<li>Using <code>license:LICENSE_KEYWORD</code>. This is a good way to search for projects with specific licenses. To search projects with the MIT license, for instance, you would do <code>license:MIT</code>.</li>
</ul>
<h4 id="heading-how-to-find-by-visibility">How to Find by Visibility</h4>
<p>You can also conduct your search in terms of the visibility of the repository. In this case you can either use public or private. This will match issues and PRs that are either in a public or private repository, respectively.</p>
<p><strong>Examples:</strong></p>
<ul>
<li>Using <code>is:public</code>. This will show a list of public repositories. Let's take an isntance where we want to search all public repositories owned by freeCodCamp. Then our search will be: <code>is:public org:freecodecamp</code>.</li>
<li>Using <code>is:private</code>. This query is meant to lists all private repositories under the given search query.</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Even though we have covered many search queries here, you can always be creative to further narrow your search by combining multiple parameters together. </p>
<p>For additional resources and more search parameters, you can always refer to the <a target="_blank" href="https://docs.github.com/en/search-github/searching-on-github">GitHub Docs</a> or make use of <a target="_blank" href="https://github.com/search/advanced?">Advanced GitHub Search</a>. These methods will always come in handy as they offer more filering options.</p>
<p>There are a ton of search parameters you can use to make your daily activity around GitHub easier. Hopefully this will help you use the platform more easily and effectively.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ OOP Meaning – What is Object-Oriented Programming? ]]>
                </title>
                <description>
                    <![CDATA[ In today's technology driven society, computer programming knowledge is in high demand. And as a developer, you'll need to know various programming languages. Over the past few decades, many programming languages have risen in popularity. You can see... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-object-oriented-programming/</link>
                <guid isPermaLink="false">66b8dc1df88daef58d10eef4</guid>
                
                    <category>
                        <![CDATA[ object oriented ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Object Oriented Programming ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Tue, 06 Sep 2022 17:15:18 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/09/OOP--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In today's technology driven society, computer programming knowledge is in high demand. And as a developer, you'll need to know various programming languages.</p>
<p>Over the past few decades, many programming languages have risen in popularity. You can see how popular languages are ranked in this real time ranking chart <a target="_blank" href="https://www.tiobe.com/tiobe-index//">here</a>. </p>
<p>While new languages are being created, existing ones are always being updated to make them better.</p>
<p>Although most programming languages have some similarities, each one has specific rules and methods which makes it unique. </p>
<p>One concept that is common among many programming languages is <strong>Object Oriented Programming</strong>.</p>
<p>When I first came across this term, it was a bit confusing. It took me some time to really understand it's importance in programming. But this also doubled as an opportunity for me to learn its key concepts, and know how important it is for a developer's career and being able to solve challenges.</p>
<p>In this article we will go over Object Oriented Programming (OOP) as a whole, without relying on a particular language. You'll learn what it is, why it's so popular as a programming paradigm, its structure, how it works, its principles, and more. </p>
<p>Let's get started.</p>
<h1 id="heading-what-is-object-oriented-programming">What is Object-Oriented Programming?</h1>
<p>If you were to conduct a fast internet search on what object-oriented programming is, you'll find that OOP is defined as a programming paradigm that relies on the concept of classes and objects.</p>
<p>Now, for a beginner, that might be a little bit confusing – but no need to worry. I will try to explain it in a simplest way possible, just like the famous phrase "Explain it to me like I'm 5".</p>
<p>Here's a brief overview of what you can achieve with OOP: you can use it to structure a software program into simple, reusable code blocks (in this case usually called classes), which you then use to create individual instances of the objects.</p>
<p>So let's find an easier definition of object-oriented programming and learn more about it.</p>
<h2 id="heading-explain-oop-like-im-5">Explain OOP Like I'm 5</h2>
<p>The word object-oriented is a combination of two terms, object and oriented. </p>
<p>The dictionary meaning of an object is "an entity that exists in the real world", and oriented means "interested in a particular kind of thing or entity".</p>
<p>In basic terms, OOP is a programming pattern that is built around objects or entities, so it's called object-oriented programming. </p>
<p>To better understand the concept, let's have a look at commonly used software programs: A good example to explain this would be the use of a printer when you are printing a document.</p>
<p>The first step is initiating the action by clicking on the print command or using keyboard shortcuts. Next you need to select your printer. Afterwards you will wait for a response telling you if the document was printed or not. </p>
<p>Behind what we can't see, the command you clicked interacts with an object (printer) to accomplish the task of printing.</p>
<p>Perhaps you might wonder, how exactly did OOP become so popular?</p>
<h1 id="heading-how-oop-became-popular">How OOP Became Popular</h1>
<p>The concepts of OOP started to surface back in the 60s with a programming language called <a target="_blank" href="https://en.wikipedia.org/wiki/Simula">Simula</a>. Even though back in the day, developers didn't completely embrace the first advances in OOP languages, the methodologies continued to evolve.</p>
<p>Fast forward to the 80s, and an editorial written by David Robinson was one of the first introductions to OOP, as many developers didn't know it existed. </p>
<p>By now languages like C++ and Eiffel had become more popular and mainstream among computer programmers. The recognition continued to grow during the 90s, and with the arrival of Java, OOP attracted a huge following.</p>
<p>In 2002 in conjunction with the release of the .NET Framework, Microsoft introduced a brand new OOP language called C# – which is often described as the most powerful programming language</p>
<p>It's interesting that, generations later, the concept of organizing your code into meaningful objects that model the parts of your problem continues to puzzle programmers. </p>
<p>Many folks who haven't any idea how a computer works find the thought of object-oriented programming quite natural. In contrast, many folks who have experience with computers initially think there's something strange about object oriented systems. </p>
<h1 id="heading-structure-of-oop">Structure of OOP</h1>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/09/OOP.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Imagine that you are running a pet shop, with lots of different breeds and you have to keep track of the names, age, days attended to, and other common upkeep details. How would you design reusable software to handle this? </p>
<p>Keep in mind we have many breeds, so writing code for each would be tiresome. But we can group related information together so that we can produce shorter and more reusable code. </p>
<p>That's where the building blocks come in to help us do this by using <strong>Classes, Objects, Methods</strong> and <strong>Attributes</strong>.</p>
<p>Let's take a deep dive and understand what exactly these building blocks are:</p>
<ul>
<li><p><strong>Classes</strong> - these are user-defined data types that act as the blueprint for objects, attributes, and methods. </p>
</li>
<li><p><strong>Objects</strong> - These are instances of a class with specifically defined data. When a class is defined initially, the description is the only object that is defined. </p>
</li>
<li><p><strong>Methods</strong> - These are functions that are defined inside a class that describe the behavior of an object. They are useful for re-usability or keeping functionality encapsulated inside one object at a time. Code re-usability is a great benefit when debugging.</p>
</li>
<li><p><strong>Attributes</strong> - These are defined in the class template and represent the state of an object. Objects contain data stored in the attribute field.</p>
</li>
</ul>
<h1 id="heading-principles-of-oop">Principles of OOP</h1>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/10/Creative-Business-Template-Presentation--2-.png" alt="OOP" width="600" height="400" loading="lazy"></p>
<p>In order for us to know how to write good OOP code, we need to understand the 4 pillars of OOP we should adhere to: </p>
<ul>
<li>Encapsulation</li>
<li>Abstraction</li>
<li>Inheritance</li>
<li>Polymorphism</li>
</ul>
<p>Let's dive in and better understand what exactly each of these mean.</p>
<h2 id="heading-encapsulation">Encapsulation</h2>
<p>This is the concept that binds data together. Functions manipulate the info and keep it safe. No direct access is granted to the info in case it's hidden. If you wish to gain access to the info, you need to interact with the article in charge of the info.</p>
<p>If you're employed in a company, chances are high that you've had experience with encapsulation. </p>
<p>Think about a human resources department. The human resources staff members encapsulate (hide) the data about employees. They determine how this data will be used and manipulated. Any request for the worker data or request to update the info must be routed through them.</p>
<p>By encapsulating data, you make the information of your system safer and more reliable. You're also able monitor how the information is being accessed and what operations are performed on it. This makes program maintenance easier and simplifies the debugging process. </p>
<h2 id="heading-abstraction">Abstraction</h2>
<p>Abstraction refers to using simple classes to represent complexity. Basically, we use abstraction to handle complexity by allowing the user to only see relevant and useful information. </p>
<p>A good example to explain this is driving an automatic car. When you have an automatic car and want to get from point A to point B, all you need to do is give it the destination and start the car. Then it'll drive you to your destination. </p>
<p>What you don't need to know is how the car is made, how it correctly takes and follows instructions, how the car filters out different options to find the best route, and so on. </p>
<p>The same concept is applied when constructing OOP applications. You do this by hiding details that aren't necessary for the user to see. Abstraction makes it easier and enables you to handle your projects in small, managable parts.</p>
<h2 id="heading-inheritance">Inheritance</h2>
<p>Inheritance allows classes to inherit features of other classes. As an example, you could classify all cats together as having certain common characteristics, like having four legs. Their breeds further classify them into subgroups with common attributes, like size and color.</p>
<p>You use inheritance in OOP to classify the objects in your programs per common characteristics and performance. This makes working with the objects and programming easier, because it enables you to mix general characteristics into a parent object and inherit these characteristics within the child objects.</p>
<p>For example, you'll define an employee object that defines all the overall characteristics of employees in your company. </p>
<p>You'll be able to then define a manager object that inherits the characteristics of the employee object but also adds characteristics unique to managers in your company. The manager object will automatically reflect any changes within the implementation of the employee object.</p>
<h2 id="heading-polymorphism">Polymorphism</h2>
<p>This is the power of two different objects to reply to one form. The program will determine which usage is critical for every execution of the thing from the parent class which reduces code duplication. It also allows different kinds of objects to interact with the same interface.</p>
<h2 id="heading-examples-of-oop-languages">Examples of OOP Languages</h2>
<p>Technology and programming languages are evolving all the time. We have seen the rise of may langs under the OOP category, but <strong>Simula</strong> is credited as the first OOP language. </p>
<p>Programming languages that are considered pure OOP treat everything like objects, while the others are designed primarily with some procedural process. </p>
<p><em>Examples of OOP langs:</em></p>
<ul>
<li>Scala </li>
<li>Emerald</li>
<li>Ruby</li>
<li>JADE </li>
<li>Java</li>
<li>Python</li>
<li>C++</li>
<li>JavaScript</li>
<li>Visual Basic .NET</li>
<li>PHP</li>
</ul>
<p>And many more.</p>
<h2 id="heading-benefits-of-oop">Benefits of OOP</h2>
<p>During the 70s and 80s, procedural-oriented programming languages such as C and Pascal were widely used to develop business-oriented software systems. But as the programs performed more complex business functionality and interacted with other systems, the shortcomings of structural programming methodology began to surface. </p>
<p>Because of this, many software developers turned to object-oriented methodologies and programming languages to solve the encountered problems. The benefits of using this languages included the following: </p>
<ul>
<li><p><strong>Code Re-usability</strong> - through inheritance, you can reuse code. This means a team does not have to write the same code multiple times. </p>
</li>
<li><p>Improved integration with modern operating systems. </p>
</li>
<li><p><strong>Improved Productivity</strong> - developers can construct new programs easily and quickly through the use of multiple libraries.</p>
</li>
<li><p>Polymorphism enables a single function to adapt to the class it is placed in.</p>
</li>
<li><p>Easy to upgrade, and programmers can also implement system functionalities independently.</p>
</li>
<li><p>Through <strong>Encapsulation</strong> objects can be self-contained. It also makes troubleshooting and collaboration on development easier.</p>
</li>
<li><p>By the use of encapsulation and abstraction, complex code is hidden, software maintenance is easier, and internet protocols are protected. </p>
</li>
</ul>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>Today, most languages allow developers to mix programming paradigms. This is often because they will be used for various programming methods. </p>
<p>For instance, take JavaScript – you can use it for both OOP and functional programming. When you're coding object-oriented JS, you have to think carefully about the structure of the program and plan at the start of coding. You might do this by viewing how you'll be able to break the necessities into simple, reusable classes which will be accustomed blueprint instances of objects.</p>
<p>Developers working with OOP typically agree that in general, using it allows for better data structures and re-usability of code. This saves time in the long term.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Top Benefits of a Student Email Address ]]>
                </title>
                <description>
                    <![CDATA[ In recent years, various tech companies and organizations have started supporting students who have an interest in and passion for tech.  Many companies give their premium services to students for free, and others offer discounts on their products.  ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/top-benefits-of-student-email-address/</link>
                <guid isPermaLink="false">66b8dc030a89d796f29a16d7</guid>
                
                    <category>
                        <![CDATA[ Education Technology, ]]>
                    </category>
                
                    <category>
                        <![CDATA[ higher education ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Students ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Wed, 30 Mar 2022 17:00:46 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/03/Creative-Business-Template-Presentation--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In recent years, various tech companies and organizations have started supporting students who have an interest in and passion for tech. </p>
<p>Many companies give their premium services to students for free, and others offer discounts on their products. </p>
<p>If you're a student, basically all you need to take advantage of these discounts and offers is your student email.</p>
<p>Having a student email will come in handy especially if you can't afford expensive products or premium services. In this article I'll give you a run down of the benefits that are withing your .edu email and how to get access to them to help you in your education and career.</p>
<p>Some of the general benefits include:</p>
<ul>
<li>Free access to online educational courses</li>
<li>Free access to content and streaming tools.</li>
<li>Free software.</li>
<li>Access to premium entertainment services.</li>
<li>Access to graphic design tools.</li>
<li>Access to discounts on products.</li>
</ul>
<p>Let's get started.</p>
<blockquote>
<p>Education is the passport to the future, for tomorrow belongs to those who prepare for it today. – Malcolm X</p>
</blockquote>
<h2 id="heading-1-github-student-developer-pack">1. GitHub Student Developer Pack</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/0001-22243319072--1-.png" alt="GitHub Student Pack" width="600" height="400" loading="lazy"></p>
<p>To begin with at the top of the list is one of my all time favorite packs with tons of deals in it. </p>
<p>In order for you to qualify for this deal, you must:</p>
<ul>
<li>Be in school, enrolled in either a degree or a diploma program.</li>
<li>Have a verifiable school-issued email address.</li>
<li>Have a GitHub account.</li>
<li>Be at least 13 years old.</li>
</ul>
<p>Now depending on the different companies that have partnered with Google for this particular program, terms and condition may vary and some point the service may not exist in every region. But for now you will still be able to get a majority of the benefits.</p>
<p>Some of the companies that have partnered with GitHub for this particular program include: Canva, DigitalOcean, namecheap, educative, datacamp, Drovio and others.</p>
<p>Benefits offered by these companies range from access to production tools, credit cards, and even hosting services. This means that as a total beginner you can get:</p>
<ul>
<li>free access to premium learning materials.</li>
<li>free design tools.</li>
<li>free domain names for one year.</li>
<li>free hosting plans with credit from organizations like Microsoft and  DigitalOcean.</li>
<li>Access to streaming platforms</li>
</ul>
<p>...just to mention a few.</p>
<p>If you haven't yet gotten your pack, Check out the <a target="_blank" href="https://education.github.com/pack/offers">GitHub education page</a> and get your own share of these amazing resources.</p>
<h2 id="heading-2-figma-for-students">2. Figma for Students</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/figma.png" alt="figma" width="600" height="400" loading="lazy"></p>
<p>Even though Figma is freely accessible to anyone on the internet, it does have a proffessional plan. This gives you extra benefits like:</p>
<ul>
<li>being able to create private projects</li>
<li>being able to work with teams without limits</li>
<li>being able to share private prototypes with clients and also get access to the audio conversion feature.</li>
</ul>
<p>Now, in order for you to be eligible for this plan, you need to be at least 13 years old and a student. </p>
<p>An important thing to note is that, when you apply you will be required to provide some proof like: your school name, school website, and a valid .edu email. Once you've done this your verification process for the plan will begin.</p>
<p>Once approved, your education status will be valid for two years. If you are still a student at the end of the two years, you can reapply for education status again.</p>
<p>To get access to this, check out the <a target="_blank" href="https://www.figma.com/education/apply">Figma for students and educators page</a>.</p>
<h2 id="heading-3-office-365-education">3. Office 365 Education</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/Office-365-Education-PAck.png" alt="Office-365-Education-PAck" width="600" height="400" loading="lazy"></p>
<p>You've likely used some Microsoft product either for school or a personal project. And all of them require a product activation key in order to use them – which means you need to buy it.</p>
<p>But with a .edu email, you are able to get some of these products at no charge. I am talking about products like Microsoft Teams, Office on the web, OneDrive, content creation tools, and desktop apps like word, Excel and PowerPoint.</p>
<p>To get started all you are required to have is a school email. To get access to this plan, check the <a target="_blank" href="https://www.figma.com/education/apply">Office 365 Education page</a>.</p>
<h2 id="heading-4-microsoft-azure-for-students">4. Microsoft Azure for Students</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/0001-22243579004.png" alt="Azure" width="600" height="400" loading="lazy"></p>
<p>Azure is a cloud platform with more than 200 products and cloud services designed to help you bring new solutions to life — and to solve today’s challenges and create the future.</p>
<p>With the Microsoft Azure for Students pack, you will be able to get resources to help you build, run, and manage applications across multiple clouds, on-premise, and at the edge, with the tools and frameworks of your choice.</p>
<p>Azure has two programs running for students:</p>
<h3 id="heading-azure-for-students">Azure for Students</h3>
<p>This pack will get you a $100 credit valid for 12 months and more than 25 free services.
To be eligible for this pack, you must:</p>
<ul>
<li>be 18 years of age or older.</li>
<li>Attend an accredited degree granting institution.</li>
<li>Be a full-time student.</li>
<li>And finally, verify your academic status through your organization's email address.</li>
</ul>
<h3 id="heading-azure-for-student-starter">Azure for Student Starter</h3>
<p>This is different since you don't get as much compared to the former. With Azure Students Starter, you will be able to get started with the Azure products you need to develop in the cloud. </p>
<p>This benefit provides you access to a free tier of services like: Azure App Service, Azure Functions, Azure Notification Hubs, Azure Database for MySQL, and others.</p>
<p>This pack is available to verified students at no cost and without any limit. To be eligible, you must be:</p>
<ul>
<li>age 13 or older if in USA and age 16 if outside the USA.</li>
<li>You must verify your academic status through your organization's email address.</li>
</ul>
<p>To get access to these plans, check the <a target="_blank" href="https://azure.microsoft.com/en-us/free/students/">Azure for Students page</a>.</p>
<h2 id="heading-5-roboform">5. RoboForm</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/roboform.png" alt="roboform" width="600" height="400" loading="lazy"></p>
<p>As a developer (or anyone using the internet, really), having a secure way to store your passwords is essential. Much of the work you do will be online, so internet security is very important.</p>
<p>Because of this, it helps to have a service that will allow you to keep track of your passwords without having to memorize them.</p>
<p>Most companies do charge for password management services, but with a .edu email you can get the service from Robo for 1 year. Your student email will help you get premium features such as:</p>
<ul>
<li>Syncing across all your devices</li>
<li>Cloud backup</li>
<li>Two Factor Authentication</li>
<li>Secure Shared Folder</li>
<li>Web access</li>
</ul>
<p>To get started, check out the official <a target="_blank" href="https://www.roboform.com/promotions/college">RoboForm site</a>.</p>
<h2 id="heading-6-autodesk">6. Autodesk</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/auto.png" alt="auto" width="600" height="400" loading="lazy"></p>
<p>Autodesk is a global leader in design and they make technology dedicated to preparing the next generation of tinkerers, makers, designers, engineers, and revolutionizers to lead in the Future of Work.</p>
<p>If you are a student studying any of these fields, you'll likely encounter AutoCAD in your studies. Well, thankfully with a student email, you can get access to more resources. </p>
<p>Once you've registered and provide proof that you're a student, the subscription will remain free as long as you are eligible.</p>
<p>To get tarted with Autodesk, check the registration <a target="_blank" href="https://bit.ly/3LibREF">Autodesk educational products page</a>.</p>
<p><strong>Other Student Packs include</strong></p>
<ul>
<li><a target="_blank" href="https://aws.amazon.com/education/awseducate/">AWS Educate</a></li>
<li><a target="_blank" href="https://www.adobe.com/creativecloud/buy/students.html">Adobe creative cloud</a></li>
<li><a target="_blank" href="https://www.squarespace.com/students/">SquareSpace</a></li>
<li><a target="_blank" href="https://www.amazon.com/Amazon-Student/b/ref=as_li_ss_tl?node=668781011&amp;linkCode=sl2&amp;tag=studentoffer0-20&amp;linkId=ca96e394eba73f0c93caccc13dd00a80&amp;language=en_US">Amazon Prime Student</a></li>
<li><a target="_blank" href="https://www.spotify.com/in-en/student/">Spotify Premium Student</a></li>
<li><a target="_blank" href="https://www.hp.com/in-en/shop/students/about-the-program">HP Student Store</a></li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>One difficult part of being in college is being able to get access to all the right learning materials. But with your school email you are able to cut down the costs for these services.</p>
<p>I hope this article helps you manage and get access to useful resources that will help you in your career.</p>
<p>I appreciate your time reading.
Enjoy Coding ❤.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python Project Ideas to Improve Your Résumé ]]>
                </title>
                <description>
                    <![CDATA[ Every project is an opportunity to learn – to figure out problems and challenges, and to invent and reinvent.  And as a developer, working on projects can improve not only your skills but also your résumé – which can increase your chances of getting ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/python-project-ideas-to-improve-your-resume/</link>
                <guid isPermaLink="false">66b8dbf7b16665d8febd7f51</guid>
                
                    <category>
                        <![CDATA[ Job Hunting ]]>
                    </category>
                
                    <category>
                        <![CDATA[ projects ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ resume ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Tue, 08 Mar 2022 23:34:04 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/02/Creative-Business-Template-Presentation.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Every project is an opportunity to learn – to figure out problems and challenges, and to invent and reinvent. </p>
<p>And as a developer, working on projects can improve not only your skills but also your résumé – which can increase your chances of getting that dream job.</p>
<p>Have you ever come across a job description that requires candidates to have a certain numbers of years of experience? I have – actually almost every job advert that I come across. These job descriptions can lower your self-esteem and make you feel underqualified, especially if you're a fresh graduate or just learning to code.</p>
<p>So, what happens when you don't have any work experience in the tech industry and you want to apply for a job? Well, the answer is simple – your portfolio is everything. You just have to use your past projects (and maybe build some new ones) to help you stand out.</p>
<p>In this guide, we will go through how to use experience from your projects to help you with your job applications. Our focus will be on some of the major Python projects that can help boost your résumé in a job environment.</p>
<h2 id="heading-why-build-projects-in-python">Why Build Projects in Python?</h2>
<p>You can use Python in many ways, including software and web development, machine learning, data analytics, and more. Knowing Python is a valuable skill for a coder. But if you're new to coding, it can be difficult to demonstrate your expertise on a résumé when you are applying for jobs. </p>
<p>Completing Python projects that you can clearly describe and that a hiring manager can look at is a great way to showcase your skills</p>
<p>If you aren’t sure how to write a résumé or your résumé needs a complete revamp, there are multiple resources online to help you out:</p>
<ul>
<li>Here's a handy <a target="_blank" href="https://www.jobseeker.com/en/resume">resume template</a> where you can easily input your details and add your Python projects as you complete them</li>
<li>Here's a guide on <a target="_blank" href="https://www.freecodecamp.org/news/how-to-write-a-resume-with-example/">How to Write a Résumé – Practical Guide with Example Résumé</a> </li>
</ul>
<p>Now, here are some ideas for Python projects that you can showcase on your résumé.</p>
<h2 id="heading-python-project-ideas">Python Project Ideas</h2>
<h2 id="heading-1-server-status-checker">1. Server Status Checker</h2>
<p>A server status checker is a script that will let you monitor if your server is active and running. It can show you how much downtime your server has had and give you regular updates of its performance. It'll also send immediate alerts when server is down. </p>
<p>Some of the tools that come in handy when developing such a script include:</p>
<ul>
<li>Socket - helps with connection to different servers.</li>
<li>SSL - required for wrapping the socket connection.</li>
<li>Date &amp; Time - Check what time server is active or went down.</li>
<li>smtplib - Send email alerts when the server is down.</li>
<li>Pickle - Saves the history of the server perfomance. </li>
</ul>
<p>To give you an idea how to get started with such a project, <a target="_blank" href="https://github.com/larymak/Python-project-Scripts/tree/main/ServerChecker">here's</a> some info to get you started.</p>
<h2 id="heading-2-url-shortener">2. URL Shortener</h2>
<p>A URL shortener is a program that takes long URLs and converts them into shorter ones that users can easily remember. Some of the the most common sites offering such services include Bit.ly and Cuttly.</p>
<p>This is a functional, useful tool that a hiring manager can easily test out in order to verify your Python skills such as use of APIs. </p>
<p>Although there are many such tools out there already, you can build one that offers a specific feature like customizable short URLs. </p>
<p>Almost everyone has come across a long, clunky URL that isn’t user-friendly or easy to remember, so creating a URL shortener shows that you can identify common problems and engineer a solution.</p>
<p>To help you get started with the idea and concept check out this repo <a target="_blank" href="https://github.com/larymak/Python-project-Scripts/tree/main/CONVERSION%20SCRIPTS/ShortenLinks">here</a>.</p>
<h2 id="heading-3-content-aggregator">3. Content Aggregator</h2>
<p>This is a tool that gathers information such as articles, social media posts, videos, images and so on. Then it displays all that information under one page. This means that users don’t have to manually search each website for what they are looking for.</p>
<p>Creating one is another good way to showcase how you can use your Python expertise to create a useful tool. Content aggregators can be used for many purposes, but they essentially search large swaths of the internet to find specific pieces of information.  </p>
<p>You could develop a general content aggregator or a more specialized one. For example, you might create a weather aggregator that pulls weather data from several of the top sources in your region to present a comprehensive weather report. </p>
<p>Working on a project like this you should be comforatble with concepts like:</p>
<ul>
<li>Python Basics</li>
<li>How to make use of virtual environments</li>
<li>Django fundamentals</li>
<li>Basics of HTML, CSS and JS</li>
</ul>
<h2 id="heading-4-desktop-assistant">4. Desktop Assistant</h2>
<p>When speaking about an assistant, think about Alexa, Siri and Google's virtual assistant. Lately there have been a rise in development of smart assistants, take a look at your favorite website chances are very high it has a bot that answers common question asked regularly.</p>
<p>Some common tasks that can be handled in your local machine with the help of an assistant include:</p>
<ul>
<li>Open and close any application on your system. </li>
<li>Search anything on Google, Youtube, Wikipedia and so on</li>
<li>Get weather updates for any location asked.</li>
<li>Tell current time &amp; date</li>
<li>Give calendar reminders on upcoming events. </li>
<li>Send email through voice commands. </li>
<li>Play or Stop music in our system. </li>
<li>Solve any algebraic and mathematical problems. </li>
<li>Restart, Sleep or Shut Down the system.</li>
</ul>
<p>In order to build a desktop assistant, you might need some modules to help out. Some of the key ones include: Pyttsx3, Speech Recognition, Twilio, Subprocesses, Wikipedia, and a web browser.</p>
<p>A desktop assistant can perform a single task or a variety of tasks, depending on the complexity of your coding. The more advanced your assistant is, the more impressive it will be to potential employers.</p>
<p>Speaking from experience, this can be a really amazing project to work on. Although I wasn't able to explore more functionalities, check out my idea for a <a target="_blank" href="https://github.com/larymak/VirtualAssistant">Desktop Assistant</a> and implement more by adding your own ideas for features.</p>
<h2 id="heading-5-task-automator">5. Task Automator</h2>
<p>A task automator can be similar to a desktop assistant. But it can also be more specialized for specific tasks. To give an idea of how developers utilize Pytho,n here are some of the most common automations:</p>
<ul>
<li>Performing automated market tasks</li>
<li>Sending out, replying to, and sorting emails</li>
<li>Filling out PDFs and Excel files</li>
<li>Converting images, renaming files</li>
<li>Performing math equations</li>
<li>Calculating exchange rates</li>
</ul>
<p>You can use Python to do alot of more tasks, too – just think of the tasks you do on daily basis, not only on your computer but at home too. You just have to figure out the correct tools you’ll need, and how to write and run the script.</p>
<p>When we talk of tools, since Python is an open-source language, it means we have a ton of tools at our disposal, as well as many libraries and frameworks to help us get started. Some great tools that can help you out include:</p>
<ul>
<li>Selenium</li>
<li>Beautiful Soup</li>
<li>SMTPlib</li>
</ul>
<p>A good resource to help out in the automation journey is the amazing book on how to <a target="_blank" href="https://automatetheboringstuff.com/">Automate the Boring Stuff with Python</a>. It is a practical guide on how to use various programming tools.</p>
<p>Again, the more unique and advanced your task automator is, the more impressive it will be.</p>
<h2 id="heading-6-games-or-apps">6. Games or Apps</h2>
<p>Python has many libraries available to help you build games, as well as cross-platform libraries for creating Android and iOS apps. Some of the common game library include Pygame, Pyglet, Panda3D, Pykyra, Ursina Engine, and many more.</p>
<p>Both games and apps can range from very simple to highly sophisticated, and creating either one can be a great way to display your personality, creativity, and Python skills.</p>
<p>If you want to be able to develop projects on this scope, you will need to make use of some Python modules and libraries. The most common ones include:</p>
<ul>
<li>Kivy - It is the most evaluated module for developing mobile applications using Python.</li>
<li>Game development modules like <em>Pygame, PyKyra, Pyglet, PyOpenGL</em> and others.</li>
</ul>
<p>Some skills you will be able to demonstrate after building this project include: mobile app programming and development, UI/UX, &amp; API</p>
<p>To help you get started with this idea, here is a link to some of the most common games developed with python: <a target="_blank" href="https://github.com/larymak/Python-project-Scripts/tree/main/GAMES">Python Games</a>.</p>
<h2 id="heading-7-algorithmic-trader">7. Algorithmic Trader</h2>
<p>Algorithmic or Algo traders can not only showcase your Python skills, but they can also make you money - if you write a good script, that is. </p>
<p>This is a more advanced project that will likely not be suitable for beginner coders. You’ll need to write a script that analyzes past and present stock values, and uses machine learning to predict future values. </p>
<p>Then, your trader will automatically buy or sell shares based on those predictions.</p>
<p>In order to work on such a project, getting comfortable with Python and some of it's major topics like Data Structures and Object-Oriented Programming will be necessity. Also knowing how to use external libraries like Pandas, NumPy, and SciPy will be helpful. </p>
<p>To help you get started with this knowledge, check out this course, <a target="_blank" href="https://www.freecodecamp.org/news/algorithmic-trading-using-python-course/">Algorithmic Trading Using Python</a> (and it includes some sample repos as well.</p>
<h2 id="heading-8-sudoku-solver">8. Sudoku Solver</h2>
<p>A sudoku solver is another project that’s easy for a hiring manager to see and test. While of course the intent of sudoku puzzles is for users to solve them with brainpower, an automated sudoku solver demonstrates your thorough command of Python.</p>
<p>To work on this particular kind of project, being comfortable working with Python algorithms is really essential. These include: </p>
<ul>
<li>list comprehension</li>
<li>recursion</li>
<li>indexing and how to make use of loops. </li>
</ul>
<h2 id="heading-9-file-manager">9. File Manager</h2>
<p>Another good project idea is to code a file manager that renames or organizes files, archives unused files, or otherwise automates tedious file management tasks. </p>
<p>This type of project is fairly easy, and it can be a good way to get started in Python.</p>
<p>Working with files and documents can vary with different projects, so you can build different scripts, like: </p>
<ul>
<li>A script to <a target="_blank" href="https://github.com/larymak/Python-project-Scripts/tree/main/AUTOMATION/AutoMoveFiles">Auto Move Files</a>, </li>
<li>A script that will enable you to get <a target="_blank" href="https://github.com/larymak/Python-project-Scripts/tree/main/AUTOMATION/Getting%20Files%20and%20Folders%20sizes">folder/file sizes</a>,</li>
<li>A script to <a target="_blank" href="https://github.com/larymak/Python-project-Scripts/tree/main/AUTOMATION/Remove%20Duplicate%20Files%20in%20Folder">Delete duplicate files</a> </li>
</ul>
<p>To develop this kind of project, here are some of the modules you should know and keep in mind:</p>
<ul>
<li>Tkinter</li>
<li>Shutil</li>
<li>Os</li>
<li>easygui</li>
<li>Filedialog</li>
<li>Imageio</li>
</ul>
<p>So there are some ideas to get you started.</p>
<p>Below is a Twitter thread with more projects ideas that you can work on that will help boost your résumé:</p>
<div class="embed-wrapper">
        <blockquote class="twitter-tweet">
          <a href="https://twitter.com/larymak1/status/1495642792340692994"></a>
        </blockquote>
        <script defer="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
<h2 id="heading-how-to-list-python-projects-on-your-resume">How To List Python Projects On Your Résumé</h2>
<p>Now that you’ve got some ideas for Python projects to add to your résumé, here’s how to actually list them effectively.</p>
<p>If you are a freelance developer or you are just getting started in the industry, you may find that it’s more effective to use a functional résumé rather than a chronological format. </p>
<p>Functional résumés are more focused on your specific skills and projects rather than your employment history. </p>
<p>To use a functional résumé, replace the work experience section with a projects section. You can break it up further into subsections if you have some professional projects as well as some personal projects. </p>
<p>Give each project a name, list the duration, and include technologies that you used to complete it. Under each entry, use bullet points to describe the project in more detail, outline your specific contributions, and summarize the purpose of the project.</p>
<p>If you have some professional experience as a coder but you also want to list your personal projects, you may wish to stick with a chronological résumé format that lists your work experience at the top, followed by your education, skills, and certifications. </p>
<p>Then, you can include a projects section later on in your résumé to highlight the Python projects that you’ve done outside of work.</p>
<p>You can also reinforce your Python expertise by mentioning it in your résumé summary or objective as well as in your skills section.</p>
<p>Here is a sample to show you how to present a résumé if you're a fresh graduate from school:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/Professional-Software-Engineer-Resume.png" alt="Professional-Software-Engineer-Resume" width="600" height="400" loading="lazy"></p>
<h2 id="heading-wrap-up">Wrap Up</h2>
<p>It is important to remember that a project will be more successful if it communicates what it is supposed to communicate. </p>
<p>Whenever you work on one give it your all dedication. If you found one of these project ideas interesting, feel free to give it a try and you'll have a nice new addition to your résumé.</p>
<p>I appreciate your time reading.
Enjoy Coding ❤.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
