<?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: leslie angu</title>
    <description>The latest articles on DEV Community by leslie angu (@leslie_angu_).</description>
    <link>https://dev.to/leslie_angu_</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3933835%2F2e39f40d-6240-4185-a82e-e8503ee05727.jpg</url>
      <title>DEV Community: leslie angu</title>
      <link>https://dev.to/leslie_angu_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leslie_angu_"/>
    <language>en</language>
    <item>
      <title>Git &amp; Github Fundamentals For developers</title>
      <dc:creator>leslie angu</dc:creator>
      <pubDate>Sun, 14 Jun 2026 20:43:08 +0000</pubDate>
      <link>https://dev.to/leslie_angu_/git-github-fundamentals-for-developers-mpd</link>
      <guid>https://dev.to/leslie_angu_/git-github-fundamentals-for-developers-mpd</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The week that had passed, I was curious about how data engineers use git and github to perform their tasks. I managed to learn a few core usages and I broke them down so that a novice programmer could understand them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding Git
&lt;/h3&gt;

&lt;p&gt;So basically git is used for version control. What is version control and who cares about what it does... &lt;br&gt;
Version control is a system that tracks and manages changes to files over time. According to the research I did, it acts like a time machine: allowing you to take specific snapshots of your work, compare differences, and instantly revert back to an older working version if something goes wrong. To put it into a simpler percpective, imagine having a shopping list and pulling a trolley, when you get into the supermarket, you check what is on your list and pick them as you add them to your shopping cart. As time goes buy and the ice cream you picked melted, you can return it into the freezer and pick another one.&lt;/p&gt;
&lt;h4&gt;
  
  
  Why is git useful
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Total accountability: You can see exactly who made a change, what they changed, when it happened, and why.&lt;/li&gt;
&lt;li&gt;Pain-Free Collaboration: Teams can work on the same files simultaneously without accidentally overwriting each other's work.&lt;/li&gt;
&lt;li&gt;Safe Experimentation: You can test out new ideas in a separate workspace eg a branch without affecting the main project until you are ready&lt;/li&gt;
&lt;li&gt;Automated Backups: Your project's history is typically stored on a remote cloud server, protecting your work from local machine failures.
#### How does Git work?
Git eradicates the need for manually saving messy copies of your files eg resume1.doc, resume2.doc and resume3.doc -all these might contain the same content with minimal changes. Version control does the organizing for you. You make edits to your files, and when you are satisfied with a set of changes, you save a permanent snapshot of the project. These snapshots are stored in a database called repository.
## What is Github?
Git hub is a cloud-based platform and hosting service where developers store, share, and collaborate on software code.
It is like Google Drive and Icloud.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Let's get to learn how version control works
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjh27mtfwzgen5ahyhgde.jpg" 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%2Fjh27mtfwzgen5ahyhgde.jpg" alt="How version Control Works" width="800" height="192"&gt;&lt;/a&gt;&lt;br&gt;
We need to track the work down in the working directory by using &lt;strong&gt;git init&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ADMIN@uSER MINGW64/Documents/Project/ git init
&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%2Fz9s777edi04hjnn1g8u5.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%2Fz9s777edi04hjnn1g8u5.png" alt="Git init" width="583" height="365"&gt;&lt;/a&gt;&lt;br&gt;
We list the contents in the directory using &lt;strong&gt;ls&lt;/strong&gt;, then we check the status of the directory. &lt;strong&gt;Git status&lt;/strong&gt; works by comparing the differences in three distinct states: HEAD Commit, staging area, and working directory.&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%2F1imswh4xcnae15jd7om6.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%2F1imswh4xcnae15jd7om6.png" alt="git status" width="705" height="308"&gt;&lt;/a&gt;&lt;br&gt;
Note: Most developers use a flag with git status to improve on readability and to save on time. Eg git status -s : short format of the whole message generated.&lt;br&gt;
The directory doesn't have any files so we will create one using &lt;em&gt;touch&lt;/em&gt; and then we will add it to the staging area to be tracked using &lt;strong&gt;git add .&lt;/strong&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%2Fvmygasr1nnuohzarx2lg.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%2Fvmygasr1nnuohzarx2lg.png" alt="git add" width="694" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The files in the staging area needs to be committed so that we can permanently save them. This is like a permanent save point in a video game.&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%2F6sf0b6iga64ttp1tcfqf.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%2F6sf0b6iga64ttp1tcfqf.png" alt="git commit" width="745" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pushing the tracked file that was saved to Github
&lt;/h2&gt;

