<?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: Tarek Hammami</title>
    <description>The latest articles on DEV Community by Tarek Hammami (@thammami01).</description>
    <link>https://dev.to/thammami01</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%2F755124%2F1591102c-f0d8-42b5-a425-e77f26e90269.jpeg</url>
      <title>DEV Community: Tarek Hammami</title>
      <link>https://dev.to/thammami01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thammami01"/>
    <language>en</language>
    <item>
      <title>Guide to Successful Google Summer of Code (GSoC) Contributor Applications</title>
      <dc:creator>Tarek Hammami</dc:creator>
      <pubDate>Fri, 23 Feb 2024 07:45:22 +0000</pubDate>
      <link>https://dev.to/thammami01/guide-to-successful-google-summer-of-code-gsoc-contributor-applications-13l6</link>
      <guid>https://dev.to/thammami01/guide-to-successful-google-summer-of-code-gsoc-contributor-applications-13l6</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Google Summer of Code (GSoC) is a global online mentoring program that introduces new contributors to open source software development. Participants, known as GSoC Contributors, work on a 12+ week programming project with the guidance of mentors from open source organizations.&lt;/p&gt;

&lt;p&gt;GSoC provides a valuable learning experience for contributors who are paired with mentors, gaining exposure to real-world projects. Accepted contributors receive a stipend while working their projects and continue to contribute actively to open source communities after the program concludes. Participating organizations benefit by identifying and bringing in new developers, and many new contributors remain involved in open source long after their GSoC experience.&lt;/p&gt;

&lt;p&gt;The program aims to inspire developers to engage in open source development, assist open source projects in attracting new developers, generate more open source code, and provide newer developers with exposure to real-world software development practices. GSoC's impact extends beyond the summer, as many participants report increased attractiveness to potential employers and continued involvement in open source as mentors or contributors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reasons to Apply for GSoC
&lt;/h2&gt;

&lt;p&gt;Wondering whether investing your time in Google Summer of Code is worthwhile? Here are some compelling reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Learning Opportunities:&lt;/strong&gt;&lt;br&gt;
GSoC provides an exceptional chance to broaden your knowledge, not only in technical skills but also in collaborative coding approaches.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Achieving Impact:&lt;/strong&gt;&lt;br&gt;
Contributing a patch that reaches a global audience allows you to experience the satisfaction of achieving something great.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Skill Enhancement:&lt;/strong&gt;&lt;br&gt;
For active developers, GSoC offers direct feedback and skill refinement under the guidance of expert mentors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Networking Experience:&lt;/strong&gt;&lt;br&gt;
During the coding period, you have the opportunity to connect with minds from around the world, building a network of friends, collaborators, and mentors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open Source Starting Point:&lt;/strong&gt;&lt;br&gt;
GSoC serves as an entry point into the open-source community, providing a platform for impactful contributions and earning recognition within the community.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Passion Transformation:&lt;/strong&gt;&lt;br&gt;
If you have a genuine love for coding and aspire to build exceptional software, GSoC is the ideal space to translate that passion into meaningful projects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expert Guidance:&lt;/strong&gt;&lt;br&gt;
Benefit from mentorship by experienced developers, gaining valuable insights and tips that elevate your status as a programmer and open-source contributor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stipend and Confidence Boost:&lt;/strong&gt;&lt;br&gt;
Along with a compensation for your time and efforts, GSoC offers a confidence boost, enhancing the prestige of your resume.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Is GSoC for You?
&lt;/h2&gt;

&lt;p&gt;If you have some programming experience and are comfortable in a programming language, you are good enough for Google Summer of Code (GSoC). It doesn't require being a Computer Science major or having years of coding experience. GSoC projects vary in criteria, but if you possess general skills like resourcefulness, resilience to feedback, independence, and effective communication, you're likely to find a suitable project. On the technical side, being able to install software, having a functional computer, and having experience with the project's programming language is essential. Each organization may have specific requirements, so it's crucial to check and meet those while considering applying for GSoC.&lt;/p&gt;

&lt;h2&gt;
  
  
  2024 Timeline
&lt;/h2&gt;

