<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: IONOS</title>
    <description>The latest articles on DEV Community by IONOS (@ionos).</description>
    <link>https://dev.to/ionos</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4914%2F0654f7bd-b34a-443a-8527-51ab82196fb8.png</url>
      <title>DEV Community: IONOS</title>
      <link>https://dev.to/ionos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ionos"/>
    <language>en</language>
    <item>
      <title>Why clean code makes JavaScript programming easier</title>
      <dc:creator>Chas Richards</dc:creator>
      <pubDate>Tue, 16 Jan 2024 15:06:56 +0000</pubDate>
      <link>https://dev.to/ionos/why-clean-code-makes-javascript-programming-easier-25cp</link>
      <guid>https://dev.to/ionos/why-clean-code-makes-javascript-programming-easier-25cp</guid>
      <description>&lt;h3&gt;
  
  
  From the perspective of a Frontend Developer
&lt;/h3&gt;

&lt;p&gt;I am a qualified Frontend Developer and work at IONOS as Community Relations Manager, where I am responsible for Developer Relations. For years, I have been observing that the topic of clean code is becoming relevant again and again, which is why I am sharing the experiences I have had with it.&lt;/p&gt;

&lt;p&gt;JavaScript is one of the most popular programming languages in the world, and for me as a Frontend Developer, JavaScript has become indispensable. The scripting language, which is often associated with interactive websites, makes it possible to create dynamic websites, control user interactions and develop modern web applications.&lt;/p&gt;

&lt;p&gt;Anyone who has worked with this programming language knows how important it is to be able to understand your own code or the code of others. For me, writing so-called clean code is therefore an essential skill that you should master. At the latest at the next code review or for a new project with a new development team, the question will come up at some point: What does clean code actually mean to you?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is clean code important to me?&lt;/strong&gt;&lt;br&gt;
After more than 5 years of working from home, I have personally realized how important clean code is in a software project. Short-term agreements within a team are becoming more and more complex, as the daily routine is characterized by more meetings due to physical separation. Pair programming with a face-to-face exchange is taking place less and less frequently, and code reviews are also shorter and reduced to the essentials. Whereas face-to-face meetings can sometimes go into more detail and provide further impulses.&lt;/p&gt;
&lt;h2&gt;
  
  
  My criteria for clean code
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Readability and comprehension
&lt;/h3&gt;

&lt;p&gt;Clean code is particularly important when it comes to the &lt;strong&gt;readability&lt;/strong&gt; and &lt;strong&gt;comprehensibility&lt;/strong&gt; of the code. If I work in a team, I have to make sure that my code is readable and understandable for all team members so that collaboration can work smoothly. There’s nothing worse than when the next code review only raises questions about the code you’ve written.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example: Meaningful and readable variables&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;❌ Difficult&lt;/p&gt;

&lt;p&gt;“foo”, for example, is often used as a placeholder in programming if you don’t have a suitable variable name to hand. Make sure you avoid this at the productive level.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const foo = moment().format('DD.MM.YYYY');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Better&lt;/p&gt;

&lt;p&gt;Use names that are meaningful and that people know immediately what they are talking about. Programming languages are international, so everyone should be able to read your code, so make sure you use English words for your variables. This applies not only to variables, but also to functions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const CURRENT_DATE = moment().format('DD.MM.YYYY');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Maintainability
&lt;/h3&gt;

&lt;p&gt;Another point is the &lt;strong&gt;maintainability&lt;/strong&gt; of my written code. The more complex the code, the more time-consuming maintainability becomes, as it becomes more difficult to identify and rectify errors. If the requirements change, it is also guaranteed that every team member can find and change the part to be changed more quickly. Maintainability is essential for large projects. Due to the large amount of source code, you can quickly lose track of things and no longer find your way around your own code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example: Searchable variable names&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;❌ Difficult&lt;/p&gt;

&lt;p&gt;In this example, it is not clear what this high number means. Make sure you give it a searchable name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;setInterval(close, 86400000);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Better&lt;/p&gt;

&lt;p&gt;Constants, in this case “const”, allow you to assign fixed and non-overwritable variables. Perfect for the fixed milliseconds per day. These constants are always capitalized and written in snake case. Always name them so that you can find them again in the future.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const MILLISECONDS_PER_DAY = 86400000;
setInterval(close, MILLISECONDS_PER_DAY);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example: Array methods&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;❌ Difficult&lt;/p&gt;

&lt;p&gt;In my opinion, the For loop is one of the most frequently used functions in JavaScript and, as you can see from its structure, it is also very error-prone. In addition, the For loop also returns the empty fields in an array. This can lead to confusion, as you always have to check carefully that no errors have occurred during iteration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const studentsGrades = [3, , 1, 2, , 2, 5];

for (i = 0; i &amp;lt; studentsGrades.length; i++) {
  console.log(studentsGrades[i]);
}

//Output: 3, undefined, 1, 2, undefined, 2, 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Better&lt;/p&gt;

&lt;p&gt;If you use the predefined array methods, the “forEach” function is the best choice for the same example. This shortens the regular For loop and also automatically does not output the empty fields. The readability of the code also plays a very important role here.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const studentsGrades = [3, , 1, 2, , 2, 5];

studentsGrades.forEach((studentGrade) =&amp;gt; {
  console.log(studentGrade);
});

//Output: 3, 1, 2, 2, 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Professionalism
&lt;/h3&gt;

&lt;p&gt;In my opinion, writing clean code also demonstrates &lt;strong&gt;professionalism&lt;/strong&gt;. Those who value high quality also show this in their code and at the same time take care of high-quality software. Clean code therefore also acts as a business card.&lt;/p&gt;

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

&lt;p&gt;Writing clean code not only helps you, but also your team and is essential for every software developer. The examples above are based on my experience and are only intended as a guide. It is only a fraction of what is possible with clean code.&lt;/p&gt;

&lt;p&gt;Writing clean code should not be a one-time process. You should want to continuously improve and simplify your code so that it always remains readable and maintainable. The more often you deal with the topic, the better and faster you will write your code in the future and the easier it will be to collaborate with your team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further links:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ryanmcdermott/clean-code-javascript"&gt;Further examples of clean code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://khalilstemmler.com/blogs/camel-case-snake-case-pascal-case/"&gt;Further information on camelCase vs. Snake_Case vs. PascalCase&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>cleancode</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Incorporate GitHub and CI/CD Deployments into Your Web Agency's Workflow</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Tue, 18 Apr 2023 10:34:43 +0000</pubDate>
      <link>https://dev.to/ionos/how-to-incorporate-github-and-cicd-deployments-into-your-web-agencys-workflow-lcg</link>
      <guid>https://dev.to/ionos/how-to-incorporate-github-and-cicd-deployments-into-your-web-agencys-workflow-lcg</guid>
      <description>&lt;p&gt;As a Product Owner for Deploy Now, I've interviewed many agencies. Roughly half of them use tools like GitHub to collaborate on their code. A minority works with CI/CD pipelines. Why? Well, because they don't necessarily need to. The average client project is relatively small: Maybe a landing page with a blog section. A single developer can easily develop the project locally to then upload it via SSH for a final check by the client. Bringing new skills to the team and automating processes is an investment. As a smaller agency, you need to decide whether working on another client project instead would be the wiser decision. &lt;/p&gt;

&lt;p&gt;However, I strongly believe that an investment into GitHub and CI/CD team workflows can be a game changer for your agency. There is a whole world to explore for your team. You will likely see efficiency, code quality and client satisfaction will increase already after a couple of weeks. GitHub and CI/CD are growing ecosystems with more and more tools that lower the hurdles of working with them.&lt;/p&gt;

&lt;p&gt;If you decide to go down this route with your agency, I would suggest you take the following steps. You can take as much time for each one as it feels right to you and your team.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Train your team in Git best practices
&lt;/h2&gt;

&lt;p&gt;Each team member that will work on code, and ideally also surrounding stakeholders like designers and writers, should be familiar with these concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Version control&lt;/li&gt;
&lt;li&gt;Local and remote repositories &lt;/li&gt;
&lt;li&gt;Branches and pull requests&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Git clone&lt;/code&gt;, &lt;code&gt;git checkout&lt;/code&gt;, &lt;code&gt;git add&lt;/code&gt;, &lt;code&gt;git commit&lt;/code&gt; and &lt;code&gt;git push&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read more in our &lt;a href="https://docs.ionos.space/blog/git-intro"&gt;comprehensive onboarding to Git&lt;/a&gt;.&lt;br&gt;
After learning these concepts, discuss with your team how you plan to apply them. Create a GitHub organization and start experimenting. &lt;/p&gt;

&lt;h2&gt;
  
  
  2. Build up a set of sample repos
&lt;/h2&gt;

&lt;p&gt;No one starts each client project from scratch. No matter which tech stack you work with, you will find countless repositories with sample code in GitHub. So it's worth looking around for reusable parts for your client projects. Of course, always check for potential copyright violations and code quality. &lt;/p&gt;

&lt;p&gt;You might end up maintaining a set of repositories for different use cases such as landing pages, blogs, shops or portals in your GitHub organization. These serve as great starting points you can clone for new projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Set up the first working CI/CD pipeline
&lt;/h2&gt;

&lt;p&gt;The next step is to deploy what is inside your repository. Ideally, each git push to your main branch leads to an automated &lt;em&gt;build&lt;/em&gt; and &lt;em&gt;deployment&lt;/em&gt; to some kind of infrastructure. Since you are working with GitHub already, it makes a lot of sense to let GitHub Actions take care of this. To learn more about the tool, you can read our &lt;a href="https://docs.ionos.space/blog/github-actions/"&gt;introduction to GitHub Actions&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Build and deployment steps are specified in a &lt;a href="https://docs.github.com/en/actions/using-workflows/about-workflows"&gt;yaml file&lt;/a&gt; that describes your GitHub Actions workflow. GitHub runs your build steps on their own virtual machines every time the workflow is triggered, e.g. by a &lt;code&gt;git push&lt;/code&gt;. To successfully deploy your website, you need to authenticate with some kind of infrastructure. &lt;/p&gt;

&lt;p&gt;If you are working with static site generators, single page applications or PHP Apps, &lt;a href="https://www.ionos.com/hosting/deploy-now?ar=1"&gt;Deploy Now&lt;/a&gt; can ease this process. Simply connect a repository, specify your build steps and Deploy Now will set up the workflow, hosting and TLS for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Get used to the process for some iterations
&lt;/h2&gt;

&lt;p&gt;Now, the fun part begins. Each team member can open branches, work on it locally, push changes and open a pull request to main for someone else to review. Once the pull request is accepted, you can watch your site being built, deployed and going live. &lt;/p&gt;

&lt;p&gt;This is already a pretty decent setup to work on some client projects and finetune your workflows here and there. All steps following can be viewed as optional extensions.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Add staging and automated tests to your workflow
&lt;/h2&gt;

&lt;p&gt;Even though someone now reviews code before it is merged to main, you're still not 100% sure if the code will work as expected. To mitigate this, you can add automated tests to your CI/CD workflow. I described how you can run and visualize Lighthouse tests in GitHub Actions &lt;a href="https://docs.ionos.space/blog/github-actions-lighthouse"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;However, QA processes are hard to automate completely. Staging environments give you the option to manually preview websites before they go live. If you are working with multiple branches already, why not deploy them just as you deploy your main branch? Many hosting tools such as &lt;a href="https://www.ionos.com/hosting/deploy-now?ar=1"&gt;Deploy Now&lt;/a&gt; provide an out-of-the-box feature for this without extra costs. Simply open a new branch and watch it being deployed under a preview-URL. If the website looks good, merge your changes to the main branch. Here are &lt;a href="https://docs.ionos.space/blog/reasons-for-staging/"&gt;5 reasons&lt;/a&gt; how staging processes can help your agency be more successful.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Incorporate clients in rollout processes
&lt;/h2&gt;

