<?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: Robert Schleinhege</title>
    <description>The latest articles on DEV Community by Robert Schleinhege (@roberts).</description>
    <link>https://dev.to/roberts</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F732335%2F74db06c0-fbba-435d-b6bc-1ef3a139cc9f.PNG</url>
      <title>DEV Community: Robert Schleinhege</title>
      <link>https://dev.to/roberts</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roberts"/>
    <language>en</language>
    <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>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>The Top Books for Software Engineers to Add to Their Reading List</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Thu, 22 Dec 2022 13:34:12 +0000</pubDate>
      <link>https://dev.to/roberts/the-top-books-for-software-engineers-to-add-to-their-reading-list-53pb</link>
      <guid>https://dev.to/roberts/the-top-books-for-software-engineers-to-add-to-their-reading-list-53pb</guid>
      <description>&lt;p&gt;As a software engineer, staying up-to-date with the latest technologies and best practices is essential to success in your field. One of the best ways to continue learning and improving your skills is by reading books written by experts in the field. Here are our top picks for the best books for software engineers to add to their reading list:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3WnKL5a"&gt;"Clean Code" by Robert C. Martin&lt;/a&gt;: This book is a must-read for any software engineer. It provides practical guidance on how to write clean, maintainable code that is easy to understand and modify.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3hHMJ0T"&gt;"Design Patterns: Elements of Reusable Object-Oriented Software" by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides&lt;/a&gt;: This classic book introduces software engineers to design patterns, which are proven solutions to common design problems that can be used to improve the structure and quality of code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?crid=3KJ09ZOU3IIIG&amp;amp;keywords=%22The+Pragmatic+Programmer%3A+From+Journeyman+to+Master%22&amp;amp;qid=1671653496&amp;amp;sprefix=design+patterns+elements+of+reusable+object-oriented+software+%2Caps%2C633&amp;amp;sr=8-1"&gt;"The Pragmatic Programmer: From Journeyman to Master" by Andrew Hunt and David Thomas&lt;/a&gt;: This book is packed with practical advice on how to be a better programmer, including tips on how to write efficient code, debug problems, and work effectively with others.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3jahNqr"&gt;"Code Complete: A Practical Handbook of Software Construction" by Steve McConnell&lt;/a&gt;: This comprehensive guide covers every aspect of software development, from design to testing and maintenance. It's a great resource for software engineers looking to improve their overall programming skills.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://amzn.to/3FMozdR"&gt;"Cracking the Coding Interview" by Gayle Laakmann McDowell&lt;/a&gt;: If you're a software engineer looking for a new job, this book is a must-read. It provides guidance on how to prepare for and succeed in technical interviews, including common questions and sample code.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No matter what stage you're at in your career, these books will provide valuable insights and practical guidance to help you become a better software engineer. So add them to your reading list and start learning today!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note that this article contains Amazon Affiliate links.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>books</category>
      <category>tutorial</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>15 Creative Gift Ideas for Software Engineers</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Thu, 22 Dec 2022 13:31:29 +0000</pubDate>
      <link>https://dev.to/roberts/15-creative-gift-ideas-for-software-engineers-5doc</link>
      <guid>https://dev.to/roberts/15-creative-gift-ideas-for-software-engineers-5doc</guid>
      <description>&lt;p&gt;Are you looking for the perfect gift for the software engineer in your life? Look no further! Here are 15 ideas that are sure to please - roughly sorted by price:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;mug&lt;/strong&gt; with a clever software-themed design. Whether it's a punny phrase or a nerdy reference, this is a gift that they can use every day and appreciate. A &lt;a href="https://amzn.to/3jkXyGS"&gt;more generic one&lt;/a&gt; might be a safe choice, but one specific to the programming languages used by the gifted person might be more ingenious.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;nerd t-shirt&lt;/strong&gt; with a programming language or computer science joke. There are so many fun and creative options out there, and this is a gift that lets them show off their nerdy side. &lt;a href="https://amzn.to/3POVH9s"&gt;A coffee-related one&lt;/a&gt; is oftentimes considered funny in development teams. However, same as for mugs, one with an insider joke about a specific technology can be a good choice, too.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;notebook&lt;/strong&gt; for taking notes, brainstorming ideas, or sketching out code. Software engineers are always thinking and creating, so a good quality notebook is a practical and thoughtful gift. You can find a developer-themed one &lt;a href="https://amzn.to/3WiNkVQ"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Coding books&lt;/strong&gt; or online courses to help them learn new skills or deepen their understanding of their craft. Whether it's a new programming language or a software design methodology, there's always something new to learn in the world of software engineering. Some book recommendations can be found in&lt;a href="https://www.software-engineer.gifts/blog/post-one/"&gt; my earlier blogpost&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;wireless charging pad&lt;/strong&gt; for keeping their devices powered up without the need for cords. This is a convenient and practical gift that they'll use every day. There are &lt;a href="https://amzn.to/3VbM2dT"&gt;3-in-1 charging pads&lt;/a&gt; for charging smart watches, headphones and phones in parallel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;a href="https://amzn.to/3BUZqwp"&gt;&lt;strong&gt;nerf gun&lt;/strong&gt;&lt;/a&gt; for blowing off steam and having some fun. Software engineers often have to sit at their desks for long periods of time, so a nerf gun is a great way to give them a break and let them let off some energy. If you live together with the person that receives the gift, you might want to think about this choice twice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;desk lamp&lt;/strong&gt; to help them see what they're doing and create a comfortable working environment. A good desk lamp can make a big difference in productivity and comfort. &lt;a href="https://amzn.to/3v5Nfci"&gt;Lamps illuminating the desk from above &lt;/a&gt;the monitor are especially popular among developers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;smart home device&lt;/strong&gt; like a smart speaker or smart thermostat. Many software engineers are interested in smart home technology, and these devices are a fun and innovative way for them to play and experiment. Many of the devices listed &lt;a href="https://amzn.to/3WiX3f1"&gt;here&lt;/a&gt; can be programmed with custom code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A&lt;a href="https://amzn.to/3GcidWD"&gt; &lt;strong&gt;noise-canceling headset&lt;/strong&gt;&lt;/a&gt; for blocking out distractions and focusing on their work. These are a must-have for anyone who works in a noisy environment or just needs to concentrate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;programmable robotic kit&lt;/strong&gt; to build and experiment with. This is a fun and educational gift that lets them apply their software skills in a new and exciting way. &lt;a href="https://amzn.to/3HV64qi"&gt;Programmable cars&lt;/a&gt; are a popular choice. If you programm them right, they can drive autonomously through your apartment or office space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Computer &lt;strong&gt;hardware&lt;/strong&gt; like &lt;a href="https://amzn.to/3FPlVUD"&gt;CPU, GPU and RAM&lt;/a&gt;. This is certainly a more risky gift area that requires some knowledge about computers, and in particular the computer of the person being gifted. However, it can be a huge suprise as many coders don't expect to receive hardware as a gift.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A comfy &lt;strong&gt;office chair&lt;/strong&gt; to help them stay comfortable and pain-free while they work. A good chair can make a big difference in comfort and productivity. &lt;a href="https://amzn.to/3BPbxL9"&gt;Ergonomic office chairs&lt;/a&gt; can cost a little fortune, but given the time you spend on them, the budget is well spend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;standing desk&lt;/strong&gt; or desk converter to allow them to switch between sitting and standing. Long hours of sitting can be hard on the body, so this is a thoughtful gift that will help them take care of themselves. You don't need to purchase a fully-fledged elevatable desk. A more affordable &lt;a href="https://amzn.to/3VhpQPL"&gt;elevated notebook stand &lt;/a&gt;can already make coding and having meetings more enjoyable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;3D printer&lt;/strong&gt; for prototyping and creating new products. This is a gift that will appeal to software engineers who are interested in hardware and design. This might require some research, as the &lt;a href="https://amzn.to/3YKzjlI"&gt;choice of 3D printers&lt;/a&gt; offered became huge.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The gift idea that comes with the highest risk but also potentially the highest reward is a &lt;a href="https://amzn.to/3BUfvCs"&gt;&lt;strong&gt;computer or laptop&lt;/strong&gt;&lt;/a&gt;. Especially when starting your career as a software developer, a new laptop can mean a heavy investment. If you can find others to crowdfund this, a laptop or computer can be a great gift.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There you have it – 15 gift ideas for software engineers that are sure to be appreciated. Whether you're looking for something practical or fun, there's something here for everyone. Happy shopping!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note that this article contains Amazon Affiliate links.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>gadget</category>
      <category>productivity</category>
      <category>christmas</category>
      <category>iot</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>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>
    <item>
      <title>Tutorial: Fastest ever Jekyll deployments via GitHub</title>
      <dc:creator>Robert Schleinhege</dc:creator>
      <pubDate>Tue, 12 Jul 2022 15:10:17 +0000</pubDate>
      <link>https://dev.to/ionos/tutorial-fastest-ever-jekyll-deployments-via-github-3428</link>
      <guid>https://dev.to/ionos/tutorial-fastest-ever-jekyll-deployments-via-github-3428</guid>
      <description>&lt;p&gt;&lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; transforms plain text into static websites and blogs. Written in Ruby, Jekyll is a pioneer among static site generators. And a terrific one, too. For starters, you get to focus on your content and your content alone. No need to bother with databases, comment moderation and updates. What you put in – whether it’s CSS, HTML or Markdown – comes out as a ready-to-deploy static site in no time. And being fully-blog aware, Jekyll is the perfect companion to quickly launch or import blogs without programming knowledge.&lt;/p&gt;

