<?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: kulsoomzahra</title>
    <description>The latest articles on DEV Community by kulsoomzahra (@kulsoomzahra).</description>
    <link>https://dev.to/kulsoomzahra</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%2F579590%2Ff5a1b9f0-15ec-4af4-8592-2f767139e4c4.jpg</url>
      <title>DEV Community: kulsoomzahra</title>
      <link>https://dev.to/kulsoomzahra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kulsoomzahra"/>
    <language>en</language>
    <item>
      <title>Undoing changes - Git Reset &amp; Git Revert </title>
      <dc:creator>kulsoomzahra</dc:creator>
      <pubDate>Mon, 26 Apr 2021 11:41:16 +0000</pubDate>
      <link>https://dev.to/edualgo/undoing-changes-git-reset-git-revert-18gl</link>
      <guid>https://dev.to/edualgo/undoing-changes-git-reset-git-revert-18gl</guid>
      <description>&lt;p&gt;When you're working on a large opensource project, it is quite obvious for developers to &lt;em&gt;create branches, add files and stage them for commits when they are ready etc&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;However, in some cases, you might realize that the changes that you made are &lt;strong&gt;&lt;em&gt;not that good&lt;/em&gt;&lt;/strong&gt; or the &lt;strong&gt;&lt;em&gt;feature you just added isn't up to the mark&lt;/em&gt;&lt;/strong&gt;. &lt;br&gt;
You modified some files, added and deleted a lot of lines from the code base, but &lt;strong&gt;NOW you want to go back&lt;/strong&gt; and revert the changes.&lt;/p&gt;

&lt;p&gt;Don't worry much because, Git has got your back!&lt;/p&gt;
&lt;h2&gt;
  
  
  Git Revert
&lt;/h2&gt;

&lt;p&gt;The preferred method of undoing shared history is &lt;strong&gt;git revert&lt;/strong&gt;.&lt;br&gt;
 A &lt;strong&gt;revert&lt;/strong&gt; is safer than a &lt;strong&gt;reset&lt;/strong&gt; because it will not remove any commits from a shared history. &lt;strong&gt;&lt;em&gt;A revert will retain the commits you want to undo and create a new commit that inverts the undesired commit&lt;/em&gt;&lt;/strong&gt;. This method is safer for shared remote collaboration because a remote developer can then pull the branch and receive the new revert commit which undoes the undesired commit.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uTJUSMXE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tte6mxh17q93t043h2b8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uTJUSMXE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tte6mxh17q93t043h2b8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  You should never &lt;strong&gt;reset&lt;/strong&gt; a commit which is pushed to a public repo, as it can cause serious problems for other developers of the project.
&lt;/h3&gt;

&lt;p&gt;Instead use &lt;code&gt;git revert&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git log
#This will show the previous commits and their hashes. Copy 6 char hash of initial commit.

git revert &amp;lt;hash of initial commit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check by running&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Git Reset
&lt;/h2&gt;

&lt;p&gt;It is a versatile tool for developers to use.&lt;br&gt;
&lt;code&gt;git reset&lt;/code&gt; is used for undoing changes on a private branch/locally. It has three modes depending upon where you want to reflect changes in Git's internal state management mechanism's. Git has three such state managements: The Commit Tree (HEAD), The Staging Index, and The Working Directory.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oqmNDA8s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qlf4ifaqympu8arun0at.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oqmNDA8s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qlf4ifaqympu8arun0at.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  --soft
&lt;/h2&gt;

&lt;p&gt;This is the safest reset mode.&lt;br&gt;
--soft resets the head to , just like all modes do.&lt;br&gt;
It &lt;strong&gt;does not touch the index file or the working tree at all&lt;/strong&gt; and leaves all your changed files as "Changes to be committed", as git status would put it.&lt;br&gt;
The Staging Index and the Working Directory are left untouched so changes are not lost in either places. Only Commit Tree is altered.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git log
#This will show the previous commits and their hashes. Copy 6 char hash of initial commit.

git reset --soft &amp;lt;hash of initial commit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check by running&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  --mixed
&lt;/h2&gt;