&lt;p&gt;Now you can make code udpates to a branch, stage it for preview, and then roll it out to production. You can do two things to make your client part of this project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Provide them with access to your staging environments, so they can review updates as well. This is especially helpful before your initial go-live. You could even use tools like &lt;a href="https://docs.github.com/en/issues"&gt;GitHub issues&lt;/a&gt; to collect client feedback right on GitHub. &lt;/li&gt;
&lt;li&gt;Send them notifications if you deploy to production. You can easily automate this in your GitHub Actions workflow, e.g. by using the &lt;a href="https://github.com/marketplace/actions/slack-send"&gt;Slack notification action&lt;/a&gt; from the GitHub Actions marketplace.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  7. Enable synergies across client projects
&lt;/h2&gt;

&lt;p&gt;We've talked about building up a set of starter repositories you can clone for new projects in step 2. But wouldn't it be great to keep re-used code centralized for similar projects, instead of distributing it to many repositories? Centralization makes it especially efficient to distribute updates to all your projects across the project lifecycle.&lt;/p&gt;

&lt;p&gt;If your projects are sufficiently similar to each other, I would suggest to maintaining their code in a single repository and use persistent files and database content to customize them. The latter would remain unaffected from new deployments. You can read &lt;a href="https://docs.ionos.space/blog/multi-deployments/"&gt;here&lt;/a&gt; how a Deploy Now user deploys from one repository to multiple environments using the &lt;a href="https://docs.ionos.space/docs/multi-deployments/"&gt;Multi Deployments feature&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I wish you and your team a lot of fun and success exploring!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>Shared Hosting vs. VPS Hosting: Which Solution is Right for Your Business?</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Tue, 28 Mar 2023 09:12:22 +0000</pubDate>
      <link>https://dev.to/ionos/shared-hosting-vs-vps-hosting-which-solution-is-right-for-your-business-496l</link>
      <guid>https://dev.to/ionos/shared-hosting-vs-vps-hosting-which-solution-is-right-for-your-business-496l</guid>
      <description>&lt;p&gt;Are you looking for a hosting solution for your website or application? One of the first things you'll need to decide is which hosting option you need: Shared hosting or VPS (Virtual Private Server) hosting. Let's discuss the differences between these two options so you can determine which solution is the perfect fit for your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Shared Hosting?
&lt;/h2&gt;

&lt;p&gt;Shared hosting is the simplest form of hosting. Multiple websites share the resources of a single web server. Your website resides on a server alongside other websites, and all the server resources, such as CPU, memory, and storage, are shared equally among all the users on that server.&lt;/p&gt;

&lt;p&gt;Shared hosting is an affordable option for hosting your website because the costs of maintaining the server are split between multiple users. Small businesses that need a simple web presence, personal websites, and blogs that only require a few resources are good candidates for shared hosting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of Shared Hosting
&lt;/h2&gt;

&lt;p&gt;Shared hosting is a cost-effective alternative for hosting your website. You can split the expenses among multiple users by sharing server space with other sites. The savings stem from a statistical pooling effect that can handle potential traffic surges. Because not all users will experience traffic spikes simultaneously,  users can obtain more resources than the total hardware divided by the number of users would suggest.&lt;/p&gt;

&lt;p&gt;Shared hosting is also easy to use. You don't need special technical skills to use shared hosting because your hosting provider handles everything. You don't need to worry about maintaining the server and updating software. Most hosts provide an up-to-date PHP version on an Apache or NGINX web server on a Linux OS. Many also offer 1-click installs for popular software like WordPress, Joomla, or TYPO3.&lt;/p&gt;

&lt;p&gt;If there are any technical issues, your hosting provider is responsible for troubleshooting the problem and providing a solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disadvantages of Shared Hosting
&lt;/h2&gt;

&lt;p&gt;When you use shared hosting, your hosting provider configures the server to handle a specific number of users and resources. If your website experiences a sudden surge in traffic or requires additional resources, the server may not be able to handle the increased demand, leading to poor website performance. Your website may even crash and go offline.&lt;/p&gt;

&lt;p&gt;Shared hosting sites lack flexibility. The resources available to your site are fixed, so if your traffic fluctuates seasonally, you can't add resources when visits to your site are high and scale back resources when your site traffic is lower.&lt;/p&gt;

&lt;p&gt;Shared hosting sites can also be vulnerable to security concerns. When multiple websites are hosted on the same server and share the same resources, there is a risk that if one website is hacked or infected with malware, the other websites on the same server could also be affected.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Virtual Private Server (VPS) Hosting?
&lt;/h2&gt;

&lt;p&gt;With Virtual Private Server (VPS) hosting, you still share a server with other users. However, the physical server is divided into multiple virtual servers, so it appears as if you have a single server devoted to hosting your site.&lt;/p&gt;

&lt;p&gt;Each virtual private server uses its own resources, its own database, and manages how resources are allocated. You can benefit from the decreased costs of sharing a server, but you maintain control over the resources your website uses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SCL8qDQs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/KdAMZEre9zBevx0UVliXAbP9BIAqgC8yz67k4Q3DcqLxwPYsBbozttp1oDt-89cP66ylMOGFVEjtSpPpnhIYC6cMve7MG9vSpn8iaXfXXo6qwavMUQnLTToPRnbEjGxJr3puYoVBlD4VDuCRoDqci4Y" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SCL8qDQs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh3.googleusercontent.com/KdAMZEre9zBevx0UVliXAbP9BIAqgC8yz67k4Q3DcqLxwPYsBbozttp1oDt-89cP66ylMOGFVEjtSpPpnhIYC6cMve7MG9vSpn8iaXfXXo6qwavMUQnLTToPRnbEjGxJr3puYoVBlD4VDuCRoDqci4Y" alt="Shared vs. VPS hosting comparison chart" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some hosting providers offer VPS Cloud Hosting, which combines the features of virtual private servers (VPS) and cloud computing. With VPS cloud hosting, the hosting provider uses multiple servers to create a virtual server network that works together to host websites and applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managed and Unmanaged VPS Hosting
&lt;/h2&gt;

&lt;p&gt;You can choose a managed or unmanaged VPS hosting plan depending on how much technical support you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With a managed VPS&lt;/strong&gt;, the hosting provider takes care of all the technical aspects of the server, including server maintenance, security, and software updates. Typically, the hosting provider handles server configurations, software installation, and troubleshooting tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With an unmanaged VPS&lt;/strong&gt;, you can fully control and customize the server according to your specific needs. However, you are also responsible for handling all technical issues and managing the server's security and maintenance.&lt;/p&gt;

&lt;p&gt;An unmanaged VPS is usually less expensive than a managed VPS because the hosting provider doesn't need to offer additional support and management services. However, effectively managing the server requires more technical knowledge and expertise.&lt;/p&gt;

&lt;p&gt;For example, if you choose an unmanaged VPS plan, your host will create your virtual machine for you. Some hosts may also offer setup support, such as installing the operating system or a server management platform, such as CPanel or Plesk. These additional services may cost an extra fee.&lt;/p&gt;

&lt;p&gt;Usually, however, the rest of the setup is up to you, including installing the operating system,  creating user accounts, setting up a firewall for your server, and installing any necessary software. You’ll also need to back up your server regularly to ensure you can restore your data if there is a system failure or some other issue.&lt;/p&gt;

&lt;p&gt;Setting up and managing an unmanaged VPS hosting account can be challenging and requires technical expertise. If you are not confident in your ability to manage your server, it may be better to consider a managed VPS hosting account, where the hosting provider takes care of server management tasks for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of VPS Hosting
&lt;/h2&gt;

&lt;p&gt;Whether you select a managed VPS or an unmanaged VPS, VPS hosting offers several advantages over shared hosting. One of the primary benefits of VPS hosting is that you don't need to share resources with other users on the same server. This means that your website or application will not be affected by the activities of other websites on the server, which can help improve performance and reliability.&lt;/p&gt;

&lt;p&gt;You have greater control over your server with VPS Hosting because you have root server access. Root server access refers to having full administrative access and control over a server. It is called "root" access because the highest level of administrative privileges on a Unix server is called the "root" user.&lt;/p&gt;

&lt;p&gt;With root access, you can access and modify any file on the server, change system settings, install new software packages, create and manage user accounts, and adjust resources.&lt;/p&gt;

&lt;p&gt;You also have greater control over your server's security settings and can implement custom security measures to protect your website or application. This can help protect your data and sensitive information from potential security breaches or attacks.&lt;/p&gt;

&lt;p&gt;Typically, sites hosted on VPS hosting have better performance than shared hosting sites since you aren't sharing resources with other users. VPS hosting also offers scalability, allowing you to quickly scale up or down your resources as needed to accommodate changes in traffic or demand. &lt;/p&gt;

&lt;h2&gt;
  
  
  Disadvantages of VPS Hosting
&lt;/h2&gt;

&lt;p&gt;While VPS (Virtual Private Server) hosting offers many benefits, there are also some potential disadvantages.&lt;/p&gt;

&lt;p&gt;VPS hosting is generally more expensive than shared hosting because it provides dedicated resources and greater control over the server environment. The higher cost can make VPS hosting a less attractive option for smaller websites or businesses with limited budgets.&lt;/p&gt;

&lt;p&gt;If you choose an unmanaged VPS hosting plan, you'll need technical knowledge to manage the server environment. You'll also be responsible for software maintenance and troubleshooting any issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Hosting Solution is Right for Your Project?
&lt;/h2&gt;

&lt;p&gt;Shared hosting is an excellent option for small businesses, personal websites, and blogs that require few resources. Shared hosting is cost-effective and easy to use, making it a good choice for users with little or no technical knowledge.&lt;/p&gt;

&lt;p&gt;On the other hand, VPS hosting is an excellent option for businesses or individuals who require more control over the server settings and configurations. If you need dedicated resources, more control over the server, and the ability to scale up or down resources based on your requirements, VPS hosting is the best option.&lt;/p&gt;

&lt;p&gt;These questions can help you determine which hosting solution is right for you.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;How much traffic do you expect your website to receive?&lt;/strong&gt; Shared hosting is generally a good solution for sites receiving less than 10,000 visitors monthly. If you expect more than 10,000 visitors each month, VPS is a better solution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How much control do you need over your server environment?&lt;/strong&gt; If you require greater control over your server settings and configurations, VPS hosting may be a better option because it offers more flexibility and customizability than shared hosting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How much technical knowledge do you have?&lt;/strong&gt; If you understand server configurations, security settings, and software management, VPS hosting may be a good fit for you. Shared or managed VPS hosting may be more user-friendly if you need more technical assistance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is your budget?&lt;/strong&gt; VPS hosting is generally more expensive than shared hosting, so you should consider your budget when deciding which option is best.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What level of security do you require?&lt;/strong&gt; If you need a higher level of security, VPS hosting may be a better option. VPS hosting offers more control over security settings and allows you to implement custom security measures. However, if security is less of a concern, shared hosting may be more cost-effective.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’re a small business with plans to grow, choosing a shared hosting plan is a cost-effective way to get your website up and running, especially if you have a limited budget. It allows you to share server resources with other users, which keeps costs low.&lt;/p&gt;

&lt;p&gt;As your business grows and your traffic increases, you may require more resources and control over your hosting environment. That’s when VPS hosting makes sense; it provides dedicated resources, more customization options, and better performance.&lt;/p&gt;

&lt;p&gt;If you choose a hosting service that offers both shared hosting and VPS hosting, you have the flexibility to start with shared hosting and then upgrade to VPS hosting when your business needs grow. This allows you to scale your hosting solution as your business grows, without having to switch hosting providers&lt;/p&gt;

&lt;p&gt;IONOS offers hosting plans to meet the needs of any size business. They offer a variety of hosting packages, from &lt;a href="https://www.ionos.com/hosting/web-hosting"&gt;shared hosting plans&lt;/a&gt; with unlimited storage and free domain registration  to &lt;a href="https://www.ionos.com/servers/vps"&gt;VPS hosting services with unlimited traffic&lt;/a&gt;. IONOS also has a &lt;a href="https://www.ionos.com/consultant"&gt;personal consultant&lt;/a&gt; to help you select the right plan for your business. Your business is always supported, no matter how big it grows. &lt;/p&gt;