&lt;p&gt;What’s not so great about deploying your content is having to worry about hosting. Oh, and having to repeat the same mundane deployment steps over and over again with every merge and change. The good news is that Deploy Now does all that for you and more. Deploy Now is a build tool created by developers for developers, bringing together modern Git workflows and IONOS infrastructure. It’s simple enough for pure content writers but also suitable for professional web app development.&lt;/p&gt;

&lt;p&gt;Ready for your fastest Jekyll deployment ever? Let’s go.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need to get started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A static Jekyll site in a GitHub repository. If you just want to see how everything works first, you can simply clone &lt;a href="https://github.com/ionos-deploy-now/hello-jekyll"&gt;our starter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://ionos.space/sign-up"&gt;Deploy Now account&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deploy Now and GitHub Actions – a match made in heaven
&lt;/h2&gt;

&lt;p&gt;GitHub Actions automates, customises, and executes software development workflows right in the repository, making it the perfect link between the worlds of hosting and web development. &lt;/p&gt;

&lt;p&gt;GitHub Actions automatically perform tasks based on various triggers, like you making changes to the actual content in whatever form it’s in. These Actions exist as editable yaml files that can be customised to your heart's content with the help of thousands of Actions available on the GitHub Actions marketplace. &lt;/p&gt;

&lt;p&gt;Deploy Now can launch projects in seconds because the setup assistant automatically scans the selected repository and produces out-of-the box Actions for your project.&lt;/p&gt;