&lt;p&gt;This is the default operating mode.&lt;br&gt;
--mixed has the following impacts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The ref pointers are updated. &lt;/li&gt;
&lt;li&gt;The Staging Index is reset to the state of the specified commit.
&lt;strong&gt;Any changes that have been undone from the Staging Index are moved to the Working Directory&lt;/strong&gt;(you can recover by &lt;code&gt;git add file-1&lt;/code&gt;)
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git log
#This will show the previous commits and their hashes. Copy 6 char hash of initial commit.

git reset &amp;lt;hash of initial commit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can check by running&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  --hard
&lt;/h2&gt;

&lt;p&gt;This is the most DANGEROUS option. Use only when you're sure that you want to delete your work.&lt;br&gt;
--hard has the following impacts &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Commit History ref pointers are updated to the specified commit.&lt;/li&gt;
&lt;li&gt;The Staging Index and Working Directory are reset to match that of the specified commit. 
&lt;strong&gt;Any changes made are lost and matches to the state of the specified commit&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git log
#This will show the previous commits and their hashes. Copy 6 char hash of initial commit.

git reset --hard &amp;lt;hash of initial commit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can check by running&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Here's summing up the three modes, where they render changes.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XUsXL6XI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i01cxriw3uzahxga0wxn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XUsXL6XI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i01cxriw3uzahxga0wxn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>revert</category>
      <category>reset</category>
    </item>
    <item>
      <title>Branches in Git</title>
      <dc:creator>kulsoomzahra</dc:creator>
      <pubDate>Tue, 13 Apr 2021 14:58:43 +0000</pubDate>
      <link>https://dev.to/edualgo/branches-in-git-4pah</link>
      <guid>https://dev.to/edualgo/branches-in-git-4pah</guid>
      <description>&lt;p&gt;Branches are no doubt, one the BEST features of Git. The Master Branch being the default of the repository is automatically created whenever you fork a new repo.&lt;br&gt;
So usually when making commits, we've being committing only to the master branch.&lt;br&gt;
This master branch is the &lt;strong&gt;stable version&lt;/strong&gt; of your code and something you will release that's the reason why we don't really want to try out new code or features on this stable version (master branch) just in case it messes the whole code of your repo. &lt;br&gt;
So we create an &lt;em&gt;isolated space&lt;/em&gt; to experiment new code and features. If all goes good and they seem to work well, &lt;strong&gt;you can merge this isolated space (i.e branch) into the master branch&lt;/strong&gt; thus eliminating the risk of messing up with the stable version of your repo. &lt;/p&gt;

&lt;p&gt;This is why branches are a massive feature. Saving you right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--idKPPCdI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9mq07u1aegj5bq350rf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--idKPPCdI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9mq07u1aegj5bq350rf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Working on a branch
&lt;/h2&gt;

&lt;p&gt;Here's how you can work on branches:&lt;/p&gt;

&lt;p&gt;1) Make a new branch &lt;br&gt;
&lt;code&gt;git checkout -b &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you want to switch to an existing branch use&lt;br&gt;
  &lt;code&gt;git checkout &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2) Open the editor of your choice and make changes&lt;/p&gt;

&lt;p&gt;3) Add the files&lt;br&gt;
&lt;code&gt;git add .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;4) Commit the changes and add a commit message&lt;br&gt;
&lt;code&gt;git commit -m "commit message"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;5) Finally, push these changes to the origin &lt;br&gt;
&lt;code&gt;git push origin&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If error occurs, it's probably because you've not set your remote properly . Try using &lt;br&gt;
&lt;code&gt;git remote set-url origin SSH of your repo&lt;/code&gt; &lt;br&gt;
OR&lt;br&gt;
&lt;code&gt;git push --set-upstream origin &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Congrats! You've merged your branch into the master!&lt;/p&gt;

&lt;h2&gt;
  
  
  Renaming a branch
&lt;/h2&gt;