&lt;p&gt;Did you notice the master at the end of the file path in the git bash. That is the branch that we are currently in, it's similar to root. &lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;: &lt;strong&gt;Master&lt;/strong&gt; is the older way of naming branches. The new way is using &lt;strong&gt;main&lt;/strong&gt;&lt;br&gt;
We change the branch from master to main using: &lt;em&gt;git branch -M main.&lt;/em&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%2F1ot2tparunyr4lwn3qlv.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%2F1ot2tparunyr4lwn3qlv.png" alt="master to main" width="692" height="127"&gt;&lt;/a&gt;&lt;br&gt;
We need to push the tracked file to github. We log into our github account, create a repository and expect some instructions to push the tracked file. use command git remote add origin &lt;a href="https://github.com/USER/project" rel="noopener noreferrer"&gt;https://github.com/USER/project&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%2Fgg3qfwjer3vfmxzk9ndt.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%2Fgg3qfwjer3vfmxzk9ndt.png" alt="Github repository" width="800" height="534"&gt;&lt;/a&gt;&lt;br&gt;
Finally ensure you can upload the tracked file using &lt;em&gt;git push -u origin main.&lt;/em&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%2Fzxf1ukaaeljl8ruwlwcn.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%2Fzxf1ukaaeljl8ruwlwcn.png" alt="git push" width="800" height="325"&gt;&lt;/a&gt;.&lt;br&gt;
When you refresh your repository, the tracked file will be uploaded.&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%2F5wt0r015nskuyfneb7o1.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%2F5wt0r015nskuyfneb7o1.png" alt="tracked file" width="800" height="453"&gt;&lt;/a&gt;&lt;br&gt;
Note: In case the output from the terminal is fatal, check the repo you connected to using &lt;em&gt;git remote -v&lt;/em&gt; and if your repo url had an issue use this command to reset it:&lt;em&gt;git remote set-url origin &lt;a href="https://github.com/USERNAME/REPOSITORY.git" rel="noopener noreferrer"&gt;https://github.com/USERNAME/REPOSITORY.git&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a Git branch?
&lt;/h3&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%2F5n3sqx8116e70lm6vujs.jpg" 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%2F5n3sqx8116e70lm6vujs.jpg" alt="Git branch" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
A git branch is an independent workspace or "parallel universe" within a code repository that allows developers to make changes without affecting the main project.&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%2F2u2uhjk47el4yfkf7qoh.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%2F2u2uhjk47el4yfkf7qoh.png" alt="branching" width="652" height="133"&gt;&lt;/a&gt;&lt;br&gt;
Creating a branch use git branch and then switching to the branch use git checkout branch-name then alter the file.&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%2Fv2fucj6ui24n0izprnqi.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%2Fv2fucj6ui24n0izprnqi.png" alt="Git branch local" width="800" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you print out the contents of main.py, they will be completely different if you changed the data in main.py file while still in the local branch.&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%2Flyump587h9i5se7s1bog.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%2Flyump587h9i5se7s1bog.png" alt="main and local are different" width="666" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Let's merge the two branches.
&lt;/h3&gt;

&lt;p&gt;When you want to merge the two files, use git merge but ensure they are in the main branch. Incase you meet any conflict, ensure that you use vim editor and choose which content you would like to remain.&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%2Fd2j6mswqb596pdtv1rgv.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%2Fd2j6mswqb596pdtv1rgv.png" alt="git merge" width="703" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Next concepts to be covered:Git pull, Git clone, git rebase
&lt;/h4&gt;

&lt;p&gt;When you want to collaborate, use ensure you use ssh (secureshell) when cloning the repo. Moreover, use git pull (download any changes from a remote repository and immediately integrate them into your current local working branch)&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary of Git and Github
&lt;/h3&gt;

&lt;p&gt;When you start a project always use git init, ensure you add and commit any changes made to a project periodically.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Linux Fundamentals for Data Engineering</title>
      <dc:creator>leslie angu</dc:creator>
      <pubDate>Sun, 07 Jun 2026 13:05:05 +0000</pubDate>
      <link>https://dev.to/leslie_angu_/linux-fundamentals-for-data-engineering-22n8</link>
      <guid>https://dev.to/leslie_angu_/linux-fundamentals-for-data-engineering-22n8</guid>
      <description>&lt;h2&gt;
  
  
  What is data Engineering