&lt;p&gt;Find the &lt;a href="https://www.ionos.com/"&gt;right plan for your business&lt;/a&gt;: today and in the future.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>vps</category>
      <category>php</category>
    </item>
    <item>
      <title>Effortless Deployments: Linking one Repo to Multiple Runtimes</title>
      <dc:creator>Simon Morgan</dc:creator>
      <pubDate>Mon, 27 Feb 2023 15:51:02 +0000</pubDate>
      <link>https://dev.to/ionos/effortless-deployments-linking-one-repo-to-multiple-runtimes-12n8</link>
      <guid>https://dev.to/ionos/effortless-deployments-linking-one-repo-to-multiple-runtimes-12n8</guid>
      <description>&lt;p&gt;Do you build websites and applications for clients? &lt;/p&gt;

&lt;p&gt;Do you reuse much of your code but maintain nearly identical repositories for each production environment? &lt;/p&gt;

&lt;p&gt;If yes, then you're not alone. Many developers maintain reusable modules via separate repositories for each customer.&lt;/p&gt;

&lt;p&gt;But what if you want to make changes for all customers at once, like security fixes or new features? Updating all web spaces manually, via SSH and deploying updated files, is a huge pain.&lt;/p&gt;

&lt;p&gt;A manual approach isn't very scalable either, especially when you’re aiming to offer standardised solutions such as portals, e-commerce stores, plugins, and wikis. This is because the task of manually deploying to each production environment becomes too time-consuming as the number of deployment instances increases.&lt;/p&gt;

&lt;p&gt;The great news is, Deploy Now's new feature makes updating mass-customised modules even easier. With just one click, you can now push changes from a single code base to all production environments in a matter of seconds.&lt;/p&gt;

&lt;p&gt;Additionally, the feature provides an easy-to-use interface, giving you full visibility of the status of the deployment process and changes in the file system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cobra CRM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cobra.de"&gt;Cobra CRM&lt;/a&gt; provides CRM solutions as a service, and has recently built an events module as an extension to their core offering.&lt;/p&gt;

&lt;p&gt;"Our clients kept asking for a smart solution to organise events, be it fundraising dinners, training workshops, or annual general meetings," says Philipp Kreis, CTO at cobra. "With the new online events portal, we wanted to make it as easy and effective as possible to create, publish, and manage attendance for any type of event."&lt;/p&gt;

&lt;p&gt;To facilitate this, they chose a managed LAMP stack hosting environment capable of connecting to their GitHub repositories, where they store and manage code. They then contacted the team behind Deploy Now, the only provider that offers automated deployments of PHP projects from GitHub to an automatically provisioned web space.&lt;/p&gt;

&lt;p&gt;Philipp collaborated with the Deploy Now engineering team. They co-created a multi-deployment feature to meet cobra's specific needs. The team created the UX and technical concept, keeping Philipp in the feedback loop. Afterwards, cobra's team provided QA testing of the release candidate.&lt;/p&gt;

&lt;p&gt;With the help of Deploy Now, cobra successfully launched their events portal.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Bringing in a new instance from our side is a matter of two clicks now, allowing our clients to be up and running in no time.” -- Philipp Kreis, CTO at cobra&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Multi deployments in action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multi deployments with the latest release of Deploy Now are quick and simple. They are available for starter, static and php projects, provided that each production environment uses packages of the same type.&lt;/p&gt;

&lt;p&gt;Set up a Deploy Now project and add extra production deployments on the project page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j9PojVpt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/38buflqcb2xsm025qre6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j9PojVpt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/38buflqcb2xsm025qre6.png" alt="Deploy Now setup" width="880" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each production deployment receives its own filespace and database (php package), meaning their productive data can differ. Files that need to be kept persistent on the server can be defined in config.yaml under .deploy-now/[project-name]. The number of available staging environments will increase automatically based on the number of production deployments.&lt;/p&gt;

&lt;p&gt;To update the code in all production environments, just do one git push to the repository. The build will start and the results will be deployed to all web spaces at the same time.&lt;/p&gt;

&lt;p&gt;Give it a try!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7IjXc5M8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m1xpg88bssofvueh31zt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7IjXc5M8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m1xpg88bssofvueh31zt.gif" alt="Multi deployments in action" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>github</category>
      <category>devops</category>
      <category>php</category>
    </item>
    <item>
      <title>A Beginner Developer's Guide to APIs (with Example Project)</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Thu, 23 Feb 2023 09:24:16 +0000</pubDate>
      <link>https://dev.to/ionos/a-beginner-developers-guide-to-apis-with-example-project-2088</link>
      <guid>https://dev.to/ionos/a-beginner-developers-guide-to-apis-with-example-project-2088</guid>
      <description>&lt;p&gt;If you're a beginner developer, you may have heard of APIs, but you may want some clarification on what they are and how to use them. This article explains what an API is and why APIs are helpful. There's even a fun example to show you how to use APIs in your programming projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an API?
&lt;/h2&gt;

&lt;p&gt;An API (Application Programming Interface) allows your program to communicate and retrieve information from other software. An API interprets your request, engages the other application, and delivers a response back to your code. You can use an API to retrieve data or even implement features in your project without having to code them yourself.&lt;/p&gt;

&lt;p&gt;For example, if you're developing a stock trading app, you can use an API to retrieve the latest stock prices. Or if your project plays a video, you can use a Media Player API to control your video's display and provide all the controls, such as Pause, Fast Forward, Rewind, etc. Rather than coding all of this functionality, you can let the API handle it and move on to more critical parts of your project.&lt;/p&gt;

&lt;p&gt;An API allows you to use tools in your software project without understanding exactly how those tools work. Instead, you only need to know how to request data from the API and what data you'll receive in return.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples of APIs
&lt;/h2&gt;

&lt;p&gt;You can use APIs in many different ways. For example, you can use an API to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retrieve status updates from social media apps like Facebook and Twitter.&lt;/li&gt;
&lt;li&gt;Logging into a service with your Google account information.&lt;/li&gt;
&lt;li&gt;Provide directions using Google Maps.&lt;/li&gt;
&lt;li&gt;Displaying the weather at a specific location.&lt;/li&gt;
&lt;li&gt;Sending texts to customers.&lt;/li&gt;
&lt;li&gt;Processing credit card payments.&lt;/li&gt;
&lt;li&gt;Checking flight information.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Benefits of Using an API
&lt;/h2&gt;

&lt;p&gt;There are several benefits of using an API in your code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Access to remote data&lt;/strong&gt;. For example, a SportScore API can bring in the latest football scores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased Functionality&lt;/strong&gt;. You can offer Apple Pay to your customers with the Apple Pay API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time Saving&lt;/strong&gt;. Using the Twilio API, you can use APIs to send text messages to your customers without additional coding.&lt;/li&gt;
&lt;li&gt;**Abstraction. **Using an API allows you to take advantage of powerful functions without needing to know precisely how they work. For example, if you want to offer payment options within your app, you can use the PayPal API to handle payments instead of coding your own solution. That way, you can focus on your project's functional requirements. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Find APIs
&lt;/h2&gt;

&lt;p&gt;There are hundreds of APIs available for you to use in your projects. &lt;a href="https://apilist.fun/" rel="noopener noreferrer"&gt;API List&lt;/a&gt; is a comprehensive list of publicly available APIs and links to the documentation and other important information for each API.&lt;/p&gt;

&lt;p&gt;Many APIs require Authentication of some sort, either by using a key or login information. The API documentation will let you know what you’ll need to use the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remote APIs
&lt;/h2&gt;

&lt;p&gt;An API can be local to your machine (such as functions within your coding language). However, as you can see from the previous examples, we generally think of an API as a web-based tool used to communicate with a remote server.&lt;/p&gt;

&lt;p&gt;Remote APIs provide several benefits for your project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No need to store data locally.&lt;/strong&gt; Instead, you can use an API to search cloud databases for the information you need.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increased computational power&lt;/strong&gt;. Instead of using your local machine's processing power, your code can leverage the processing power of a remote device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remote APIs frequently follow a standard called Representational State Transfer (REST). An API that follows the REST style is called a RESTful API. Most of the APIs you'll use in your projects can be considered RESTful.&lt;/p&gt;

&lt;h2&gt;
  
  
  How RESTful APIs Work
&lt;/h2&gt;

&lt;p&gt;RESTful APIs provide the ability to work with objects over the Internet. An object is simply a data structure with a specified set of attributes. &lt;/p&gt;

&lt;p&gt;Almost any piece of information can be considered an object, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer Information&lt;/li&gt;
&lt;li&gt;Product Descriptions&lt;/li&gt;
&lt;li&gt;Images&lt;/li&gt;
&lt;li&gt;Videos&lt;/li&gt;
&lt;li&gt;Documents&lt;/li&gt;
&lt;li&gt;Weather Forecasts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RESTful APIs provide access to data via a series of endpoints. An &lt;strong&gt;endpoint&lt;/strong&gt; is a URL the API developer provides where your program can access the information it needs. &lt;/p&gt;

&lt;p&gt;When you need to retrieve data from a server via an API, you send a &lt;strong&gt;request&lt;/strong&gt; to the API via the endpoint. In turn, the API retrieves the requested information from the server and returns it to your program as a &lt;strong&gt;response&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh5.googleusercontent.com%2FHP_wZrMQTFMFdKzVGZk8Lkyw4iwRBBLaNXku9rjnfiXhH5xeYMnk8H7TzthwMBXK2TOPXImD0weBUM6nQXmLpIYUx5XXy5pWnQDapC1bBJwJgA4s1sPaaEARxpPpRxMq09PuAaHZwUsNdDmNU0qk0w" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh5.googleusercontent.com%2FHP_wZrMQTFMFdKzVGZk8Lkyw4iwRBBLaNXku9rjnfiXhH5xeYMnk8H7TzthwMBXK2TOPXImD0weBUM6nQXmLpIYUx5XXy5pWnQDapC1bBJwJgA4s1sPaaEARxpPpRxMq09PuAaHZwUsNdDmNU0qk0w" alt="HTTP request schema" width="800" height="400"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
You can use a RESTful API to retrieve object information (such as retrieving a customer’s address) or to manipulate an object (like updating a customer’s data with their new address). &lt;/p&gt;
&lt;h2&gt;
  
  
  Communicating with an API
&lt;/h2&gt;

&lt;p&gt;RESTful APIs communicate between your program and the server using HTTP (Hypertext Transfer Protocol), just like your browser does when it requests a specific URL. &lt;/p&gt;

&lt;p&gt;For instance, here's what happens when you enter a URL into your browser's address bar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your browser requests the specified URL from a server by creating an HTTP request. This request asks to GET the page from the server. The GET command indicates that the browser only receives data from the server. It won't be making any changes.&lt;/li&gt;
&lt;li&gt;The server receives the request from the client, generates the requested webpage, and sends back a response to the client containing the HTML code for the requested page.&lt;/li&gt;
&lt;li&gt;The browser then renders the page from the HTML code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh5.googleusercontent.com%2Fi66VTXaF4-NSf9a0OfWVpiCLgQ6dzaZnDAQ7z93lSSkSV7ZdRaXLfNIzKcuC29DqCsQFSise7BvVnkdWeAW8HY8EomJd-0VZ5QISJFqVI1O_5eBH5gX4XMvXOgi4-kqdP5lOUIaflJr0agfRlBJNB-I" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh5.googleusercontent.com%2Fi66VTXaF4-NSf9a0OfWVpiCLgQ6dzaZnDAQ7z93lSSkSV7ZdRaXLfNIzKcuC29DqCsQFSise7BvVnkdWeAW8HY8EomJd-0VZ5QISJFqVI1O_5eBH5gX4XMvXOgi4-kqdP5lOUIaflJr0agfRlBJNB-I" alt="HTTP communication schema" width="800" height="400"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Remote APIs work in much the same way.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your program sends a request to the API on a Server via an HTTP request.&lt;/li&gt;
&lt;li&gt;The API on the server responds with the requested data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh6.googleusercontent.com%2FujXZdctzfn-6c03MRIVD8p0PhFan-OpIOW30BTVdFjC3hrV5TIdY9imXdOrtMH_BHvwBmimExhHO8b0XSVZ7txj4604p6db527ltFevHpngbHiwsR7E9r5X2vSOpZbtWoy5wlRmjQWhdfrp5P_Sly8o" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh6.googleusercontent.com%2FujXZdctzfn-6c03MRIVD8p0PhFan-OpIOW30BTVdFjC3hrV5TIdY9imXdOrtMH_BHvwBmimExhHO8b0XSVZ7txj4604p6db527ltFevHpngbHiwsR7E9r5X2vSOpZbtWoy5wlRmjQWhdfrp5P_Sly8o" alt="HTTP communication schema" width="800" height="400"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Depending on the functionality of the API, an API can support any HTTP request, such as: GET, POST, PUT, PATCH, and DELETE.&lt;/p&gt;
&lt;h2&gt;
  
  
  How API Data is Structured