&lt;p&gt;Here's a concise list of dates that will be of interest to those applying for the program. I may write a follow-up article detailing what happens next after your project idea gets accepted.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;February 21 - 18:00 UTC&lt;/strong&gt;&lt;br&gt;
List of accepted mentoring organizations published&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;February 22 - March 18&lt;/strong&gt;&lt;br&gt;
Potential GSoC contributors discuss application ideas with mentoring organizations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;March 18 - 18:00 UTC&lt;/strong&gt;&lt;br&gt;
GSoC contributor application period begins&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;April 2 - 18:00 UTC&lt;/strong&gt;&lt;br&gt;
GSoC contributor application deadline&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;May 1 - 18:00 UTC&lt;/strong&gt;&lt;br&gt;
Accepted GSoC contributor projects announced&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Research First:&lt;/strong&gt;&lt;br&gt;
Check out the program, read other articles, watch YouTube videos, find out what people think, and learn from their experiences. It all adds up to a successful application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Learn from Previous Programs:&lt;/strong&gt;&lt;br&gt;
Examine past programs, review previous organizations, their project ideas, and the code submitted by contributors. This provides insight into what is expected from you and deepens your understanding of the GSoC program.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Familiarize Yourself with the Community:&lt;/strong&gt;&lt;br&gt;
Your journey into the open-source realm is comparable to entering a gathering where everyone appears to know each other. To navigate this experience, immerse yourself in community interactions by actively participating in conversations. Introduce yourself, ask questions, and maintain a humble attitude. Make connections before and during the application period, as a grasp of community dynamics and knowing where to seek assistance are crucial for a successful application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Select an Organization:&lt;/strong&gt;&lt;br&gt;
Choosing the appropriate GSoC project begins with self-reflection. Identify your interests, skills, and objectives. Explore the announced organizations and research their missions, sizes, and application processes. Create a list based on your preferences and dive into their projects. Strive to become part of a community that genuinely excites you, as GSoC extends beyond a summer project and evolves into a long-term open-source collaboration commitment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Identify the Right Project:&lt;/strong&gt;&lt;br&gt;
Every GSoC organization presents a Project Ideas page. Explore the proposed projects, narrow down those aligning with your interests, and inquire about their scope. Assess your options by considering community compatibility, available documentation, and support. Transform your chosen project idea into a comprehensive plan through discussions with mentors, and always keep in mind that well-researched original proposals grab attention.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Craft a Proposal:&lt;/strong&gt;&lt;br&gt;
Creating a compelling proposal is crucial for success. Adhere to Google's formal requirements, provide complete contact details, and create a title that is both clear and captivating. Emphasize the advantages for the community, specify the expected deliverables, and discuss relevant work. Present personal information concisely but pertinently and follow the organization's guidelines. Tailor proposals to each organization and project, showcasing a deep understanding of the work and its significance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Apply Early:&lt;/strong&gt;&lt;br&gt;
Submitting your application ahead of time comes with the benefit of receiving timely constructive feedback, and helps you avoid falling behind schedule and missing deadlines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deal with Rejection:&lt;/strong&gt;&lt;br&gt;
Receiving a rejection does not mean the end. Seek feedback on your proposal, understand the reasons behind the decision, and use it as a learning opportunity. Approach organizations about pursuing the project independently, as most if not all still express interest. Stay connected with the community or explore a different organization that aligns better if you wish. Persistence is key; continuously refine your proposals and engagement, as success may come in subsequent attempts!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Useful Pages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://summerofcode.withgoogle.com/" rel="noopener noreferrer"&gt;Official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://summerofcode.withgoogle.com/programs/2024/organizations" rel="noopener noreferrer"&gt;2024 Organizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/open-source/gsoc/timeline" rel="noopener noreferrer"&gt;2024 Timeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/open-source/gsoc/help/student-stipends" rel="noopener noreferrer"&gt;2024 Contributor Stipends&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://summerofcode.withgoogle.com/terms/contributor" rel="noopener noreferrer"&gt;2024 Contributor Terms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://summerofcode.withgoogle.com/rules" rel="noopener noreferrer"&gt;2024 Rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://summerofcode.withgoogle.com/archive" rel="noopener noreferrer"&gt;Past Programs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://google.github.io/gsocguides/student/" rel="noopener noreferrer"&gt;Contributor Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/open-source/gsoc/help/student-advice" rel="noopener noreferrer"&gt;Contributor Advice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/open-source/gsoc/faq" rel="noopener noreferrer"&gt;FAQs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/g/google-summer-of-code-announce" rel="noopener noreferrer"&gt;Google Group for Announcements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://groups.google.com/g/google-summer-of-code-discuss" rel="noopener noreferrer"&gt;Google Group for Discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Useful Videos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/7jD2tChhrWM?si=9Y1nj3HeORZEJZHR" rel="noopener noreferrer"&gt;An introduction to Google Summer of Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/S6IP_6HG2QE?si=ec1Xyo4jWT2iRoT4" rel="noopener noreferrer"&gt;What is Google Summer of Code?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/YN7uGCg5vLg?si=3eO91YRLA04LLMJi" rel="noopener noreferrer"&gt;So you want to be a Google Summer of Code Contributor?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtube.com/playlist?list=PLxNYxgaZ8RscKC8NFOyQK2YdMCrM9Gb5A&amp;amp;si=taMYetYAru4wSjAJ" rel="noopener noreferrer"&gt;Google Summer of Code: Organizations [Playlist]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtube.com/playlist?list=PLxNYxgaZ8Rsdbe90rZ-FHMO4yqR1nOA66&amp;amp;si=ELePEZEKXp1-tpit" rel="noopener noreferrer"&gt;Google Summer of Code: Community Talks [Playlist]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gsoc</category>
      <category>opensource</category>
      <category>programming</category>
      <category>mentorship</category>
    </item>
    <item>
      <title>SSH into your local VM as if it is a paid IaaS</title>
      <dc:creator>Tarek Hammami</dc:creator>
      <pubDate>Sun, 09 Oct 2022 19:41:04 +0000</pubDate>
      <link>https://dev.to/thammami01/ssh-into-your-local-vm-as-if-it-is-a-paid-iaas-4emm</link>
      <guid>https://dev.to/thammami01/ssh-into-your-local-vm-as-if-it-is-a-paid-iaas-4emm</guid>
      <description>&lt;p&gt;So, I finally got the confidence to begin writing publicly.&lt;br&gt;