&lt;p&gt;Rename a branch while currently not on the branch:&lt;br&gt;
&lt;code&gt;git branch -m oldName newName&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Rename the current branch:&lt;br&gt;
&lt;code&gt;git branch -m newName&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deleting a branch
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git branch -d &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Also delete branch from origin using&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git push origin --delete &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>branch</category>
      <category>commits</category>
      <category>master</category>
    </item>
    <item>
      <title>Keeping your forked repo in sync with the remote repo</title>
      <dc:creator>kulsoomzahra</dc:creator>
      <pubDate>Sat, 03 Apr 2021 20:05:50 +0000</pubDate>
      <link>https://dev.to/kulsoomzahra/update-yourself-54ki</link>
      <guid>https://dev.to/kulsoomzahra/update-yourself-54ki</guid>
      <description>&lt;p&gt;While using Git/Github, there's a need to be updated with the latest commits.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a fork and why is it needed?
&lt;/h3&gt;

&lt;p&gt;Forking a repository means creating your &lt;strong&gt;own version&lt;/strong&gt; of the repo where you can make whatever changes you want. It's like a personal copy. It won't affect the original product. With forks, you can change/modify whatever you want and experiment around code freely and fearlessly! Cool right?  &lt;strong&gt;&lt;em&gt;Forking has nothing to do with Git, it is a feature of Github&lt;/em&gt;&lt;/strong&gt;. Thanks to this awesome feature otherwise we wouldn't be able to play around with code at such individual levels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloning
&lt;/h3&gt;

&lt;p&gt;In cloning, the copy of the repository is made at your &lt;strong&gt;local machine&lt;/strong&gt; unlike fork where the copy is restricted to a &lt;strong&gt;repository on Github&lt;/strong&gt; only. This is the main difference between fork and clone.&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%2Flv5jogwk3uc95ayguipt.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%2Flv5jogwk3uc95ayguipt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating your forked repository
&lt;/h2&gt;

&lt;p&gt;You started contributing to a project so you forked it, began working on an issue. In the mean time, other developers of the project pushed changes to the original repo from where you had forked. Now, you're done working and want to open a PR. When you go on Github, you see &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This branch is 5701 commits behind original:master&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, you need to update your forked repo&lt;br&gt;
&lt;em&gt;(Assuming you've cloned already)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Switching to the master branch&lt;br&gt;
&lt;code&gt;git checkout master&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Checking remote versions&lt;br&gt;
&lt;code&gt;git remote -v&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adding/Setting remote&lt;br&gt;
&lt;code&gt;git remote add upstream link&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;link&lt;/strong&gt; is of the original repo from where you forked!&lt;br&gt;
&lt;strong&gt;upstream&lt;/strong&gt; is the master branch of the original repo&lt;br&gt;
               OR&lt;br&gt;
&lt;code&gt;git remote set-url origin SSH of original repo&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fetching all the changes from the upstream&lt;br&gt;
&lt;code&gt;git fetch upstream&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merging&lt;br&gt;
&lt;code&gt;git merge upstream/master&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finallyy pushing your changes &lt;br&gt;
&lt;code&gt;git push&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You're all set to open that PR!&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>fork</category>
      <category>clone</category>
    </item>
    <item>
      <title>Git - Squash</title>
      <dc:creator>kulsoomzahra</dc:creator>
      <pubDate>Fri, 05 Mar 2021 18:43:52 +0000</pubDate>
      <link>https://dev.to/edualgo/git-squash-15lm</link>
      <guid>https://dev.to/edualgo/git-squash-15lm</guid>
      <description>&lt;p&gt;Using &lt;em&gt;&lt;strong&gt;git/github&lt;/strong&gt;&lt;/em&gt;  for your personal projects is pretty easy but when you're a part of an organisation or a large scale project with thousands of users you might get a tough time. One wrong move can cause mess or make the commit tree dirty or anything you don't want which in turn may fuel your Impostor Syndrome! &lt;br&gt;
So hey, HANG ON! You can do it.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Clean Commit Tree
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;&lt;em&gt;Squashing your commits&lt;/em&gt;&lt;/em&gt; can help so here we go&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Switch to the branch where the commit tree is&lt;br&gt;
&lt;code&gt;git checkout &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure everything on your local is pushed to the branch&lt;br&gt;
&lt;code&gt;git add .&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git commit -m "Commit message"&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git push origin &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Squash n previous commits &lt;br&gt;
&lt;em&gt;(n is the no.of commits you want to squash)&lt;/em&gt;&lt;br&gt;
&lt;code&gt;git rebase -i HEAD~3&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fhat442ubl6ahm8gwxpkm.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%2Fhat442ubl6ahm8gwxpkm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, change &lt;em&gt;&lt;strong&gt;pick&lt;/strong&gt;&lt;/em&gt; to &lt;em&gt;&lt;strong&gt;s&lt;/strong&gt;&lt;/em&gt; or &lt;em&gt;&lt;strong&gt;squash&lt;/strong&gt;&lt;/em&gt; in the last 2 commits &lt;br&gt;
Press&lt;br&gt;
a) &lt;code&gt;Ctrl + O&lt;/code&gt; to write out &lt;br&gt;
b) &lt;code&gt;Enter&lt;/code&gt; to save changes&lt;br&gt;
c) &lt;code&gt;Ctrl + X&lt;/code&gt; to exit&lt;/p&gt;