&lt;/h2&gt;

&lt;p&gt;Data engineering is the work of building and maintaining the data pipelines that allows organizations to collect, store, process and use data effectively. &lt;br&gt;
Data engineers use different tools to store data such as digital ocean, google cloud platform, azure and Aws. These Saas run on Linux Operating Systems, thus data engineers have to use the terminal to connect, manage and monitor data flows. &lt;/p&gt;

&lt;h2&gt;
  
  
  Linux Essentials
&lt;/h2&gt;

&lt;p&gt;Data engineers use different operating systems to connect to &lt;strong&gt;virtual private servers (VPS)&lt;/strong&gt;. The most common method that is used - &lt;strong&gt;secure shell(SSH)&lt;/strong&gt;.&lt;br&gt;
SSH works on windows after installation of wsl (windows subsystem for linux), however MacOs and Linux operating systems will work with it out of the box. &lt;br&gt;
Since I use windows, I installed wsl, and used ssh &lt;a class="mentioned-user" href="https://dev.to/ip"&gt;@ip&lt;/a&gt; - the username and Ip were provided. The VPS had a password for security purpose and inputting it you get access to an Ubuntu Operating System.&lt;br&gt;
&lt;code&gt;&amp;gt;ssh root@159.65.222.96&lt;/code&gt;&lt;br&gt;
&lt;code&gt;root@159.65.222.96's password:&lt;/code&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34fwd2rd7phn8mv23kic.jpg" 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%2F34fwd2rd7phn8mv23kic.jpg" alt="Fig 1.shows access to the VPS that I had the logins." width="712" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When data engineers can't access a particular server because of company restrictions, they use &lt;strong&gt;jump servers&lt;/strong&gt; to connect to a different server.&lt;br&gt;
To check if all the files have the same name contained in all the folders we use &lt;strong&gt;find -name 'file_name'&lt;/strong&gt; as shown below.&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%2Fq5lput3fs3vwfvl27fe8.jpg" 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%2Fq5lput3fs3vwfvl27fe8.jpg" alt="Fig 2. Shows the output of checking for a particular file in the server" width="717" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To move files to and from a local machine to the server we use &lt;strong&gt;secure copy protocol (SCL)&lt;/strong&gt;&lt;br&gt;
a) Moving files from local machine to the server:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;scp C:/Users/Admin/Downloads/Rental_property root@159.65.222.96 /root/&amp;lt;folder&amp;gt;&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%2F9339g4rleuhde74qej2w.jpg" 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%2F9339g4rleuhde74qej2w.jpg" alt="Fig 3. Shows the transfer of files from local machine to the server" width="800" height="97"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;b) Moving files from server to local machine:&lt;br&gt;
&lt;code&gt;scp /root/&amp;lt;folder&amp;gt;/rental_property.csv C:/Users/Admin/Desktop&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%2Frh5mfgfyqbwqnku05xuf.jpg" 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%2Frh5mfgfyqbwqnku05xuf.jpg" alt="Fig 4. Moving data from the server to the local machine" width="800" height="325"&gt;&lt;/a&gt;&lt;br&gt;
To open a file in the server you can use &lt;strong&gt;vim editor&lt;/strong&gt; or nano editor. Once the file is open, you can edit it by clicking &lt;strong&gt;esc&lt;/strong&gt; and using &lt;strong&gt;I&lt;/strong&gt; for inserting. Click escape then full colon then type  &lt;strong&gt;wq(write-quit)&lt;/strong&gt; to permanently save the changes that have been added to the file. Adding ! to the command &lt;strong&gt;wq!&lt;/strong&gt;, means that your changes will overide any changes that were previously added/currently added.&lt;br&gt;
&lt;code&gt;root@class:~# vim &amp;lt;filename&amp;gt;&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%2Fja6f1a53dzr64cy05d6a.jpg" 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%2Fja6f1a53dzr64cy05d6a.jpg" alt="A look at the vim editor" width="800" height="1062"&gt;&lt;/a&gt;&lt;br&gt;
To remove files from a folder you can use &lt;strong&gt;rm&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;rm -r &amp;lt;filename&amp;gt;&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%2F2tr2psgwdc6xwvxoc5su.jpg" 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%2F2tr2psgwdc6xwvxoc5su.jpg" alt="removing a file from the folder using rm" width="704" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To view the contents of a file you can use &lt;strong&gt;more&lt;/strong&gt; or &lt;strong&gt;less&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;root@ip~:# more &amp;lt;filename&amp;gt;&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%2Fejspqsnvk8evcaqvv4mm.jpg" 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%2Fejspqsnvk8evcaqvv4mm.jpg" alt="using more to see the content inside the csv file" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To check the first 5 lines of a file use &lt;strong&gt;head&lt;/strong&gt; and to check the last 5 lines of the code use &lt;strong&gt;tail&lt;/strong&gt;.&lt;br&gt;
&lt;code&gt;root@ip~:# head &amp;lt;filename&amp;gt;&lt;/code&gt;&lt;br&gt;
To update the linux operating system currently running in the virtual private server we use &lt;strong&gt;sudo apt update&lt;/strong&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%2Fjhv1u3pvlc9f4qvg8zxc.jpg" 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%2Fjhv1u3pvlc9f4qvg8zxc.jpg" alt="Updating the Linux server" width="800" height="226"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Working with databases in the server - Postgresql
&lt;/h2&gt;