Let me thank DEV.to and the fantastic community around it for motivating me and inspiring me to start doing this.&lt;/p&gt;

&lt;p&gt;As cloud computing becomes more popular, we begin to employ it for nearly every use case. For example, we're too lazy to just create a new VM in the cloud and pay per usage as in the pay-as-you-go model, rather than just installing a supervisor and use it to manage as much VMs locally as we need and all free of charge since we are using our own resources instead of someone else's (the cloud provider).&lt;/p&gt;

&lt;p&gt;In this tutorial, we will use Oracle VirtualBox to create a VM that runs the latest LTS version of the Ubuntu Server distribution (v22.04), alternatively, you can use any other disto you like but be aware that the instructions may slightly differ but the concepts are the same.&lt;/p&gt;


&lt;h3&gt;
  
  
  1. Download the Supervisor and the Guest OS ISO file
&lt;/h3&gt;

&lt;p&gt;In order to follow up, you must first install VirtualBox from the &lt;a href="https://www.virtualbox.org/" rel="noopener noreferrer"&gt;official website&lt;/a&gt;. The installation is very simple and straightforward.&lt;/p&gt;

&lt;p&gt;Now, we must download the ISO file of the image we are going to install in the VirtualBox machine as our guest OS.&lt;br&gt;
Just head to &lt;a href="https://ubuntu.com/download/server" rel="noopener noreferrer"&gt;the official page&lt;/a&gt; and click on the featured button, then wait for the download to complete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3enc0h233oa3bhyiyayr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3enc0h233oa3bhyiyayr.png" alt="Download Ubuntu Server ISO file" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  2. Create a Virtual Machine
&lt;/h3&gt;

&lt;p&gt;Run VirtualBox and click on New to create your VM:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5llispnhyud4c7jff7rp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5llispnhyud4c7jff7rp.png" alt="Click on New" width="201" height="67"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give the VM a name, select the location where you want the disk image to be saved, then select the OS type and version (Linux and Ubuntu 64-bit in our case):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnm3e5umdmoq4m963x23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnm3e5umdmoq4m963x23.png" alt="Name and OS" width="410" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, select how much of your memory you want to allocate to the VM; I have 8GB of RAM and will set 1/4 of it (that is 2GB or 2048 in MB) which will be more than sufficient for a Ubuntu Server disto:&lt;/p&gt;

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