&lt;p&gt;Now you can edit the final commit message .&lt;br&gt;
Repeat a,b,c &lt;/p&gt;

&lt;p&gt;Don't forget to &lt;code&gt;PUSH&lt;/code&gt; your changes on to the branch&lt;br&gt;
&lt;code&gt;git push origin &amp;lt;branch name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If this doesn't work force push your changes&lt;br&gt;
&lt;code&gt;git push origin &amp;lt;branch name&amp;gt; -f&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You're Done! Now you have a clean commit tree.&lt;/p&gt;

</description>
      <category>githunt</category>
      <category>github</category>
      <category>squashing</category>
      <category>commit</category>
    </item>
    <item>
      <title>Tor - The Onion Router </title>
      <dc:creator>kulsoomzahra</dc:creator>
      <pubDate>Mon, 22 Feb 2021 07:16:52 +0000</pubDate>
      <link>https://dev.to/edualgo/tor-the-onion-router-4imm</link>
      <guid>https://dev.to/edualgo/tor-the-onion-router-4imm</guid>
      <description>&lt;h2&gt;
  
  
  What is Tor?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.torproject.org/"&gt;Tor&lt;/a&gt; is a network of virtual tunnels that allows you to improve your privacy and security on the Internet.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Privarcy is a human right. We at Tor advance human rights and defend your privacy online through free software and open networks&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tor works by sending your traffic through three random servers (also known as relays) in the Tor network. The last relay in the circuit &lt;strong&gt;(the exit relay)&lt;/strong&gt; then sends the traffic out onto the public Internet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KDK4jtE8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fo0393t92yra0ad97vv9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KDK4jtE8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fo0393t92yra0ad97vv9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The image above illustrates a user browsing to different websites over Tor. The green middle computers represent relays in the Tor network, while the three keys represent the layers of encryption between the user and each relay.&lt;/p&gt;

&lt;p&gt;It protects you by bouncing your communications around a distributed network of relays run by volunteers all around the world, it prevents somebody watching your Internet connection from learning what sites you visit and it prevents the sites you visit from learning your physical location.&lt;/p&gt;

&lt;p&gt;This collection of volunteer relays is called the Tor network.&lt;/p&gt;

&lt;p&gt;The way most people use Tor is with the Tor Browser, which is based on Firefox ESR and comes bundled with privacy enhancing &amp;amp; anti-fingerprinting features.&lt;/p&gt;

&lt;h2&gt;
  
  
  So is Tor a VPN?
&lt;/h2&gt;

&lt;p&gt;Nope. &lt;a href="https://matt.traudt.xyz/posts/you-want-tor-24tFBCJV/"&gt;Tor is NOT a VPN&lt;/a&gt; and furthermore it is not recommended to use Tor and VPN together. &lt;br&gt;
These are fundamentally very different. In the case of VPN, you're just transferring your trust from your internet service provider (ISP) to the VPN provider.&lt;br&gt;
The VPN provider can log any data while you use their network and anyone snooping on the VPN connection can also &lt;em&gt;easily gain knowledge of your activities.&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;While using Tor&lt;/em&gt;&lt;/strong&gt;, your connection is made to the website by bouncing the connection through three different relays so the website you're connecting to can only see the IP address of the 'exit' relay&lt;/p&gt;

&lt;h2&gt;
  
  
  Some more about Tor
&lt;/h2&gt;