&lt;p&gt;Once you have access to the server, install postgres using the following code: &lt;code&gt;sudo apt install postgresql postgresql-contrib -y&lt;/code&gt;. check the status of the server and the version of the psql. The status check type: &lt;code&gt;sudo systemctl status postgresql&lt;/code&gt; and the version is &lt;code&gt;psql --version&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%2F8noz9k8b00ixjtaa7kmr.jpg" 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%2F8noz9k8b00ixjtaa7kmr.jpg" alt="Installing postgresql, checking the status and psql version" width="800" height="644"&gt;&lt;/a&gt;&lt;br&gt;
To add a user to a server use:&lt;code&gt;sudo adduser &amp;lt;user&amp;gt;&lt;/code&gt;. If the server rejects the format of the username that you want to add, use: &lt;code&gt;sudo adduser --force-badname username&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%2Fycqlvj7xe6kftr6wtkkq.jpg" 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%2Fycqlvj7xe6kftr6wtkkq.jpg" alt="Adding a user to the server" width="737" height="404"&gt;&lt;/a&gt;&lt;br&gt;
To check if the user was added use &lt;code&gt;more/etc/passwd&lt;/code&gt;. Ensure you check the last line of the list displayed.&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%2Fh7i3wi20l9q101t352dt.jpg" 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%2Fh7i3wi20l9q101t352dt.jpg" alt="Checking if the user is added - check last line." width="800" height="853"&gt;&lt;/a&gt;&lt;br&gt;
To access the database using psql shell we access the postgres instance in the server: &lt;code&gt;sudo -i -u postgres&lt;/code&gt;.then we use &lt;code&gt;psql&lt;/code&gt;command to access the psql shell where we can create a database. &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%2F02j325r29f7awyochcwc.jpg" 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%2F02j325r29f7awyochcwc.jpg" alt="Creating the database and schema" width="799" height="530"&gt;&lt;/a&gt;&lt;br&gt;
After creating the database of your choice, the original postgres super user is the only one who has write and read privileges which makes it a challenge to connect the created database and the new user added to manage the databases.&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%2F81n9ackwgdtnsjk2rdog.jpg" 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%2F81n9ackwgdtnsjk2rdog.jpg" alt="Dbeaver error due to absence of privileges to the new user added to the postgres instance" width="800" height="503"&gt;&lt;/a&gt;&lt;br&gt;
The solution I opted for is altering the postgres password since I didn't set it up when the postgres was 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%2Fe6dbaryfwsmrqm9dpuw7.jpg" 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%2Fe6dbaryfwsmrqm9dpuw7.jpg" alt="Altering the postgres password" width="595" height="114"&gt;&lt;/a&gt;The command to alter postgres password in the psql shell is: &lt;code&gt;ALTER USER postgres WITH PASSWORD &amp;lt;newpassword&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After setting up the postgres database and schema, you need to change a few files in postgresql found in the root folder. The first file is the postgresql.conf that has the  &lt;strong&gt;'listenaddress'&lt;/strong&gt; which should be uncommented after using vim to edit it. The next file to be edited is the pg_hba.conf file that has the firewall setup. Add the following configuration: 'host all all 0.0.0.0 md5' on the last line.&lt;br&gt;
Restart the servers using:&lt;code&gt;sudo systemctl restart postgresql&lt;/code&gt;. This will ensure you don't get the same fault as you saw on dbeaver.&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%2Fdhxf9kzee2z46vop7zqq.jpg" 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%2Fdhxf9kzee2z46vop7zqq.jpg" alt="The expected outcome from the database connection" width="799" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To check if the database has data, we access the psql shell and type the following commands: &lt;strong&gt;\l&lt;/strong&gt; : List all databases, &lt;strong&gt;\c database_name&lt;/strong&gt; : Connect to a different database, &lt;strong&gt;\dt&lt;/strong&gt; : List all tables in the current database, &lt;strong&gt;\du&lt;/strong&gt; : List all the database users and their roles, &lt;strong&gt;\conninfo&lt;/strong&gt;: display current connection details, &lt;strong&gt;\q&lt;/strong&gt; : Exit&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%2F0t8pb030e0z0y98hkr5z.jpg" 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%2F0t8pb030e0z0y98hkr5z.jpg" alt="list all databases" width="799" height="248"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\l&lt;/strong&gt; : List all databases,&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%2Fqk205d0muzqr1b6yt9ae.jpg" 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%2Fqk205d0muzqr1b6yt9ae.jpg" alt="Changing databses in psql" width="800" height="98"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\c database_name&lt;/strong&gt; : Connect to a different database&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%2Fhcmybiojxgxiyrb9ip4r.jpg" 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%2Fhcmybiojxgxiyrb9ip4r.jpg" alt="using dt to check the databases available" width="799" height="248"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\dt&lt;/strong&gt; : List all tables in the current database&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%2Ffja6ypkhoztemnhucddc.jpg" 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%2Ffja6ypkhoztemnhucddc.jpg" alt="using dt to check database name" width="799" height="344"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\du&lt;/strong&gt; : List all the database users and their roles&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%2F9nla0d4811pjmvaa74qd.jpg" 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%2F9nla0d4811pjmvaa74qd.jpg" alt="connection information" width="797" height="78"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;\conninfo&lt;/strong&gt;: display current connection details&lt;/p&gt;