&lt;p&gt;In the next four steps, we will select the defaults "Create a virtual hard disk now" and "VDI (Virtual Disk Image)", we will also keep the "Dynamically allocated" option which will allow us to have a dynamic disk size that grows as needed and not a fixed one that reserves the host disk space and cannot change once the VM is created, and finally the disk size to 10GB and the location set previously:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60jpn28yq24l6y8pf0hl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60jpn28yq24l6y8pf0hl.png" alt="Create a virtual hard disk" width="410" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6vw2su28gq231hb8yz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6vw2su28gq231hb8yz4.png" alt="Select hard disk file type" width="428" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqixroqsn3aju9h2lyve0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqixroqsn3aju9h2lyve0.png" alt="Storage on physical hard disk" width="428" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtd3kchsrpk05r3mcqk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtd3kchsrpk05r3mcqk8.png" alt="File location and size" width="428" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that the recommend system requirements for Ubuntu Server according to the official Ubuntu website are: 1GHz of CPU or better, 1GB of RAM or more, and a minimum of 2.5GB of disk space.&lt;/p&gt;


&lt;h3&gt;
  
  
  3. Install the Guest OS on the Virtual Machine
&lt;/h3&gt;

&lt;p&gt;Now that the VM is created and its virtual specs are set, we will power it on by clicking on the "Start" button or "Normal Start" option:&lt;/p&gt;

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