&lt;p&gt;The Tor Browser furthermore comes bundled with features like: a different circuit of every different domain, i.e. a new circuit for every website you're connecting to so as to mitigate cross-site tracking; 'Security Settings' with which you can also disable most of the harmful JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The noteworthy part is that the idea is &lt;strong&gt;not to hide&lt;/strong&gt; that you're using the Tor network but to &lt;strong&gt;anonymize your activities on the Tor network.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tor is an essential tool for privacy and anonymity on the internet. It is a tool used by millions of people all around the globe - from journalists to human rights activists to ordinary people&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;Direct access to the Tor network may sometimes be blocked by your Internet Service Provider or by a government. Tor Browser includes some circumvention tools for getting around these blocks. These tools are called &lt;strong&gt;pluggable transports&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;I'll talk more about this in incoming blogs so stay tuned!&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>anonymity</category>
      <category>encryption</category>
      <category>surveillance</category>
    </item>
    <item>
      <title>Getting started with GPG(GnuPG)</title>
      <dc:creator>kulsoomzahra</dc:creator>
      <pubDate>Mon, 15 Feb 2021 16:53:38 +0000</pubDate>
      <link>https://dev.to/edualgo/getting-started-with-gpg-gnupg-135o</link>
      <guid>https://dev.to/edualgo/getting-started-with-gpg-gnupg-135o</guid>
      <description>&lt;p&gt;GNU Privacy Guard (GPG or GnuPG) can be used to encrypt files for confidentiality and also sign files for authenticity. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is a GPG or GnuPG?
&lt;/h2&gt;

&lt;p&gt;GnuPG, is a tool that is made in accordance with the OpenPGP Internet standard . It is used primarily for secure communication and data storage. It is a tool that adds encryption and signs data.&lt;/p&gt;

&lt;p&gt;Package repositories are downloaded round the world. Digital signatures are used to ensure that you get an exact copy from the original packager and not a malicious version from a compromised site.&lt;br&gt;
OpenPGP programs such as GPG are used to sign and verify those packages ensuring the authenticity of the source.&lt;/p&gt;

&lt;p&gt;There is local disk encryption which protects data at rest. However, if you wish that only the intended recipient can open a file you send by email or drop into a shared folder, you need to encrypt that individual file.&lt;br&gt;
OpenPGP products like GPG can encrypt a file with a shared symmetric key or with asymmetric key pairs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Using GnuPG
&lt;/h2&gt;

&lt;p&gt;GnuPG comes installed with most Linux distributions.&lt;br&gt;
To check your current version&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ yum list gnupg*&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The first time you run any &lt;em&gt;gpg&lt;/em&gt; command, a configuration directory and keyring will be created in your home directory. For example, if you run&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gpg --list-keys&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;to display keys you may see the following message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gpg --list-keys
gpg: directory '/home/bestuser/.gnupg' created
gpg: keybox '/home/bestuser/.gnupg/pubring.kbx' created
gpg: /home/bestuser/.gnupg/trustdb.gpg: trustdb created
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Encrypting a file with a shared secret
&lt;/h2&gt;

&lt;p&gt;You're all good to encrypt a file if the GnuPG is installed. For symmetric encryption, use the &lt;code&gt;-c&lt;/code&gt; or &lt;code&gt;--symmetric&lt;/code&gt; option and pass the file you want to encrypt. Here I'm encrypting example.txt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gpg -c example.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The encrypted file will have a &lt;code&gt;gpg&lt;/code&gt; extension i.e &lt;code&gt;example.txt.gpg&lt;/code&gt;&lt;br&gt;
This encrypted file can now be sent to a remote location.&lt;/p&gt;
&lt;h2&gt;
  
  
  Decryption
&lt;/h2&gt;

&lt;p&gt;To decrypt the file, use the &lt;code&gt;-d&lt;/code&gt; or &lt;code&gt;--decrypt&lt;/code&gt; option.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gpg -d sample1.txt.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Determining how to share the passphrase to decrypt it is a separate issue.&lt;/p&gt;

</description>
      <category>encryption</category>
      <category>privacy</category>
      <category>security</category>
      <category>signature</category>
    </item>
  </channel>
</rss>