&lt;p&gt;To be specific, Deploy Now scans your repo and presents you with a prefilled workflow – a file placed directly in the repository. With a final push of a button, Deploy Now publishes your site on IONOS infrastructure. You’ill receive a preview URL which you can replace with a custom domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 4 steps to a next-level publishing experience
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sign up for Deploy Now and link it with your GitHub account. Deploy Now will need access to the GitHub repository that you want to deploy from.   &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the repository with that Jekyll site you want to publish.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review the suggested build steps. For Jekyll, Deploy Now will preselect the Ruby programming language alongside build commands and a publishing directory.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DpVwHS22--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/555qe0r0fhar1xu3m6o9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DpVwHS22--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/555qe0r0fhar1xu3m6o9.png" alt="Jekyll build steps" width="880" height="647"&gt;&lt;/a&gt; &lt;br&gt;
&lt;strong&gt;Hint:&lt;/strong&gt; Jekyll projects require a bundler build step. Bundler manages  packages (gems) in Ruby – the programming language of Jekyll - and ensures they are available in the correct version for your project. These dependencies are defined in a  gemfile containing all the gems required for a website or application. Bundler then takes this list, installs the respective packages, and makes them available to your project.&lt;br&gt;
If Deploy Now has successfully detected Jekyll, it will add the two commands shown in the screenshot to your build workflow. &lt;code&gt;bundle install&lt;/code&gt; installs the defined dependencies from the Gemfile whereas &lt;code&gt;bundle exec jekyll build&lt;/code&gt; generates the HTML and CSS files of your website and copies the result to the  &lt;em&gt;_site folder&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, check any settings you have made and click on &lt;strong&gt;create project&lt;/strong&gt;. You’ll be redirected to the project detail page while your site is being built and deployed in the background.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There you have it! Your site is now live on green, DDoS-protected web servers, located in IONOS data centres in Europe and North America. Enjoy adding your own &lt;a href="https://docs.ionos.space/docs/domain-tls/"&gt;custom domain&lt;/a&gt;, monitoring the &lt;a href="https://docs.ionos.space/docs/visitor-statistics/"&gt;page traffic&lt;/a&gt; or creating additional &lt;a href="https://docs.ionos.space/docs/staging-deployments/"&gt;staging environments&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What do you think? Could Deploy Now be an option for your next static site project?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>jekyll</category>
      <category>ruby</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