&lt;p&gt;Select the ISO file we downloaded earlier to use as start-up image and click on Start:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19yhtocym7nlaei385p7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19yhtocym7nlaei385p7.png" alt="Select start-up disk" width="337" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next steps in brief:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select "Try or Install Ubuntu Server" and wait for the installation to complete.&lt;/li&gt;
&lt;li&gt;Select your preferred language, and keyboard layout afterwards.&lt;/li&gt;
&lt;li&gt;For the installation base, we will keep Ubuntu Server (non-minimized).&lt;/li&gt;
&lt;li&gt;The network connection and proxy configuration will stay as it is by default.&lt;/li&gt;
&lt;li&gt;The Ubuntu archive mirror as default as well which will result in lower latency since we are downloading from the nearest servers.&lt;/li&gt;
&lt;li&gt;Next, we will use the entire disk (we are referring to the guest machine virtual disk and not the host's).&lt;/li&gt;
&lt;li&gt;In "Storage configuration", we will select "Done" and "Continue".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, you'll be prompted to set your profile setup.&lt;br&gt;
Enter your name and server name, then your username and password which you will use to log in to the machine.&lt;/p&gt;

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

&lt;p&gt;Next, in the SSH setup page, toggle on "Install OpenSSH server" that will install the &lt;code&gt;openssh-server&lt;/code&gt; package for us which will allow us to use SSH later.&lt;/p&gt;

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

&lt;p&gt;In Featured Server Snap, just click on "Done" since we don't need any of the packages listed there.&lt;/p&gt;

&lt;p&gt;Now wait for the system installation to finish and reboot.&lt;/p&gt;

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

&lt;p&gt;We are now able to use our username and password to log in:&lt;/p&gt;

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


&lt;h3&gt;
  
  
  4. Connect to the Virtual Machine using SSH
&lt;/h3&gt;

&lt;p&gt;Now, let's check if the &lt;code&gt;openssh-server&lt;/code&gt; package is properly installed:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbnxggwo3r9wgxds6d3c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbnxggwo3r9wgxds6d3c.png" alt="Check openssh-server package" width="800" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If not, you can simply run: &lt;code&gt;sudo apt install openssh-server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We can optionally enable the firewall and set rules that will allow only SSH connections:&lt;/p&gt;

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

&lt;p&gt;Next, we'll set up port forwarding in order to be able to access our VM from the host machine. We will bind the VM's 22 port (SSH) to the host machine's 3022 port. To do so, select your machine and open its settings page, head to the "Network" tab and click on "Advanced", then select "Port Forwarding" and add a new record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ssh&lt;/span&gt;
&lt;span class="na"&gt;Protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TCP&lt;/span&gt;
&lt;span class="na"&gt;Host Port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3022&lt;/span&gt;
&lt;span class="na"&gt;Guest Port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;22&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Now, it's time to turn off our machine and then restart it in headless mode and use SSH to connect to it.&lt;/p&gt;

&lt;p&gt;To shut it down, we'll run: &lt;code&gt;sudo shutdown -h 0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We have to add VirtualBox's path to the PATH environment variable in order to be able to use its command line tools anywhere such as &lt;code&gt;VBoxManage&lt;/code&gt; command to manage our VMs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkaffasa8m81u2xwuc26d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkaffasa8m81u2xwuc26d.png" alt="Add VirtualBox to PATH environment variable" width="527" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will switch to the host machine's command line that is in my case is Windows Terminal. I prefer to use aliases always so that I don't have to remember the full command. So I'll set them in the &lt;code&gt;.bashrc&lt;/code&gt; file (Bash run commands file; contains a list of commands that run every time we start the shell) since I am using Git Bash in Windows (any operating system has this file or something similar):&lt;/p&gt;

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

&lt;p&gt;Then we will run &lt;code&gt;source .bashrc&lt;/code&gt; for those updates to take effect.&lt;/p&gt;

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

&lt;p&gt;It's time to connect to our machine, all we have to do is to run the alias &lt;code&gt;start-sandbox&lt;/code&gt; command that we've just set in the last step, wait for it to power on and connect to it using &lt;code&gt;ssh-sandbox&lt;/code&gt;:&lt;/p&gt;

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

&lt;p&gt;Once again, to turn off the VM, SSH into it and run &lt;code&gt;sudo shutdown -h now&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Run a Simple Web App using Docker and Nginx
&lt;/h3&gt;

&lt;p&gt;To install Docker, run the following commands in row (following &lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;the official docs for Docker installation on Ubuntu&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get remove docker docker-engine docker.io containerd runc

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;ca-certificates curl gnupg lsb-release

&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/apt/keyrings

curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/docker.gpg

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
  &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce docker-ce-cli containerd.io docker-compose-plugin

&lt;span class="nb"&gt;sudo &lt;/span&gt;service docker start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this step, Docker service must be running successfully:&lt;/p&gt;

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

&lt;p&gt;And now let's run &lt;code&gt;docker run --name mynginx1 -p 80:80 -d nginx&lt;/code&gt; to run the app and then &lt;code&gt;curl http://locahost:80&lt;/code&gt; to view it as raw data.&lt;/p&gt;

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

&lt;p&gt;Another way to view the page is to install the Lynx text-based browser that runs inside the terminal &lt;code&gt;sudo apt install lynx&lt;/code&gt; and &lt;br&gt;
use it to view the page &lt;code&gt;lynx http://localhost:80&lt;/code&gt;:&lt;/p&gt;

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

&lt;p&gt;All of this was from inside the terminal, but we want to display it as a web page inside our regular browser, for that we will forward the port 80 of the VM to the port 3080 in the host machine as we did earlier with SSH port forwarding:&lt;/p&gt;

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

&lt;p&gt;Now save and visit &lt;code&gt;http://localhost:3080&lt;/code&gt; in your browser.&lt;/p&gt;

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




&lt;p&gt;And here we go, a VPS-like experience that you can get free of cost. The only thing left is to clone the VM as per needed, make snapshots of it in order to be able to roll back if something goes wrong, and to expose your host outside of your network and to the outer world to make your apps accessible not only to you.. which all are out of the scope of this tutorial.&lt;/p&gt;

&lt;p&gt;Thank you for reading, please like this post and follow me if you find this interesting. See you soon in another post. ^_^&lt;/p&gt;

</description>
      <category>ssh</category>
      <category>free</category>
      <category>virtualbox</category>
      <category>vm</category>
    </item>
    <item>
      <title>How to use your machine completely with your keyboard?</title>
      <dc:creator>Tarek Hammami</dc:creator>
      <pubDate>Wed, 20 Apr 2022 20:30:43 +0000</pubDate>
      <link>https://dev.to/thammami01/how-to-use-your-machine-completely-with-your-keyboard-53po</link>
      <guid>https://dev.to/thammami01/how-to-use-your-machine-completely-with-your-keyboard-53po</guid>
      <description>&lt;p&gt;Hello, developers.&lt;br&gt;
Hope you all having a productive day.&lt;/p&gt;

&lt;p&gt;So, I bought a new keyboard and I had to use a mouse along with it to be able to do some tasks on my machine.&lt;/p&gt;

&lt;p&gt;Even though I have a pretty fast typing speed and I use plenty of shortcuts, switching back and forth from/to my mouse keeps slowing me down.&lt;/p&gt;

&lt;p&gt;I wonder if I can completey use my machine only with my keyboard.&lt;br&gt;
To freely navigate webpages on a browser (to quickly go to a specific position), code, use software like figma/photoshop that focus mainly on using a mouse, do daily tasks, ...&lt;/p&gt;

&lt;p&gt;What shortcuts or tricks do you use the most to imporve your productivity and get away from your mouse/touchpad?&lt;/p&gt;

&lt;p&gt;Your answers are highly appreciated. ^_^&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>time</category>
      <category>keyboard</category>
      <category>shortcuts</category>
    </item>
  </channel>
</rss>