&lt;/h2&gt;

&lt;p&gt;API response data is typically structured using JSON (JavaScript Object Notation). JSON is a straightforward, lightweight data exchange format that can be easily understood. Most programming languages support taking a JSON string and turning it into a data object you can use.&lt;/p&gt;

&lt;p&gt;Here’s an example JSON response from the Cat API, which returns a random photo of a cat from Tumblr.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[{
"id":"ebv",
"url":"https://cdn2.thecatapi.com/images/ebv.jpg",
"width":176,"height":540,
"breeds":[],
"favourite":{}
}]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Use an API (Example with Chuck Norris Facts API)
&lt;/h2&gt;

&lt;p&gt;Once you’ve found an API you want to use, the API documentation tells you the requirements for using the API (such as authentication needs, etc.), how to format requests, and what response you’ll receive.&lt;/p&gt;

&lt;p&gt;Let’s look at a fun example. Here’s a simple web page that displays a random fact about the martial artist Chuck Norris whenever the user clicks a button.&lt;br&gt;
&lt;strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FKqLLj7bM035KVJl2TicoVOCmBKF8ORWYdPlL4XMqeqgwgQCVQkccrCzreSw4LLw3a-9o1eySsE-eZIMli-OAFzbIVWr8omo8bksd-UNaGaMVplpNfcb7GM4iKYaS9dXqVbgYSBeI0Nrsb25S3XgILL8" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FKqLLj7bM035KVJl2TicoVOCmBKF8ORWYdPlL4XMqeqgwgQCVQkccrCzreSw4LLw3a-9o1eySsE-eZIMli-OAFzbIVWr8omo8bksd-UNaGaMVplpNfcb7GM4iKYaS9dXqVbgYSBeI0Nrsb25S3XgILL8" alt="Chuck Norris Facts API" width="800" height="400"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
There’s an API for that! The &lt;a href="https://api.chucknorris.io/" rel="noopener noreferrer"&gt;Chuck Norris Facts API&lt;/a&gt; can present random Chuck Norris facts. &lt;/p&gt;

&lt;p&gt;The documentation doesn’t mention any authentication requirements, so we can assume we don’t need any authentication to use the API. You can use this API at any time, just by issuing a request to the endpoint.&lt;/p&gt;

&lt;p&gt;To request a random fact about Chuck Norris:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://api.chucknorris.io/jokes/random
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s an example of the JSON format response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
"icon_url" : "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
"id" : "NhalBjqFS6COQsskeoWhOQ",
"url" : "",
"value" : "Chuck Norris can create a rock so heavy that he couldn't lift it, and then lift it."
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To display a random Chuck Norris joke in our project, we need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Issue a call to the Chuck Norris Facts API&lt;/li&gt;
&lt;li&gt;Wait for the JSON response&lt;/li&gt;
&lt;li&gt;Extract the joke text from the response&lt;/li&gt;
&lt;li&gt;Display the joke on the page&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This Javascript function does just that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;table&amp;gt;
  &amp;lt;tr&amp;gt;
   &amp;lt;td&amp;gt; &amp;amp;lt;script&amp;gt;
     // define function as async         
     const getJoke = async () =&amp;gt; {
            // fetch a random joke from the API and assign it to the constant res
            const res = await fetch('&amp;lt;a href="https://api.chucknorris.io/jokes/random"&amp;gt;https://api.chucknorris.io/jokes/random&amp;lt;/a&amp;gt;')
            // once we get a response, extract the json from the response and 
            // assign it to random_joke
            const random_joke = await res.json()

            // display the joke on the screen
            document.querySelector('p#joke-text').innerText = random_joke.value
            // hide the placeholder value
            document.querySelector('small').style.display = 'none'
        }
  &amp;amp;lt;/script&amp;gt;
   &amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
  &amp;lt;tr&amp;gt;
   &amp;lt;td&amp;gt;
   &amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh6.googleusercontent.com%2F8ZLVUIGgYKkj2IsLx5QlrbWyc-9RfwCrk-8J60XfOcu_t-_yFmi4t_LttxmZwWb5ghEWr1BaoidOsprXf3ZS47olD2Jfcq7lyALGvJfPFVNu49n-eBh1enxIunH8UPHxp6eprLALdXKZxEqnEw0vtCE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh6.googleusercontent.com%2F8ZLVUIGgYKkj2IsLx5QlrbWyc-9RfwCrk-8J60XfOcu_t-_yFmi4t_LttxmZwWb5ghEWr1BaoidOsprXf3ZS47olD2Jfcq7lyALGvJfPFVNu49n-eBh1enxIunH8UPHxp6eprLALdXKZxEqnEw0vtCE" alt="Chuck Norris Facts API" width="800" height="400"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the HTML code for the webpage that displays the joke.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;head&amp;gt;
    &amp;lt;!-- This will show up on the tab in your browser --&amp;gt;
    &amp;lt;title&amp;gt;Chuck Norris Joke of the Day&amp;lt;/title&amp;gt;
    &amp;lt;!-- Import bootstrap framework for styling --&amp;gt;
    &amp;lt;link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous"&amp;gt;
    &amp;lt;style&amp;gt;
        body {
            display: flex;
            align-items: center;
            justify-content: center;
            min-height: 100vh;
            background-color: #efefef;
        }

        .jokes-container {
            padding: 25px;
            box-shadow: 0 5px 12px rgba(0,0,0,0.4);
            background-color: #fff;
            color: #333;
            border-radius: 5px;
        }
    &amp;lt;/style&amp;gt;        
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;
    &amp;lt;div class="container text-center"&amp;gt;
    &amp;lt;h1&amp;gt;Here's a joke for you from Chuck Norris&amp;lt;/h1&amp;gt;
        &amp;lt;div class="jokes-container mb-4"&amp;gt;
             &amp;lt;!-- Result from the API goes in this paragraph --&amp;gt;
             &amp;lt;p id="joke-text"&amp;gt;&amp;lt;/p&amp;gt;
             &amp;lt;!-- Placeholder text --&amp;gt;
             &amp;lt;small class = "text-muted"&amp;gt;The joke is going to go here.&amp;lt;/small&amp;gt;
        &amp;lt;/div&amp;gt;


    &amp;lt;button type="button"
            class="btn btn-primary" onclick="getJoke()"&amp;gt;Give Me One
    &amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;script&amp;gt;
        const getJoke = async () =&amp;gt; {
            const res = await fetch('https://api.chucknorris.io/jokes/random')
            const random_joke = await res.json()
            document.querySelector('p#joke-text').innerText = random_joke.value
            document.querySelector('small').style.display = 'none'
        }
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check out &lt;a href="https://github.com/ionos-deploy-now/API-example-project" rel="noopener noreferrer"&gt;https://github.com/ionos-deploy-now/API-example-project&lt;/a&gt;  to see this example in action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automatically Deploy Your Project with Deploy Now
&lt;/h2&gt;

&lt;p&gt;While you’re mastering integrating APIs into your code, you’ll want an easy and convenient way to deploy your projects. Deploy Now offers a convenient toolset to automate builds and deployments for static websites and dynamic PHP applications from GitHub. Deploy Now can automatically create a deployment workflow with GitHub actions and easily deploy your project to IONOS’ secure infrastructure.&lt;/p&gt;

&lt;p&gt;Find out &lt;a href="https://docs.ionos.space/docs/" rel="noopener noreferrer"&gt;how to get started with Deploy Now&lt;/a&gt; or &lt;a href="https://docs.ionos.space/docs/framework-samples/" rel="noopener noreferrer"&gt;get started using a sample project&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>An Introduction to Git: The Basics Every Beginning Developer Should Know</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Mon, 13 Feb 2023 08:37:09 +0000</pubDate>
      <link>https://dev.to/ionos/an-introduction-to-git-the-basics-every-beginning-developer-should-know-o62</link>
      <guid>https://dev.to/ionos/an-introduction-to-git-the-basics-every-beginning-developer-should-know-o62</guid>
      <description>&lt;p&gt;As a developer, you'll need to work with a version control system, especially if you're working on a project with other developers. A version control system stores the project history so we can easily see what code changes have been implemented, when and by whom. If there are issues, a version control system allows you to revert to an earlier code version.&lt;/p&gt;

&lt;p&gt;Git is the most popular version control system in the world. According to the 2021 Stack Overflow survey, almost 95% of developers use Git as their Version Control system.&lt;/p&gt;

&lt;p&gt;Any professional developer needs to know Git inside and out. As a robust tool with many uses, learning Git can take some time. However, you can get started using Git by learning some basic commands you'll use daily in your projects.&lt;/p&gt;

&lt;p&gt;If you’re a beginning developer, this article will teach you how to effectively use Git as a version control system for your project. You’ll learn to understand the Git workflow and the essential Git commands you need to know to get started using Git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This article assumes you have already installed and configured Git on your local drive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  If you need help installing Git, check out &lt;a href="https://www.ionos.com/digitalguide/websites/web-development/git-tutorial/" rel="noopener noreferrer"&gt;Git basics: first steps with the version control system&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;  If you want more information on how to configure Git for your project, see &lt;a href="https://www.ionos.com/digitalguide/websites/web-development/git-commands/" rel="noopener noreferrer"&gt;What are the most important Git commands&lt;/a&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Git Workflow
&lt;/h2&gt;

&lt;p&gt;If you want to use Git commands effectively, you need to understand the basic Git workflow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Git is a distributed version control system. Unlike a centralized version control system, where the project is stored on a central server, each team member using Git has a copy of the project with its history stored on their local machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Git Repository stores all the Project Code. The Git Repository is a database that contains all the project code and the history of all code updates. The Git repository can be stored on your local machine if you are working on a solo project. However, project code is typically stored in a repository on a remote server.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A Basic Git Workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You start your git project by creating a git repository to track your files or copying a remote repository onto your local drive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you have a local repository on your drive, you check out the project to a new or existing project branch. This creates a copy of the project files and directories in your working directory, which you can then update with your changes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You copy the updated files to the staging area when you've completed your changes. The staging area (also called the index) allows you to review your changes before you commit your updates to your local repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After you've verified your code in the staging area, you're ready to commit it to the Git repository on your local machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can then push your code to the remote repository.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2F0wtm7-j2vZJ-CGtcZyaGmWQ6bc-0pAQjEZHZ5e30zlXJDUtL6tahvFhlJqHkc7XgImcJB85egucAm2zKqakV7inMCiU99vRyuThHpmipiBK6ZvxJ0bFC3C-eI6bJcdouUwXWOq6ltOOlKhXUIhRo4j3XH-KBdJG0RGTCcJaYu1RxlJsLXcJXBGKh9GkABQ" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2F0wtm7-j2vZJ-CGtcZyaGmWQ6bc-0pAQjEZHZ5e30zlXJDUtL6tahvFhlJqHkc7XgImcJB85egucAm2zKqakV7inMCiU99vRyuThHpmipiBK6ZvxJ0bFC3C-eI6bJcdouUwXWOq6ltOOlKhXUIhRo4j3XH-KBdJG0RGTCcJaYu1RxlJsLXcJXBGKh9GkABQ" alt="Git workflow schema" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Git Branches
&lt;/h2&gt;