</description>
      <category>linux</category>
      <category>postgres</category>
      <category>database</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Venturing into the data space</title>
      <dc:creator>leslie angu</dc:creator>
      <pubDate>Sat, 30 May 2026 12:20:50 +0000</pubDate>
      <link>https://dev.to/leslie_angu_/venturing-into-the-data-space-22nn</link>
      <guid>https://dev.to/leslie_angu_/venturing-into-the-data-space-22nn</guid>
      <description>&lt;h2&gt;
  
  
  Week 1: &lt;strong&gt;Basic fundamentals&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Day 1: Introduction to Data Analytics, Data Science, Data Engineering and AI.
&lt;/h3&gt;

&lt;p&gt;Data is raw unorganized collection of facts, observations or symbols.&lt;br&gt;
Types of data analytics and the data careers in this fields.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prescriptive Analytics: &lt;em&gt;What should we do about it?&lt;/em&gt;
This is a branch of data that deals with prediction of future outcomes       but also recommends the optimal course of action to take.&lt;/li&gt;
&lt;li&gt;Descriptive Analytics: &lt;em&gt;What happened?&lt;/em&gt;
Summarizes raw historical data into easily readable metrics, charts and reports.&lt;/li&gt;
&lt;li&gt;Predictive Analytics: &lt;em&gt;What is likely to happen?&lt;/em&gt;
Use historical data alongside statistical models and machine learning algorithms to identify trends and to forecast future probabilities.&lt;/li&gt;
&lt;li&gt;Diagnostic Analytics: &lt;em&gt;Why did it happen?&lt;/em&gt;
Involves drilling down into historical data to identify the root causes of specific trends, anomalies, or performance dips.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools that were installed and their purpose in data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DBeaver : This is a data base management tool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vscode: This is an intergrated development environment (IDE), this is where the coding takes place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Python: This is the most preffered language for data analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Github &amp;amp; Git: Git is a tool used to keep track of the changes made to a file and Github is the repository that has a copy of the files that are in the IDE.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 2: Dealing with DBMS &amp;amp; Git
&lt;/h3&gt;

&lt;p&gt;I managed to connect two databases to DBeaver. The first was aiven- I had set up postgresql and the credentials were generated which was straighforward. The second was postgresql which was running locally on my pc, which required the database name - postgres, password and port: 5432&lt;/p&gt;

&lt;p&gt;I already had a github account and it was connected to the git on my local machine. I managed to learn a few more git commands that I hadn't used before like git status.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>git</category>
      <category>virtualmachine</category>
    </item>
  </channel>
</rss>