&lt;p&gt;Any time you make a change to working code, you introduce the possibility of introducing errors to the software project. Git Branches help mitigate this possibility by allowing you to keep code changes separate from the main working code.&lt;/p&gt;

&lt;p&gt;Using Git branches provides several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Multiple developers can work on different features simultaneously without affecting the work of other team members.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As a developer, you can ensure that any new features or bug fixes are working correctly before merging your updates into the main code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you are working on multiple features, you can create a separate branch for each feature.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a project is complex, with many coders working on several different features, the Git workflow can be fairly complex, with multiple code branches and tags to help identify new code versions.&lt;/p&gt;

&lt;p&gt;This article will keep things simple, focusing on the commands that support a basic daily Git workflow. (If you want to learn more about branches or tags, see &lt;a href="https://www.ionos.com/digitalguide/websites/web-development/git-commands/" rel="noopener noreferrer"&gt;What are the most important Git commands&lt;/a&gt;?)&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Execute Git Commands
&lt;/h2&gt;

&lt;p&gt;There are several ways to execute Git commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Via the command line. This is often the fastest and easiest way to execute a Git Command.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using a code editor. Most code editors include support for basic Git commands, and many code editors offer extensions to support additional git features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With a Graphical User Interface. The &lt;a href="https://git-scm.com/downloads/guis" rel="noopener noreferrer"&gt;Git website includes a list of several programs&lt;/a&gt; that offer a graphical interface for executing Git commands.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article, we'll be focusing on entering Git commands directly from the command line. Even if you primarily use another tool to execute Git Commands, there can be times when only a command line interface is available.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Basic Git Commands Beginning Developers Need to Know
&lt;/h2&gt;

&lt;p&gt;Now that you understand the basics of the Git workflow, it's time to learn the commands you'll need to follow the Git workflow in your projects. Here are some of the basic Git Commands you'll need to know.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. git init
&lt;/h3&gt;

&lt;p&gt;Git init creates an empty git repository for project tracking. Once the repository is created, any files added to the repository are automatically tracked.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  2. git clone
&lt;/h3&gt;

&lt;p&gt;Cloning a remote repository downloads an exact copy of the files in the remote repository to a repository on your computer. From there, you can check out files and make changes.&lt;/p&gt;

&lt;p&gt;Cloning also establishes a connection between the remote repository and your local repository, allowing you to push your changes from your local machine to the remote repository and pull changes in the remote repository down to your local copy.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To clone a repository into your current directory:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone &amp;lt;[https://remote](https://remote) repository url&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  3. git branch
&lt;/h3&gt;

&lt;p&gt;You can use the git branch command to create a new branch, delete an existing branch or to list all project branches.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To create a new branch:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch &amp;lt;branch name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;To delete an existing branch:&lt;/em&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch -d &amp;lt;branch name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;To list all project branches:&lt;/em&gt;&lt;/p&gt;

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

&lt;/div&gt;

&lt;p&gt;When you list all branches, the current branch is shown in green with an **&lt;/p&gt;

&lt;h3&gt;
  
  
  4. git checkout
&lt;/h3&gt;

&lt;p&gt;You use git checkout to switch between branches.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout &amp;lt;branch name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Before switching to a new branch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Changes in the existing branch must be committed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The new branch must exist on your local machine.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. git add
&lt;/h3&gt;

&lt;p&gt;Adds a file (or files) to the staging area. Once updated files are in the staging area, they can be committed to the repository. Using the git add command has the following effect:&lt;/p&gt;

&lt;p&gt;Any files in the staging area (or deleted) are then deployed to the repository with the commit command.&lt;/p&gt;

&lt;p&gt;The git add command allows multiple files to be listed on the command line and accepts patterns.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To add files to the staging area:&lt;/em&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add &amp;lt;filename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;To add multiple files to the staging area:&lt;/em&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add &amp;lt;filename1&amp;gt;, &amp;lt;filename2&amp;gt;, &amp;lt;filename3&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;em&gt;To add all Javascript files to the staging area:&lt;/em&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add *.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you delete a file from your working directory, the add command deletes it from the staging area. &lt;br&gt;
For example:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh4.googleusercontent.com%2F9VGiCIJ2S_vCk5annmvFL-Bj6nzWTQuGEHF9QNV9cLCgCwvzUe2z-NNG8IloByBgHQG7M7ibF7vI4rnb4gHVN1pywkeVOV24dTjhSFjunQhLqMY-R2Zk7HFDdF7cX2AFexBKzRLN5eeVI1PbXewfFc5lB4ep4fppM9ITThaXEn5G64Xl8cRxMX-w1LDMug" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh4.googleusercontent.com%2F9VGiCIJ2S_vCk5annmvFL-Bj6nzWTQuGEHF9QNV9cLCgCwvzUe2z-NNG8IloByBgHQG7M7ibF7vI4rnb4gHVN1pywkeVOV24dTjhSFjunQhLqMY-R2Zk7HFDdF7cX2AFexBKzRLN5eeVI1PbXewfFc5lB4ep4fppM9ITThaXEn5G64Xl8cRxMX-w1LDMug" alt="Git add command" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To add all changed files (including new files, updated files, and deleted files) to the staging area:&lt;/em&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add -A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  6. git commit
&lt;/h3&gt;

&lt;p&gt;Committing your changes to your git repository creates a snapshot of your project as it exists at this point in time. Changes in your project are not tracked until they are committed to the repository.&lt;/p&gt;

&lt;p&gt;When you issue a git commit command, the repository is updated with the files that are currently stored in the staging area. If you have made changes to the files in your working directory, those changes are not committed to the repository.&lt;/p&gt;

&lt;p&gt;You don’t have to wait until you’ve completed all the work on a specific update before you commit your changes to the repository. In fact, you should commit frequently. You risk losing all the hard work you've completed so far if there's an issue with your working directory or an error in your code.&lt;/p&gt;

&lt;p&gt;You typically issue a git commit when you’ve reached a logical stopping point or when you want to save a snapshot of your project to preserve the work that’s been completed so far.&lt;/p&gt;

&lt;p&gt;You should always attach a message to your commit command so project team members can understand your changes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To commit all files in the staging area along with a short explanatory message:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m “Fixed issue #: 62541 - Spelling error.”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;All your files in the staging area are committed to the repository and you receive a short confirmation message showing what was changed.&lt;/p&gt;

&lt;p&gt;You may need to include more than a short message to explain the changes in your commit. For example, you may have fixed several bugs and you want to list each bug that was fixed. &lt;/p&gt;

&lt;p&gt;In that case, you use the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When you press ENTER, your default editor opens and you can enter as much information as you need to convey about this commit. When you’re done, close the editor window. Your comments are written to the repository along with the changes you made.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. git status
&lt;/h3&gt;

&lt;p&gt;Git status is a particularly helpful command for beginners. It displays the differences between the working directory, the staging area, the local repository, and the main remote repository if it exists.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To view the current status of your project:&lt;/em&gt;&lt;/p&gt;

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

&lt;/div&gt;

&lt;p&gt;Here’s an example of the information you can determine from a git status command.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh5.googleusercontent.com%2FM1wcOUjLbfqDy3ytu1lK_mzFH5jxCnlO1nC_5iSCaMj6biilyyYoEZlv7WRKnBkJGcXEBozdsAOJq5I0W4l299wt6KH3MWoHTwE0BY2aB2qxl8oJUSmEHlakqgaL1_aiwcbXIJE5o5iXHcxulvF8NddbhgaOcw1XOt63FeIk146upGBBPuwoQ7WXfMeZGw" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh5.googleusercontent.com%2FM1wcOUjLbfqDy3ytu1lK_mzFH5jxCnlO1nC_5iSCaMj6biilyyYoEZlv7WRKnBkJGcXEBozdsAOJq5I0W4l299wt6KH3MWoHTwE0BY2aB2qxl8oJUSmEHlakqgaL1_aiwcbXIJE5o5iXHcxulvF8NddbhgaOcw1XOt63FeIk146upGBBPuwoQ7WXfMeZGw" alt="Git status" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, we can see that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We have committed one change to our local repository that has not been pushed to the remote repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We have two files (file1.txt and file2.txt) in the staging area that need to be committed to the remote repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;However, we also have changes in our working directory. We've modified a file already in the staging area (file1.txt) and created a new file (frontpage.html). If we want to commit these changes to the repository, we'll need to add them to the staging area before issuing a Commit command.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. git push
&lt;/h3&gt;

&lt;p&gt;After you’ve committed your changes to the local repository, you can push your new snapshot to the remote server. The git push command uploads the committed changes from the specified branch to the same branch in the remote repository.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push &amp;lt;https://remote repository url&amp;gt; &amp;lt;branch name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You’re asked to enter your username and password for the remote server. After authentication, your changes are pushed to the remote repository. This may take some time if your project is very large.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. git merge
&lt;/h3&gt;

&lt;p&gt;Once you’ve created independent branches in your repository, you can integrate these changes into one branch using the git merge command.&lt;/p&gt;

&lt;p&gt;Git merge works on the current branch. So if you want to update your main branch with one or more forked branches, use the checkout command to switch to the main branch.&lt;/p&gt;

&lt;p&gt;Once you’re working with the branch you wish to update, you can merge another branch into the current branch by using this command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git merge &amp;lt;branch name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After merging the two branches, you may want to delete the merged branch:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch -d &amp;lt;branch name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  10. git –help
&lt;/h3&gt;

&lt;p&gt;As a beginner to Git, you’ll probably have questions about how to use certain commands. You can get help on any command by adding the -help flag to the end of the command.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For example, if you want to learn more about the git commit command, you can enter:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit –help
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This displays all the help associated with the commit command.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To see a short summary of the command and its options:&lt;/em&gt;&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -h&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Automatically Deploy Your Project with Deploy Now&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;If you use GitHub as the Git platform for your web-based development projects, you can automatically deploy your repository whenever you execute a push. You can even select to deploy selected branches to a staging environment for review.&lt;/p&gt;

&lt;p&gt;Deploy Now automatically creates a customizable deployment workflow for your project with GitHub Actions to deploy your project to IONOS' secure infrastructure easily.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.ionos.space/docs/" rel="noopener noreferrer"&gt;Find out more about Deploy Now&lt;/a&gt; or get started quickly with one of Deploy Now’s &lt;a href="https://docs.ionos.space/docs/framework-samples/" rel="noopener noreferrer"&gt;sample projects&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>community</category>
    </item>
    <item>
      <title>How to Choose the Best Host for Your GitHub Blog</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Wed, 14 Dec 2022 09:04:55 +0000</pubDate>
      <link>https://dev.to/ionos/how-to-choose-the-best-host-for-your-github-blog-k7d</link>
      <guid>https://dev.to/ionos/how-to-choose-the-best-host-for-your-github-blog-k7d</guid>
      <description>&lt;p&gt;If you're a developer, you know that GitHub is the go-to platform for version control and code collaboration. These features also mean GitHub can be an excellent platform for storing your blog files. And, if you choose the right host for your blog, deploying new blog posts can be as simple as committing your changes.&lt;/p&gt;

&lt;p&gt;In this article, we'll discuss the benefits of storing your blog files as a GitHub Repository and how to select the best host for your GitHub blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Benefits of Storing Your Blog Files as a GitHub Repository
&lt;/h2&gt;

&lt;p&gt;GitHub offers several features that make it ideal for bloggers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster Page Speed and Less Server Load&lt;/strong&gt;. Unlike a blog created with a CMS such as WordPress,  blog content is stored on GitHub in a series of files, rather than a database.  There's no need to connect to a database to display your blog's content to readers. This translates into faster page speed with less load on the server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Version Control&lt;/strong&gt;. Storing your blog files with GitHub provides automatic version control.  This means you can always go back and view previous versions of your blog. You'll also have a complete record of any changes along with who made them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy Collaboration.&lt;/strong&gt; If multiple people contribute to your blog, using GitHub makes it easier to manage contributions and edits. New content can be deployed to a staging environment for review and then integrated into the live version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Template and Plug-In Options.&lt;/strong&gt; Because GitHub is a widely used platform, there is a good chance that someone else has already created a theme or plugin that you can use for your blog.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Options for Hosting Your GitHub Blog
&lt;/h2&gt;

&lt;p&gt;Once you've created your GitHub blog, you'll need to find a host to serve your blog content out to the Internet. You have a few options for hosting your GitHub blog, depending on your needs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-Hosting.&lt;/strong&gt; Many developers host their blogs on their own servers. If you are already running a private web server, or if you want more control than you have using a hosting service, you may choose to self-host your blog. There are a variety of&lt;a href="https://github.com/awesome-selfhosted/awesome-selfhosted"&gt; tools you can use to help automate your blog's workflow&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Pages&lt;/strong&gt;. GitHub offers a free hosting solution called&lt;a href="https://pages.github.com/"&gt; GitHub Pages&lt;/a&gt;. GitHub Pages works with Jekyll, a popular static site generator. Your blog content is automatically deployed to GitHub Pages whenever you push your changes to your GitHub repository. GitHub Pages is an excellent solution for a small blog, but you may run into limitations as you grow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared Hosting with GitHub Support&lt;/strong&gt;.&lt;a href="http://allows%20you%20to%20deploy%20static%20sites%20and%20php%20apps%20directly%20via%20github.%20as%20a%20tool%20built%20from%20developers%20for%20developers%2C%20deploy%20now%20automates%20build%20and%20deployment%20so%20you%20can%20focus%20entirely%20on%20your%20code.%20your%20code%20is%20deployed%20to%20ionos%20reliable%20shared%20hosting%20infrastructure%20in%20europe%20and%20north%20america.%20the%20workflow/"&gt; Deploy Now from IONOS&lt;/a&gt; allows you to deploy static sites and PHP apps directly via GitHub. Your blog is stored on &lt;a href="https://www.ionos.com/"&gt;IONOS&lt;/a&gt; reliable shared hosting infrastructure in Europe and North America.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Choose a Hosting Solution for Your GitHub Blog
&lt;/h2&gt;

&lt;p&gt;Choosing the right host for your GitHub Blog depends on your needs and plans for your blog. This chart can help you decide which hosting solution is right for your blog.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;FEATURES
   &lt;/td&gt;
   &lt;td&gt;SELF-HOSTED
   &lt;/td&gt;
   &lt;td&gt;GITHUB PAGES
   &lt;/td&gt;
   &lt;td&gt;DEPLOY NOW
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Pricing
   &lt;/td&gt;
   &lt;td&gt;$$$
   &lt;/td&gt;
   &lt;td&gt;FREE (with restrictions) &lt;sup&gt;1&lt;/sup&gt;
   &lt;/td&gt;
   &lt;td&gt;$4.00/Month
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Total Control of Environment
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;HTTPS Support
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Custom Domain Support
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Automatic Deployment
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Auto Deploy to Staging Environment
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Automatic Deployment from Static Site Generator 
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;Jekyll &lt;sup&gt;2&lt;/sup&gt;
   &lt;/td&gt;
   &lt;td&gt;Jekyll, Hugo, Gatsby, Gridsome, Docusaurus, Vuepress, Vitepress, NuxtJS (static), NextJS (static), Hexo, Metalsmith, 11ty, UmiJS, Astro, Scully, ElderJS, Middleman, Nanoc, Pelican, mkdocs, Jigsaw, Sculpin
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Private Repository Support
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;With Upgraded Plan &lt;sup&gt;3&lt;/sup&gt;
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Deploy One Branch to Multiple Environments
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Auto Deploy Dynamic PHP Environments
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Database Support
   &lt;/td&gt;
   &lt;td&gt;Manual Configuration
   &lt;/td&gt;
   &lt;td&gt;Maria DB
   &lt;/td&gt;
   &lt;td&gt;✓
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Available Storage
   &lt;/td&gt;
   &lt;td&gt;Subject to Hardware Constraints
   &lt;/td&gt;
   &lt;td&gt;1 GB
   &lt;/td&gt;
   &lt;td&gt;10 GB
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Bandwidth Support
   &lt;/td&gt;
   &lt;td&gt;Subject to Hardware Constraints
   &lt;/td&gt;
   &lt;td&gt;
&lt;a href="https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#usage-limits"&gt;approx 100 GB/month&lt;/a&gt;
   &lt;/td&gt;
   &lt;td&gt;Unmetered
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td colspan="4"&gt;
&lt;sup&gt;1  &lt;/sup&gt;&lt;a href="https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#limits-on-use-of-github-pages"&gt;GitHub Pages cannot be used for online business, e-commerce site, or commercial purposes.&lt;/a&gt;&lt;br&gt;
&lt;sup&gt;2 &lt;/sup&gt;&lt;a href="https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites"&gt;Must manually create GitHub Actions to deploy with other static site generators.&lt;/a&gt;&lt;br&gt;
&lt;sup&gt;3&lt;/sup&gt; &lt;a href="https://github.com/pricing"&gt;Support for Private Repositories only available with GitHub Pro, GitHub Team, or GitHub Enterprise&lt;/a&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Deploy Now: The Hosting Solution That Automates Deploying Directly from GitHub
&lt;/h2&gt;

&lt;p&gt;IONOS’ &lt;a href="https://docs.ionos.space/"&gt;Deploy Now&lt;/a&gt; analyzes your files and automatically builds a customizable workflow to automate deploying your blog to IONOS’ secure and reliable hosting platform. With Deploy Now, you can automatically deploy your blog updates each time you create a post or make a change to your blog.&lt;/p&gt;

&lt;p&gt;Get started today by learning &lt;a href="https://docs.ionos.space/docs/faq/"&gt;more about Deploy Now&lt;/a&gt; or &lt;a href="https://docs.ionos.space/docs/framework-samples/"&gt;creating a sample project&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>html</category>
      <category>git</category>
    </item>
    <item>
      <title>Laravel vs. Symfony: Which Framework is right for your project?</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Mon, 05 Dec 2022 08:42:57 +0000</pubDate>
      <link>https://dev.to/ionos/laravel-vs-symfony-which-framework-is-right-for-your-project-2bpj</link>
      <guid>https://dev.to/ionos/laravel-vs-symfony-which-framework-is-right-for-your-project-2bpj</guid>
      <description>&lt;p&gt;Many web developers choose PHP frameworks because they are reliable and efficient. Although there are several PHP frameworks available, Laravel and Symfony are two of the most popular frameworks.&lt;/p&gt;

&lt;p&gt;Both frameworks have pros and cons, so how can you decide which framework is suitable for your project? In this article, we’ll compare Laravel vs. Symfony and help provide some guidance so you can pick the framework that’s right for your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Laravel?
&lt;/h2&gt;

&lt;p&gt;Laravel is a PHP Framework that aids with creating web apps by combining components from several different frameworks. In fact, Laravel uses several Symfony components. Released in 2011, Laravel is known for its easy-to-use coding style and features that save time during the development process.&lt;/p&gt;

&lt;p&gt;Laravel is often used by small- to medium-sized businesses or startups who need to get their product off the ground quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Symfony?
&lt;/h2&gt;

&lt;p&gt;Symfony is both an Application Framework and a set of reusable components. Released in 2005, Symfony is a reliable and mature framework with robust components that create a stable foundation for even large-scale projects. Symfony is also highly modular and flexible, allowing developers to customize their applications depending on the needs of each individual project. It is mainly used for complex enterprise projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Laravel and Symfony Similarities
&lt;/h2&gt;

&lt;p&gt;Both Laravel and Symfony are open-source PHP frameworks and share many features, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Object Relational Mapping (ORM)&lt;/li&gt;
&lt;li&gt;MVC (Model–View–Controller) Architecture&lt;/li&gt;
&lt;li&gt;Cross-Platform support&lt;/li&gt;
&lt;li&gt;CLI Code Generation&lt;/li&gt;
&lt;li&gt;Multi-user Support&lt;/li&gt;
&lt;li&gt;Internationalization Support&lt;/li&gt;
&lt;li&gt;Template Engines&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Laravel and Symfony Differences
&lt;/h2&gt;

&lt;p&gt;While the two frameworks share many similarities, there are also significant differences. We’ll discuss some of the most striking differences between the two frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;p&gt;According to&lt;a href="https://thinkmobiles.com/blog/symfony-vs-laravel/" rel="noopener noreferrer"&gt; benchmarking tests conducted by ThinkMobile&lt;/a&gt;, the average loading time for websites built using Laravel is around 60 milliseconds, while websites built using Symfony loaded in 250 milliseconds.&lt;/p&gt;

&lt;p&gt;Laravel sites load faster because Laravel offers a set of unified APIs for caching views which means the developer can take advantage of faster performance with no extra coding. Symfony can be tweaked to provide faster load times, which takes more time to set up but can be customized to your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scalability
&lt;/h3&gt;

&lt;p&gt;Symfony shines when it comes to scalability. Symfony’s modular system means that applications can be tailored to each specific project, allowing developers to scale their projects as needed. Laravel projects can be scaled with load balancing and route caching with its Artisan command-line tool. Still, you’ll need to plan your Laravel project carefully if you need to scale it to support an extensive enterprise software system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Database Support
&lt;/h3&gt;

&lt;p&gt;Laravel supports &lt;a href="https://laravel.com/docs/9.x/database#introduction" rel="noopener noreferrer"&gt;five databases&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MariaDB 10.3+ &lt;/li&gt;
&lt;li&gt;MySQL 5.7+ &lt;/li&gt;
&lt;li&gt;PostgreSQL 10.0+ &lt;/li&gt;
&lt;li&gt;SQLite 3.8.8+&lt;/li&gt;
&lt;li&gt;SQL Server 2017+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://symfony.com/doc/current/doctrine.html#:~:text=Symfony%20provides%20all%20the%20tools,also%20NoSQL%20databases%20like%20MongoDB." rel="noopener noreferrer"&gt;With its Doctrine tool&lt;/a&gt;, Symfony supports relational databases like MySQL and PostgreSQL and also NoSQL databases like MongoDB.&lt;/p&gt;

&lt;p&gt;Both Laravel and Symfony allow for easy data access through the use of object-relational mapping (ORM). Laravel relies on &lt;a href="https://laravel.com/docs/9.x/eloquent" rel="noopener noreferrer"&gt;Eloquent&lt;/a&gt;, which is based on ActiveRecord, while Symfony uses &lt;a href="https://symfony.com/doc/current/doctrine.html" rel="noopener noreferrer"&gt;Doctrine&lt;/a&gt;, which follows the DataMapper pattern.&lt;/p&gt;

&lt;p&gt;In Eloquent, Models are class extensions that contain all the logic for database access.&lt;/p&gt;

&lt;p&gt;Doctrine entities are created as Plain old PHP Objects (POPO). This means that they can be used for various use cases, not just in the ORM context. Because Doctrine uses the DataMapper pattern, database operations can be optimized by queueing them instead of immediately running them.&lt;/p&gt;

&lt;p&gt;Both Laravel and Symfony provide support for database scaffolding which creates an Entity Framework model from an existing database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Templating Engine
&lt;/h3&gt;

&lt;p&gt;Both Laravel and Symfony provide a templating engine. A templating engine allows server-side data to populate an application quickly.&lt;/p&gt;

&lt;p&gt;Laravel uses &lt;a href="https://laravel.com/docs/9.x/blade" rel="noopener noreferrer"&gt;Blade&lt;/a&gt;, a simple but powerful templating engine. The Blade templating system compiles all templates into basic PHP code, so there is minimal performance impact on your project.&lt;/p&gt;

&lt;p&gt;Symfony uses &lt;a href="https://twig.symfony.com/" rel="noopener noreferrer"&gt;Twig&lt;/a&gt;, a fast, secure, and flexible templating engine. Twig allows the developer to define custom tags and filters and create Domain-Specific Languages (DSL).&lt;/p&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Symfony offers robust security features, but they must be explicitly defined, which can sometimes be challenging. Laravel offers more basic security features, but these features are generally more than enough to cover most security issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learning Curve
&lt;/h3&gt;

&lt;p&gt;Laravel is designed to be easy to learn and use. It provides an intuitive API that makes it easier to get up and running quickly. They also offer&lt;a href="https://laravel.com/docs/8.x" rel="noopener noreferrer"&gt; extensive documentation&lt;/a&gt; and community help via their&lt;a href="https://github.com/laravel" rel="noopener noreferrer"&gt; GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Symfony is more complex, but its modular design allows developers to choose which components they want to use. This allows for more flexibility but also requires a steeper learning curve. Symfony also provides documentation and&lt;a href="https://github.com/symfony" rel="noopener noreferrer"&gt; community help via GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Popularity
&lt;/h3&gt;

&lt;p&gt;Although you shouldn’t solely pick a framework based on its popularity, it's useful to see how others have put these frameworks to work. A more popular framework also means more developers are available to support your project and a larger community from which to seek help.&lt;/p&gt;

&lt;p&gt;This chart summarizes the popularity of each framework.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;Laravel
   &lt;/td&gt;
   &lt;td&gt;Symfony
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Number of websites using the framework&lt;sup&gt;1&lt;/sup&gt;
   &lt;/td&gt;
   &lt;td&gt;133,610
   &lt;/td&gt;
   &lt;td&gt;10,571
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;G2 Rating&lt;sup&gt;2&lt;/sup&gt;
   &lt;/td&gt;
   &lt;td&gt;4.5 Stars
   &lt;/td&gt;
   &lt;td&gt;4.5 Stars
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;GitHub Stars
   &lt;/td&gt;
   &lt;td&gt;71.66K
   &lt;/td&gt;
   &lt;td&gt;27.7K
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;sup&gt;1 &lt;/sup&gt;&lt;a href="https://www.similartech.com/compare/laravel-vs-symfony" rel="noopener noreferrer"&gt;Source&lt;/a&gt; \&lt;br&gt;
&lt;sup&gt;2 &lt;/sup&gt;&lt;a href="https://www.g2.com/compare/laravel-vs-symfony" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Ultimately, the decision of which framework to use will boil down to which framework is best suited for your project. Laravel tends to be the choice of developers who want to develop a web app quickly and easily, while Symfony is used most often by developers who are looking to create large-scale, customized enterprise solutions.&lt;/p&gt;

&lt;p&gt;This chart summarizes all the points we’ve discussed in this article.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;Laravel
   &lt;/td&gt;
   &lt;td&gt;Symfony
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Common Features&lt;/td&gt;
   &lt;td colspan="2"&gt;
&lt;ul&gt;
&lt;li&gt;Object Relational Mapping (ORM)
&lt;/li&gt;
&lt;li&gt;MVC (Model–View–Controller) Architecture
&lt;/li&gt;
&lt;li&gt;Cross-Platform support
&lt;/li&gt;
&lt;li&gt;CLI Code Generation
&lt;/li&gt;
&lt;li&gt;Multi-user Support
&lt;/li&gt;
&lt;li&gt;Internationalization Support
&lt;/li&gt;
&lt;li&gt;Template Engines
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Performance (Average Page Load Speed)
   &lt;/td&gt;
   &lt;td&gt;60 milliseconds
   &lt;/td&gt;
   &lt;td&gt; 250 milliseconds
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Scalability
   &lt;/td&gt;
   &lt;td&gt;Modular system allows developers to scale their projects as needed
   &lt;/td&gt;
   &lt;td&gt;Scalable with load balancing and route caching
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Database Support&lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;
&lt;li&gt;MariaDB 10.3+ 
&lt;/li&gt;
&lt;li&gt;MySQL 5.7+ 
&lt;/li&gt;
&lt;li&gt;PostgreSQL 10.0+ 
&lt;/li&gt;
&lt;li&gt;SQLite 3.8.8+
&lt;/li&gt;
&lt;li&gt;SQL Server 2017+    
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
   &lt;td&gt;Supports relational databases and NoSQL databases
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Templating Engine
   &lt;/td&gt;
   &lt;td&gt;Blade (simple but powerful)
   &lt;/td&gt;
   &lt;td&gt;Twig (fast, secure &amp;amp; flexible)
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Security
   &lt;/td&gt;
   &lt;td&gt;Robust security; Must be explicitly defined
   &lt;/td&gt;
   &lt;td&gt;Automatic security for most basic use cases
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Learning Curve
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;
&lt;li&gt;Easy to Learn
&lt;/li&gt;
&lt;li&gt;Extensive Documentation
&lt;/li&gt;
&lt;li&gt;Large GitHub Community      
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;
&lt;li&gt;More difficult to learn
&lt;/li&gt;
&lt;li&gt;Basic Documentation
&lt;/li&gt;
&lt;li&gt;Smaller Github Community
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Automatically Deploy Your Project with Deploy Now
&lt;/h2&gt;

&lt;p&gt;Whether you use Laravel or Symfony as your framework, Deploy Now offers a convenient toolset to automate builds and deployments for dynamic PHP applications. Deploy Now can automatically create a deployment workflow with GitHub actions and then easily deploy your project to Ionos’ secure infrastructure.&lt;/p&gt;

&lt;p&gt;Find out more about &lt;a href="https://docs.ionos.space/docs/deploy-php-apps" rel="noopener noreferrer"&gt;deploying your PHP projects via GitHub&lt;/a&gt; with Deploy Now or get started with a sample project for &lt;a href="https://docs.ionos.space/docs/framework-samples/#laravel-sample" rel="noopener noreferrer"&gt;Laravel&lt;/a&gt; or &lt;a href="https://docs.ionos.space/docs/framework-samples/#symfony-sample" rel="noopener noreferrer"&gt;Symfony&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>GitHub Actions: An Introduction</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Thu, 01 Dec 2022 15:16:06 +0000</pubDate>
      <link>https://dev.to/ionos/github-actions-an-introduction-4leo</link>
      <guid>https://dev.to/ionos/github-actions-an-introduction-4leo</guid>
      <description>&lt;p&gt;GitHub Actions allows you to create, manage, and run tasks directly on GitHub. This can be anything from compiling code to deploying a web application. In this article, we will give a quick introduction to GitHub Actions and show you how to get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  What are GitHub Actions?
&lt;/h2&gt;

&lt;p&gt;Introduced in 2018, GitHub Actions allow you to automate developer workflows. You can use GitHub Actions to create custom software development life cycle workflows directly in your GitHub Repository.&lt;/p&gt;

&lt;p&gt;These actions automatically execute when a specified event occurs, such as when a pull request is opened. You can use pre-made GitHub Actions or create your own actions.&lt;/p&gt;

&lt;p&gt;GitHub Actions can manage and operate workflows through Linux, Windows, and macOS operating systems. GitHub actions also support a variety of coding languages, such as C, C++, C#, Go, Java, JavaScript, PHP, Python, Ruby, Scala, and TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some of the Benefits of GitHub Actions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions provide several benefits for your software development life cycle:&lt;/li&gt;
&lt;li&gt;Automate multi-step tasks that are tedious, complex, or prone to errors&lt;/li&gt;
&lt;li&gt;Create custom workflows directly in your GitHub Repository&lt;/li&gt;
&lt;li&gt;Fully integrated into GitHub&lt;/li&gt;
&lt;li&gt;Discover, create and share actions to perform any job you like&lt;/li&gt;
&lt;li&gt;Combine multiple actions into a customized workflow&lt;/li&gt;
&lt;li&gt;Build, test, and publish across multiple operating systems, platforms, and languages within the same workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Can You Use GitHub Actions?
&lt;/h2&gt;

&lt;p&gt;GitHub actions can be used for any process that you want to automate. For example, you can use a GitHub action to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run an automated task when an issue is opened&lt;/li&gt;
&lt;li&gt;Create automated review reminders when a pull request is opened&lt;/li&gt;
&lt;li&gt;Send out a welcome message when a new contributor joins your project&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using GitHub Actions as a Continuous Integration/Continuous Delivery (CI/CD) Platform
&lt;/h2&gt;

&lt;p&gt;One of the most common uses for GitHub Actions is defining a &lt;strong&gt;Continuous Integration/Continuous Delivery (CI/CD)&lt;/strong&gt; platform where you can build and test pull requests from a GitHub repository and deploy merged pull requests to production. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Integration is the process of automating the build and testing of software.&lt;/strong&gt; This helps to ensure that code is always working and reduces the chances of introducing errors into the codebase. Continuous integration typically involves running automated tests on every change to the codebase and notifying developers if any of the tests fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Delivery keeps the code that has been verified by CI testing ready to be deployed.&lt;/strong&gt; New code is automatically and constantly integrated, delivered, and deployed throughout an app's development stages.&lt;/p&gt;

&lt;p&gt;Since the automated CI/CD approach is used from the initial app integration, through testing, and then through delivery and deployment, the process is commonly referred to as the CI/CD pipeline. &lt;/p&gt;

&lt;h2&gt;
  
  
  How GitHub Actions Work
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Event Driven
&lt;/h3&gt;

&lt;p&gt;GitHub Actions are triggered by a specified event. An event is any action within your GitHub repository. Opening a pull request, creating a new branch, and commenting are all examples of an event. When a defined event is executed, it triggers the beginning of a workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflows
&lt;/h3&gt;

&lt;p&gt;A workflow is an automated process composed of a series of jobs.  You define a workflow with a YAML file in your depository. Workflows run automatically when triggered by an event in your repository. You can also trigger a workflow manually or on a defined schedule.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jobs
&lt;/h3&gt;

&lt;p&gt;Jobs are a list of commands (or actions) triggered by a particular workflow. Each command triggered within a job is called an Action. A workflow can have multiple actions working at the same time. &lt;br&gt;
You can create your own actions or use pre-built actions from the GitHub marketplace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with GitHub Actions
&lt;/h2&gt;

&lt;p&gt;You can access GitHub actions from your GitHub repository by clicking Actions in the toolbar. You can then create a new Workflow. GitHub offers preconfigured starter plans that you can customize or you can also create your own YAML file with GitHub Actions commands.&lt;/p&gt;

&lt;p&gt;You can view Workflow results by clicking on the Workflow name on the GitHub Actions Page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Deploy Now with GitHub Actions
&lt;/h2&gt;

&lt;p&gt;Ionos’ &lt;a href="https://docs.ionos.space/"&gt;Deploy Now&lt;/a&gt; uses GitHub actions to automate the tasks associated with deploying your static site, single page app, or PHP project to the server each time you execute a Git Push. &lt;/p&gt;

&lt;p&gt;Deploy Now analyzes your project and automatically creates a YAML file containing the necessary actions to deploy your project to IONOS reliable shared hosting infrastructure in Europe and North America. This file can be used as is or you can easily modify this file to contain your own actions.&lt;/p&gt;

&lt;p&gt;Get started today by learning &lt;a href="https://docs.ionos.space/docs/faq/"&gt;more about Deploy Now&lt;/a&gt; or &lt;a href="https://docs.ionos.space/docs/framework-samples/"&gt;creating a sample project&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>github</category>
      <category>beginners</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Would you like pay-per-visit web hosting?</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Tue, 25 Oct 2022 13:51:37 +0000</pubDate>
      <link>https://dev.to/ionos/would-you-like-pay-per-visit-web-hosting-2iif</link>
      <guid>https://dev.to/ionos/would-you-like-pay-per-visit-web-hosting-2iif</guid>
      <description>&lt;p&gt;The market standard in web hosting is this: Your website runs on shared resources on a more or less packed server &amp;amp; your priority on the machine and number of parallel processes allowed depends on how much you pay.&lt;/p&gt;

&lt;p&gt;If you have a cheap plan, &lt;strong&gt;performance can be low and traffic peaks can be cut off&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What if, in each hosting plan...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Your website runs on a containerized setup that gives you &lt;strong&gt;all the resources you need&lt;/strong&gt; to cover huge traffic peaks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every project receives the &lt;strong&gt;same prioritization&lt;/strong&gt; on the server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You'll get an &lt;strong&gt;awesome time to first byte&lt;/strong&gt;, no matter what&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You still pay &lt;strong&gt;typical shared hosting prices&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;But: Your plan has a &lt;strong&gt;fixed number of monthly visits&lt;/strong&gt;, and you need to pay per visits when it is reached&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would you like that? What would be your concerns?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>hosting</category>
      <category>webdev</category>
      <category>pricing</category>
    </item>
    <item>
      <title>What is a webmention and how do I use it in WordPress?</title>
      <dc:creator>hagengraf</dc:creator>
      <pubDate>Fri, 02 Sep 2022 05:43:17 +0000</pubDate>
      <link>https://dev.to/ionos/what-is-a-webmention-and-how-do-i-use-it-in-wordpress-35id</link>
      <guid>https://dev.to/ionos/what-is-a-webmention-and-how-do-i-use-it-in-wordpress-35id</guid>
      <description>&lt;p&gt;Especially on the World Wide Web, linking content is one of the most powerful features. Even today, for search engines, the amount of links pointing to a website is one of the most important parameters that tells how popular that website is.&lt;/p&gt;

&lt;p&gt;Unfortunately, when you place a link to another website, the other site, i.e. where the link goes, usually doesn't find out about it.&lt;/p&gt;

&lt;p&gt;The W3C took care of the matter and in 2017 created a protocol called &lt;a href="https://www.w3.org/TR/webmention/" rel="noopener noreferrer"&gt;Webmention&lt;/a&gt;. Webmention is a way to automatically notify any URL when a link to it is placed on a website. From the receiving website's perspective, it's a way to receive notification when other websites link to it.&lt;/p&gt;

&lt;p&gt;Sounds complicated, but it's quite simple, very practical and popular in social media systems. In many short message and messenger systems there is the possibility to prefix the name of a person with the @ sign and thus "mentions" the person. The person mentioned then receives a notice in the corresponding system that their name has been mentioned and a link to view the "Mention".&lt;/p&gt;

&lt;p&gt;So a "Mention" is a notification when a certain event occurs. A "Webmention" then refers more specifically to events on the World Wide Web, such as a mention of a URL (link), an update of a content or even a "Like".&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://wordpress.org/plugins/webmention/#description" rel="noopener noreferrer"&gt;WordPress Webmention Plugin&lt;/a&gt; by &lt;a href="https://dev.to/pfefferle"&gt;Matthias Pfefferle&lt;/a&gt; provides the base for this functionality.&lt;/p&gt;

&lt;p&gt;To work with Webmentions, you need at least one sender and one receiver. Both need to understand the Webmention protocol.&lt;/p&gt;

&lt;p&gt;So you need the functionality in your own WordPress installation and the receiving site in their system. This can be any system that can handle the Webmention protocol, so it doesn't have to be WordPress.&lt;/p&gt;

&lt;p&gt;On your site you need to install and activate the &lt;a href="https://wordpress.org/plugins/webmention/" rel="noopener noreferrer"&gt;Webmention&lt;/a&gt; and &lt;a href="https://wordpress.org/plugins/semantic-linkbacks/" rel="noopener noreferrer"&gt;Semantic linkbacks&lt;/a&gt; plugin.&lt;/p&gt;

&lt;p&gt;You can easily see if everything works after activation. Write a blog post with a link and look in the HTML source code if the link is mentioned as Webmention.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;link rel="webmention" href="https://hagen.cocoate.com/wp-json/webmention/1.0/endpoint"&amp;gt;
&amp;lt;link rel="http://webmention.org/" href="https://hagen.cocoate.com/wp-json/webmention/1.0/endpoint"&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  So how does it work?
&lt;/h2&gt;

&lt;p&gt;The good news is: it works automatically 🙂.&lt;/p&gt;

&lt;p&gt;Perhaps the easiest way to understand it better is to look at an example: &lt;br&gt;
On my private blog in this blog post  (&lt;a href="https://hagen.cocoate.com/2022/01/21/webmention-test/" rel="noopener noreferrer"&gt;https://hagen.cocoate.com/2022/01/21/webmention-test/&lt;/a&gt;), I linked to a post from another blog (&lt;a href="https://blog.novatrend.ch/2022/01/10/hello-dolly-oder-wie-schreibe-ich-ein-wordpress-plugin/" rel="noopener noreferrer"&gt;https://blog.novatrend.ch/2022/01/10/hello-dolly-oder-wie-schreibe-ich-ein-wordpress-plugin/&lt;/a&gt;) .&lt;/p&gt;

&lt;p&gt;When I save the post on my blog, the other blog receives a notification via the Webmention plugin, which is also installed on the other blog. The "mention" creates a WordPress comment on the receiving Novatrend blog. &lt;/p&gt;

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

&lt;p&gt;The comment is semantically not a comment of course, but a mention (webmention) on another blog and therefore after the comment is approved, either a link or an avatar is simply displayed under the mentions heading (English mentions = German Erwähnungen). You can choose in the settings of the webmention plugin weather you want to display a link or an avatar.&lt;/p&gt;

&lt;p&gt;This is how it looks on the other blog. Meanwhile, there are two mentions &lt;/p&gt;

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

&lt;p&gt;So now both pages are linked and a visitor can see the mentions for himself. This is, compared to a search engine result a significant advantage for the site visitor.&lt;/p&gt;

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

&lt;p&gt;From this simple principle, very interesting applications can be created through networking. I'm thinking of timelines, news threads and the like.&lt;/p&gt;

&lt;p&gt;If before the linking was only in one direction, with the Webmention plugin it is in both directions. The linked website/person automatically learns about all links and can easily contact the other side.&lt;/p&gt;

&lt;p&gt;Try it :)&lt;/p&gt;

</description>
      <category>indieweb</category>
      <category>webmention</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>Tutorial: Automated Lighthouse tests with GitHub Actions</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Fri, 05 Aug 2022 12:48:00 +0000</pubDate>
      <link>https://dev.to/ionos/tutorial-automated-lighthouse-tests-with-github-actions-2o35</link>
      <guid>https://dev.to/ionos/tutorial-automated-lighthouse-tests-with-github-actions-2o35</guid>
      <description>&lt;p&gt;Are you working on a web project in GitHub and want to know the Lighthouse KPIs of your project after each git push? Here's how.&lt;/p&gt;

&lt;p&gt;Our goal is to make your Lighthouse results look like &lt;a href="https://github.com/Robert95Sch/lighthouse-action-demo/actions/runs/2803566749" rel="noopener noreferrer"&gt;this&lt;/a&gt;:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  1. Use GitHub Actions to build your code
&lt;/h2&gt;

&lt;p&gt;We would like to calculate Lighthouse KPIs from a website that is actually being built and deployed. GitHub Actions[&lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;https://github.com/features/actions&lt;/a&gt;] is a nice vehicle to execute these steps right on git push. &lt;/p&gt;

&lt;p&gt;Let's take &lt;a href="https://github.com/Robert95Sch/lighthouse-action-demo" rel="noopener noreferrer"&gt;this repo&lt;/a&gt; as an example. The project contains a small Vuepress demo site. &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;.github/workflows&lt;/code&gt; folder contains a &lt;code&gt;.yaml&lt;/code&gt; that describes the GitHub Actions workflow. Let's go through this file.&lt;/p&gt;

&lt;p&gt;Make sure that your workflow is triggered on Git Push by starting the document with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;on:
  - push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then install the dependencies that you need for your build on the GitHub Actions VM and execute your build steps&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      - name: Setup Node
        if: ${{ steps.project.outputs.deployment-enabled == 'true' }}
        uses: actions/setup-node@v1
        with:
          node-version: v16.x

      - name: Build Node assets
        if: ${{ steps.project.outputs.deployment-enabled == 'true' }}
        run: |
          npm ci
          npm run build

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Deploy it somewhere and store the URL
&lt;/h2&gt;

&lt;p&gt;The next step is to deploy your build results somewhere. In my example project, I use &lt;a href="https://www.ionos.com/hosting/deploy-now" rel="noopener noreferrer"&gt;IONOS Deploy Now&lt;/a&gt; as the deployment target. Side note: Deploy Now not only provides you with infrastructure, but also helps you setting up your build. This is especially helpful if you are unfamiliar with GitHub Actions syntax. &lt;/p&gt;

&lt;p&gt;If you are using Deploy Now, the &lt;code&gt;Deploy to IONOS&lt;/code&gt; step of the workflow will, as it says, deploy your website to IONOS servers and provide a URL. &lt;/p&gt;

&lt;h2&gt;
  
  
  3. Run the Lighthouse test
&lt;/h2&gt;

&lt;p&gt;Let's use &lt;a href="https://github.com/marketplace/actions/lighthouse-ci-action" rel="noopener noreferrer"&gt;this awesome GitHub Action&lt;/a&gt; to run the Lighthouse test by adding this to your workflow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      - name: Audit URL using Lighthouse
        uses: treosh/lighthouse-ci-action@v9
        id: lighthouse
        with:
          urls: |
            https://example.com/
          temporaryPublicStorage: true # upload lighthouse report to the temporary storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using Deploy Now, you can replace &lt;code&gt;https://example.com/&lt;/code&gt; by &lt;code&gt;${{ steps.project.outputs.site-url }}&lt;/code&gt; to refer to the URL your website was deployed to. &lt;/p&gt;

&lt;h2&gt;
  
  
  4. Generate a pretty output
&lt;/h2&gt;

&lt;p&gt;GitHub recently announced a nice feature called &lt;a href="https://github.blog/2022-05-09-supercharging-github-actions-with-job-summaries/" rel="noopener noreferrer"&gt;Job Summaries&lt;/a&gt;. They allow you to generate a visual status report in the GitHub UI right after each workflow execution.&lt;/p&gt;

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

&lt;p&gt;As you can see in the image above, I've decorated it with some additional information. The key point is to insert the correct reference to the different KPIs, e.g. &lt;code&gt;${{ fromJSON(steps.lighthouse.outputs.manifest)[0].summary.performance }}&lt;/code&gt; to be able to print them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      - name: Job successful feedback
        if: ${{ success() }}
        run: |
          echo '### Successfully published to Deploy Now :white_check_mark:' &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "Changes went live under: ${{ steps.project.outputs.site-url }}" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "Triggered by **${{ github.actor }}** ∙ deployed from **${{ github.ref_name    }}**" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo ' ' &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "**Lighthouse results:**" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "Performance: ${{ fromJSON(steps.lighthouse.outputs.manifest)[0].summary.performance }}" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "Accessibility: ${{ fromJSON(steps.lighthouse.outputs.manifest)[0].summary.accessibility }}" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "Best-practices: ${{ fromJSON(steps.lighthouse.outputs.manifest)[0].summary.best-practices }}" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "SEO: ${{ fromJSON(steps.lighthouse.outputs.manifest)[0].summary.seo }}" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "PWA: ${{ fromJSON(steps.lighthouse.outputs.manifest)[0].summary.pwa }}" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo ' ' &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "[Visit documentation](https://docs.ionos.space/)" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "[Log in to Deploy Now](https://ionos.space/)" &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, your Lighthouse tests only make sense if your build and deployment were successful. You might want to add a little status report in case your deployment was not successful:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;     - name: Job failed feedback
        if: ${{ failure() }}
        run: |
          echo '### Publishing to Deploy Now was not successful :cross:' &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "Unfortunately, the deployment failed." &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
          echo "Find help to debug this [here](https://docs.ionos.space/)." &amp;gt;&amp;gt; $GITHUB_STEP_SUMMARY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's already it! Enjoy pushing to your repo and check your Lighthouse KPIs after each deployment. And if you like, pay &lt;a href="https://docs.ionos.space/" rel="noopener noreferrer"&gt;Deploy Now&lt;/a&gt; a visit. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;What about you? Does this implementation make sense to you?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>testing</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
