<?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: Vignesh</title>
    <description>The latest articles on DEV Community by Vignesh (@ckvignesh).</description>
    <link>https://dev.to/ckvignesh</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%2F564219%2F44f7dcaa-e89c-423b-9923-00d739835d59.jpg</url>
      <title>DEV Community: Vignesh</title>
      <link>https://dev.to/ckvignesh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ckvignesh"/>
    <language>en</language>
    <item>
      <title>Open Source and 100 Days of Code: Week 1 Update</title>
      <dc:creator>Vignesh</dc:creator>
      <pubDate>Sat, 22 Jan 2022 14:07:02 +0000</pubDate>
      <link>https://dev.to/ckvignesh/open-source-and-100-days-of-code-week-1-update-1ig7</link>
      <guid>https://dev.to/ckvignesh/open-source-and-100-days-of-code-week-1-update-1ig7</guid>
      <description>&lt;h2&gt;
  
  
  Prologue
&lt;/h2&gt;

&lt;p&gt;My first attempt at #100DaysOfCode was back in October 2021. It also coincided with the Hacktoberfest 2021 (which was in October). I started contributing to Open Source without really intending to. I saw a Repo that had some missing links and just wanted to let the maintainer/owner know the updated one. That was my first OS Contribution &lt;/p&gt;

&lt;p&gt;I have written about it in my first Hashnode article: &lt;a href="https://ckvignesh.hashnode.dev/my-first-pull-request-that-was-merged-and-why-you-must-contribute-to-open-source"&gt;My first Pull Request that was merged and why you must contribute to Open Source&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But, I had to abandon it after 19 days of a continuous coding streak. I did 21 days where the last 2 days were after an interruption.&lt;/p&gt;


&lt;center&gt;
&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1NepP7TH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1642821715305/9AmzJFb2g.png" alt="image.png" width="761" height="306"&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ny4MAq2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1642821919234/KxojSsDxl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ny4MAq2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1642821919234/KxojSsDxl.png" alt="Git Graph 1.png" width="500" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;


&lt;/center&gt;

&lt;p&gt;I was not burned out but, just skipped a couple of days after the 21st day and lost continuity. It was around the same time that my back started aching as I was spending late nights and weekends sitting on my bed, learning to code. That was a bad idea and I refrained from doing that again.&lt;/p&gt;

&lt;p&gt;Though I was not successful in finishing the challenge in that attempt, it helped me customize my &lt;a href="https://github.com/ckvignesh"&gt;Github landing page&lt;/a&gt; &amp;amp; build a resume website. I became better at using Git and Markdown.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And the most important part - I rediscovered my passion for programming thanks to supportive communities. I also found a &lt;a href="https://twitter.com/eduardovedes"&gt;Mentor&lt;/a&gt; to help me progress faster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I can't stress the importance of getting a community and a mentor to support and guide you in this process. The learning that happens in a cohort can't be replicated in an isolated study environment.&lt;/p&gt;

&lt;p&gt;Now, I had set up a good environment to get into coding &amp;amp; also got some like-minded people to travel with. The journey had become easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning 0.0
&lt;/h2&gt;

&lt;p&gt;As Programmers, we are accustomed to starting things with 0. It's theoretically relevant too since I had to restart. So here's what I learned during my first attempt. Some of them are documented as blogs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://ckvignesh.hashnode.dev/github-submodules-and-how-you-can-use-them-for-your-projects"&gt;Github Submodules and how you can use them for your Projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ckvignesh.hashnode.dev/configuring-githubs-personal-access-token-to-make-code-pushes-easier"&gt;Configuring Github's Personal Access Token to Make Code Pushes Easier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Improved my CSS knowledge by playing some games like &lt;a href="https://flexboxfroggy.com/"&gt;Flexbox Froggy&lt;/a&gt;, &lt;a href="https://codepip.com/games/grid-garden/"&gt;Grid Garden&lt;/a&gt; &amp;amp; &lt;a href="http://www.flexboxdefense.com/"&gt;Flex Box Defense&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  New Innings
&lt;/h2&gt;

&lt;p&gt;I took some time to re-organize everything after I abandoned my first attempt at the #100DaysofCode. I restarted it in the last week of December 2021. Since there was a gap of more than a month between my first attempt and the second one, I decided to start from 0 rather than continue it from where I left off. &lt;/p&gt;

&lt;p&gt;But, even the 2nd attempt was not easy. I could not code consistently because of too much "context-switching". There were a lot of factors that distracted me. I took care of all that in December &amp;amp; sorted it out. After that, I took a week's break and resumed the #100DaysOfCode challenge.&lt;/p&gt;


&lt;center&gt;
&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--essOzY5i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1642822047094/DjoV7YOY6.png" alt="image.png" width="765" height="311"&gt;&lt;br&gt;
&lt;em&gt;Please don't mind the inconsistency in the &lt;code&gt;Longest Streak&lt;/code&gt; figures here and above. It was caused by me deleting a Repo I was working on, at that time.&lt;/em&gt;&lt;br&gt;
&lt;/center&gt;
&lt;h2&gt;
  
  
  Learning 1.0
&lt;/h2&gt;

&lt;p&gt;I began to rethink my strategy during the second attempt of #100DaysOfCode. The main intention of the #100DaysofCode challenge was to learn consistently and move ahead to get a developer job. It need not be &lt;code&gt;Coding&lt;/code&gt; as such, every day. It could be something like reading documentation, books and papers or solving some mathematical problems.&lt;/p&gt;

&lt;p&gt;I read Tiia's &lt;a href="https://blog.tiia.rocks/making-100daysofcode-work-for-me-with-new-rules"&gt;Making #100DaysOfCode work for me with new rules&lt;/a&gt; around that time which had an overlap with my thoughts. There are a few more points in her article and I agree with those since it aligns with the goal of &lt;code&gt;getting consistently better at programming&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
I joined the &lt;a href="https://www.freecodecamp.org/"&gt;freecodecamp&lt;/a&gt; &lt;code&gt;2022 Become-a-Dev New Year's Resolution Challenge which overlaps with the #100DaysOfCode Challenge&lt;/code&gt;.
&lt;blockquote&gt;
&lt;p&gt;Take the 2022 Become-a-Dev New Year's Resolution Challenge:&lt;br&gt;📊Max your stats in &lt;a href="https://twitter.com/hashtag/LearnToCodeRPG?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#LearnToCodeRPG&lt;/a&gt;&lt;br&gt;⌨️Start &lt;a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#100DaysOfCode&lt;/a&gt;&lt;br&gt;🛢️Finish the fCC Relational Databases Cert&lt;br&gt;📜Publish 3 tutorials on &lt;a href="https://twitter.com/hashnode?ref_src=twsrc%5Etfw"&gt;@Hashnode&lt;/a&gt;&lt;br&gt;To accept: quote-retweet this saying "I'm in." I'll add you to my Twitter list. 🧵&lt;/p&gt;— Quincy Larson (&lt;a class="mentioned-user" href="https://dev.to/ossia"&gt;@ossia&lt;/a&gt;) &lt;a href="https://twitter.com/ossia/status/1476581551873925123?ref_src=twsrc%5Etfw"&gt;December 30, 2021&lt;/a&gt;
&lt;/blockquote&gt; &lt;/li&gt;
&lt;li&gt;
Started playing the &lt;code&gt;Learn To Code RPG&lt;/code&gt; Game (which was a part of the 2022 Become-a-Dev New Year's Resolution Challenge). Corrected a typo in the game. (Not that important but, it was a good exercise). I would tell every aspiring developer to play that game before you start learning to code. I've written why you should, here:
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#100DaysOfCode&lt;/a&gt; &lt;br&gt;&lt;br&gt;Day 3: I had to pause my &lt;a href="https://twitter.com/hashtag/100daysofcode?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#100daysofcode&lt;/a&gt; for close to a week as I got caught up with some personal stuff.&lt;br&gt;&lt;br&gt;I played the RPG game of &lt;a href="https://twitter.com/freeCodeCamp?ref_src=twsrc%5Etfw"&gt;@freeCodeCamp&lt;/a&gt; when I got some time over the last week&lt;br&gt;&lt;br&gt;Managed to get the stats here.&lt;br&gt;&lt;br&gt;But there are a few important lessons... &lt;a href="https://t.co/SLTDRJ6hCI"&gt;pic.twitter.com/SLTDRJ6hCI&lt;/a&gt;&lt;/p&gt;— Vignesh | Programmer | Writer (@vigneshCodes) &lt;a href="https://twitter.com/vigneshCodes/status/1482058649191469056?ref_src=twsrc%5Etfw"&gt;January 14, 2022&lt;/a&gt;
&lt;/blockquote&gt; &lt;/li&gt;
&lt;li&gt;
Attempted quizzes at &lt;a href="https://developerquiz.org/"&gt;Learn to Code RPG&lt;/a&gt; Quiz website.&lt;/li&gt;
&lt;li&gt;
Revisited freecodecamp's Javascript Learning Path.&lt;/li&gt;
&lt;li&gt;
Started working on a few personal React Projects.&lt;/li&gt;
&lt;li&gt;
Started learning &lt;a href="https://remix.run/"&gt;Remix&lt;/a&gt; to build a website.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  An idea for a new Open Source Project
&lt;/h2&gt;

&lt;p&gt;I began to pen down a book, which was about something I started thinking since December 2020. My first attempts to write it were on Google Docs. It was fine till I wrote about 5000 words. After that, it became difficult to organize and re-order chapters in it.&lt;/p&gt;

&lt;p&gt;Later, I discovered some specific tools for authors. I made some notes after researching about it here: &lt;a href="https://ckvignesh.hashnode.dev/writing-tools-for-your-next-book"&gt;Writing Tools For Your Next Book&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There were some free tools and some paid ones too. I chose &lt;a href="https://www.theologeek.ch/manuskript/"&gt;Manuskript&lt;/a&gt; to write my book. I also liked &lt;a href="https://wavemaker.co.uk/"&gt;Wavemaker&lt;/a&gt; and would recommend that too. &lt;/p&gt;

&lt;p&gt;These were just two of the many awesome Free and Open Source Software for writing books on Linux. But, they had their limitations which is when I realized I needed a better solution for my problem. So that's when I thought of creating a new tool.&lt;/p&gt;

&lt;p&gt;My goal would be to create a new OS Project that gives writers an awesome interface to write books. It may take years but, it'll help a lot of writers who may not be able to afford the expensive proprietary software.&lt;/p&gt;

&lt;p&gt;I started a &lt;a href="https://github.com/ckvignesh/writingApp"&gt;Repo&lt;/a&gt; for it on Github. Feel free to join the discussions and contribute.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://discord.gg/arhYabfc"&gt;The community where I found my mentor&lt;/a&gt; - @&lt;a href="https://dev.to@eduardovedes"&gt;Eduardo Vedes&lt;/a&gt;: iamFreeCodeCamp. There are many other stalwarts there. You're welcome to join &amp;amp; start your journey. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.eddiejaoude.io/course-github-profile-landing"&gt;Course to improve your Github Landing Page&lt;/a&gt;. Eddie also has a wonderful community for Open Source.&lt;/li&gt;
&lt;li&gt;Learn &lt;a href="https://github.com/Asabeneh/30-Days-Of-JavaScript"&gt;Javascript&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/Asabeneh/30-Days-Of-React"&gt;React&lt;/a&gt; from scratch.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.freecodecamp.org/learn/"&gt;freecodecamp's learning path&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.100daysofcode.com/"&gt;#100DaysOfCode - The Official Website for the Challenge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/news/2022-become-a-dev-new-years-resolution-challenge/"&gt;Take the 2022 Become-a-Dev New Year's Resolution Challenge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>100daysofcode</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>Lessons For Newbie Developers from The War of Art</title>
      <dc:creator>Vignesh</dc:creator>
      <pubDate>Fri, 26 Nov 2021 10:22:36 +0000</pubDate>
      <link>https://dev.to/ckvignesh/lessons-for-newbie-developers-from-the-war-of-art-15la</link>
      <guid>https://dev.to/ckvignesh/lessons-for-newbie-developers-from-the-war-of-art-15la</guid>
      <description>&lt;p&gt;In October, I challenged myself to take up the #100DaysofCode challenge after I read about &lt;a href="https://www.freecodecamp.org/news/the-crazy-history-of-the-100daysofcode-challenge-and-why-you-should-try-it-for-2018-6c89a76e298d/"&gt;Alex Kallaway's journey&lt;/a&gt; on freeCodeCamp. On my journey, I have faced many ups and downs. Some parts of the journey were easy and some were really hard. But, I never stopped learning.&lt;/p&gt;

&lt;p&gt;Becoming a software developer is no easy job. It's a continuous journey of learning. When the journey is easy, it's a pleasure to travel. But, the real test of grit, perseverance and patience takes place when the odds are against you. That's when I came across an article by &lt;a href="https://www.freecodecamp.org/news/learning-to-code-when-it-gets-dark-e485edfb58fd/#.yjh0fehje"&gt;Alex Kallaway&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I believe most developers out there are self-taught (at least most of the ones I personally know).&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;The best engineers I’ve worked with learned to code before or after college, rarely during.&lt;/p&gt;— Sahil (&lt;a class="mentioned-user" href="https://dev.to/shl"&gt;@shl&lt;/a&gt;) &lt;a href="https://twitter.com/shl/status/1266731956059824128?ref_src=twsrc%5Etfw"&gt;May 30, 2020&lt;/a&gt;
&lt;/blockquote&gt; 

&lt;p&gt;Alex Kallaway mentioned 3 books in his article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The War of Art: Winning the Inner Creative Battles&lt;/li&gt;
&lt;li&gt;The Power of Habit: Why We Do What We Do in Life and Business&lt;/li&gt;
&lt;li&gt;The Obstacle Is the Way: The Timeless Art of Turning Trials into Triumph&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I read &lt;code&gt;The War of Art: Winning the Inner Creative Battles&lt;/code&gt; in less than half a day. It's a small book that's crystal clear and something that'll make the reader feel it was written for them.&lt;/p&gt;

&lt;p&gt;It's written in 3 parts. The first one deals with the bad guy - &lt;code&gt;Resistance&lt;/code&gt;. Alex talks about it in his article. The second one is about how to deal with the bad guy &lt;code&gt;Turning Pro&lt;/code&gt;. The third one is about inspiration. The book is a treat for those who are spiritual. If you aren't, no problem it'll still teach you many invaluable lessons.&lt;/p&gt;

&lt;p&gt;Here are some lessons I have learnt from it and every developer or an aspiring developer needs to know. (I'm not a fan of the &lt;code&gt;aspiring developer&lt;/code&gt; label. Either you're a developer or not) &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Beating &lt;code&gt;resistance&lt;/code&gt; is not difficult but boring.
&lt;/h3&gt;

&lt;p&gt;Steven starts the book with how he spends his day. As a writer, he has to rely on creativity to get going. But, this is where Resistance comes to play. He wins over it by following a routine. Though there's nothing extraordinary or fancy in it, he describes how he wins over &lt;code&gt;resistance&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There's a secret that real writers know that wannabe writers don't, and the secret is this: It's not the writing part that's hard. What's hard is sitting down to write. What keeps us from sitting down is Resistance. - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It can get boring to solve javascript coding problems or even learn HTML and CSS. Most of the work that happens in production is boring too. But, the boring tasks need a lot of practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Understand that everyone struggles with &lt;code&gt;resistance&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Comparison is the thief of joy. It's easy to compare yourselves to a senior and established developer and feel that you can never be like that. &lt;/p&gt;

&lt;p&gt;Remember, they also went through the same fears, struggles and feelings. Who knows, they may also be going through self-doubt and anxiety! As a developer, your main goal is to learn to code, not focus on what others are doing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Everyone who has a body experiences Resistance - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Do not look up and get overwhelmed. If you're a beginner developer, looking at complex projects and apps can demotivate you. That's because you're trying to see the hilltop from a valley. Do not focus on becoming someone. Try to do something.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Grandiose fantasies are a symptom of Resistance. They're the sign of an amateur. The professional has learned that success, like happiness, comes as a by-product of work. - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. It's not a one-day battle
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Resistance&lt;/code&gt; has to be fought anew, every day. Not every day is the same. Some days are really overwhelming. Some of you may be learning to code with a full-time job or other responsibilities. Every day is a new day and a chance to move ahead.&lt;/p&gt;

&lt;p&gt;Had a bad day, yesterday? Forget it and start afresh.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;RESISTANCE NEVER SLEEPS - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. The best opportunity is most likely one step ahead of your worst setback
&lt;/h3&gt;

&lt;p&gt;We all have problems. Some of them seem like the worst and can be devastating. The COVID Pandemic was one that caused a lot of distress at a collective level. &lt;/p&gt;

&lt;p&gt;But, all this can be conquered when you conquer &lt;code&gt;Resistance&lt;/code&gt;. Keep this in mind - the fight is not over as long as you're alive.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;RESISTANCE IS MOST POWERFUL AT THE FINISH LINE - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5. Do not Rationalize.
&lt;/h3&gt;

&lt;p&gt;Rationalization means &lt;code&gt;attempt to explain or justify (behaviour or an attitude) with logical reasons, even if these are not appropriate&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;As a developer struggling to learn a new technology or programming language, understand that it's hard. It's going to be tough and that should not be an excuse for you to drop it or go in search of an easier technology.&lt;/p&gt;

&lt;p&gt;Many of you may be trying to juggle a full-time job, personal responsibilities and study. But, remember to keep your eyes on your goal - becoming an expert Developer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What Resistance leaves out, of course, is that all this mean s diddly. Tolstoy had thirteen kids and wrote War and Peace. - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6. Put yourself out there and cut through criticism
&lt;/h3&gt;

&lt;p&gt;Are you learning web development? Share your journey publicly. Are you building projects? Talk about it. Make connections. People out there must know you exist.&lt;/p&gt;

&lt;p&gt;It can be difficult. You may get criticized and mocked by people who don't even know to write a "Hello World" program. Be your own critic.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Individuals who are realized in their own lives almost never criticize others. If they speak at all, it is to offer encouragement. - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There's a slight difference between showing off and putting yourself out there. The former is mostly boastful and condescending. It may border being unethical too if you try to show off things that you can't do.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A professional's work has style; it is distinctively his own. But he doesn't let his signature grandstand for him. His style serves the material. He does not impose it as a means of drawing attention to himself. - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  7. The path to mastery is alone at first but not always
&lt;/h3&gt;

&lt;p&gt;When you embark on a new journey, you may be alone. But, fret not, you'll soon discover similar people and some may even join you. Keep the faith and go ahead.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here's the trick: We're never alone. As soon as we step outside the campfire glow, our Muse lights on our shoulder like a butterfly. The act of courage calls forth infallibly that deeper part of ourselves that supports and sustains us. - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  8. Fall down if you must but once. Not more than that.
&lt;/h3&gt;

&lt;p&gt;There may be some bad days that force you to miss practice or work for a day. If it's something real and needs more than a day - gladly take it. But if it's lethargy or aimlessness that forces you to do it, don't skip studying/building for more than a day.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The professional has learned better. He respects Resistance. He knows if he caves in today, no matter how plausible the pretext, he'll be twice as likely to cave in tomorrow. - Steven Pressfield (The War of Art)&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>WordPress website hosting using AWS</title>
      <dc:creator>Vignesh</dc:creator>
      <pubDate>Tue, 23 Nov 2021 07:45:37 +0000</pubDate>
      <link>https://dev.to/ckvignesh/wordpress-website-hosting-using-aws-4j45</link>
      <guid>https://dev.to/ckvignesh/wordpress-website-hosting-using-aws-4j45</guid>
      <description>&lt;p&gt;This article deals with three tasks — creating a WordPress Instance on AWS, A form to add photos and comments and the Security aspects of the website.&lt;/p&gt;

&lt;p&gt;This article is divided into three parts. References at the end.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Creation of a Wordpress Instance on AWS&lt;/li&gt;
&lt;li&gt; Adding Photos and Comments&lt;/li&gt;
&lt;li&gt; Brief instructions on-&lt;/li&gt;
&lt;li&gt; How the website is secured&lt;/li&gt;
&lt;li&gt; How users will be provided secure access to website&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Creation of a Wordpress Instance on AWS&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt; Login to the AWS console and go to the Instances menu under EC2 services of AWS console. Click on the “launch instance” option to create the new Wordpress instance. (WPBeginners-WordPress-Tutorials) (Zen)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Click on the “AWS Marketplace” in the left window and search for the “Wordpress certified by Bitnami and Automatic option”. Select it and proceed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B33W_JRq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652426133/bqh3ZIydr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B33W_JRq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652426133/bqh3ZIydr.png" alt="" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 2&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Select the “t2.micro” option which is eligible for free tier and proceed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wkZKVwGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652428386/tEOpwNTdt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wkZKVwGM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652428386/tEOpwNTdt.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 3&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Set the Network to the default VPC, give no preferences to the Subnet and use the subnet setting for the Auto-Assign IP&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n6FvzPXl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652430564/d-0BrxR9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n6FvzPXl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652430564/d-0BrxR9f.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 4&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Configure the security group to allow HTTP and HTTPS traffic, so that any user can enter and submit the comments&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oN8P1KTe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652432831/6tiGB4ySk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oN8P1KTe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652432831/6tiGB4ySk.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 5&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Review the instance before it’s launched&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Mk0w-hg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652435202/-G12HAZUk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Mk0w-hg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652435202/-G12HAZUk.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 6&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Download the new key pair after naming it and proceed to create the instance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MePEc2Bo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652437681/y6tpl7Ah6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MePEc2Bo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652437681/y6tpl7Ah6.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 7&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Wait as the instance is being created.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kTCIct3M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652439840/y-53KY2wU.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kTCIct3M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652439840/y-53KY2wU.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 8&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Now the instance is seen on the list of the instances in our EC2 menu.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lXwJn-ev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652442335/71yzAl0at.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lXwJn-ev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652442335/71yzAl0at.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 9&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Click on Actions, Instance Settings and System Log as shown in the figure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a3IydKYV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652445457/olYJV8kwg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a3IydKYV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652445457/olYJV8kwg.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 10&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Scroll down to the bottom of the System log page until you see the Setting Bitnami application password. Select it, copy and paste it to a notepad file. This is for future reference.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M28W9-K6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652447859/iVkGnKgdb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M28W9-K6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652447859/iVkGnKgdb.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 11&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Copy the public IP of the instance and save it again, for future reference.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aTPn0rJD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652450250/XjFtAZ4cM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aTPn0rJD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652450250/XjFtAZ4cM.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 12&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now copy paste the public IP of that instance and see the default Wordpress website that is hosted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bnDapdLt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652453179/vlVzfdV9c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bnDapdLt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652453179/vlVzfdV9c.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 13&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Scroll down to the bottom of the page and click on the “Login option”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8P5R1nWo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652455789/ChluDj0hk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8P5R1nWo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652455789/ChluDj0hk.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 14&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Enter “user” in the username and the saved password into the password box.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bx5evSkm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652457921/wDDorJWG8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bx5evSkm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652457921/wDDorJWG8.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 15&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; The login is successful!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e6YdVeMZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652460272/coWxPNRWM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e6YdVeMZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652460272/coWxPNRWM.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 16&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Adding photos and comments under a post.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Wordpress generally allows the user to accept ordinary string comments from the public. This can be subjected to moderation or approval. Follow these steps to accept picture comments. (WPBeginner-WordPress-Tutorials)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Click on “plug-in” and then search for the DCO Comment Attachment plug-in. Install and activate it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pulfPPdT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652462670/N0mfS_4Fh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pulfPPdT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652462670/N0mfS_4Fh.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 17&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Check its progress in the plug-in list. Now, it has to be configured.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OnBUptvU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652465630/1sUtSkuFz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OnBUptvU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652465630/1sUtSkuFz.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 18&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to “Settings” and select the DCO Comment Attachment Settings. The settings have to be configured now.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UX_7RRrK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652467973/EKpqHWCXnP.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UX_7RRrK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652467973/EKpqHWCXnP.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 19&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; We must allow only images to be posted. Hence, uncheck all the other formats.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ct1_tCgA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652470348/GvurNNKU_.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ct1_tCgA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652470348/GvurNNKU_.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 20&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Don’t forget to save the settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tG89cyKC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652472546/E2zKGFcY2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tG89cyKC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652472546/E2zKGFcY2.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 21&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Now go to the page and edit the layout, caption etc. Under the “Discussion” menu in the right, enable “Allow Comments”.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cssQf8gK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652475093/hsELXD8EU.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cssQf8gK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652475093/hsELXD8EU.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 22&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Now, let’s test the page. Go to the URL after logging out as the administrator.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UBt8xVnb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652477260/UK9AV2TVpW.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UBt8xVnb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652477260/UK9AV2TVpW.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 23&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; This is the page to add the comment and a photo. Once this is done,&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--crXBGfrR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652479431/gVHsLFpO6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--crXBGfrR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652479431/gVHsLFpO6.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 24&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Once it’s completed, click on the “Submit” option.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PSXh3Bo2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652481519/3RVWy6bsi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PSXh3Bo2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652481519/3RVWy6bsi.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 25&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Now, the uploaded picture and the text of the comment have been submitted for moderation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R80IpUeD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652483756/0Lr0xi-o3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R80IpUeD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652483756/0Lr0xi-o3.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 26&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; The comment which was submitted is seen in the bottom, along with the name of the user who sent it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7llXgMWd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652485982/NpxKZ5xJx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7llXgMWd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652485982/NpxKZ5xJx.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 27&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Click on the “Media Library” on the left side to see the media submitted by the user. This gets stored on the Wordpress website.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l0MXJyA---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652488149/cOnYoUV5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l0MXJyA---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652488149/cOnYoUV5t.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 28&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Brief instructions on-&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;How the website is secured&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;How users will be provided secure access to website&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;How the website is secured:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Website has a registration page where the user can request the admin for an account. There is no way for any user to create an ID without the permission of the Administrator. This by itself is the biggest check to prevent the intrusion attempts. The administrator has set strong password policies for the root account and for the user accounts.&lt;/p&gt;

&lt;p&gt;The Wordpress Hosting service provides an inbuilt firewall which keeps out most of the unnecessary traffic and ensures scalability along with the security apparatus. Therefore, the identity of the users and the administrator is safe.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;How users will be provided secure access to website:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This will be done by the Administrator creating a new user ID for the user to enter. Follow the steps to do it. (Balkhi) (WPBeginner-Wordpress-Tutorials)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Search for a user registration plug-in and download it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N4JjrroQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652490891/vjIBRPNNE.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N4JjrroQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652490891/vjIBRPNNE.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 29&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to the General settings under the user registration tab (in left menu) and review the default settings.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LDQHgQKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652493067/r66P2xn-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LDQHgQKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652493067/r66P2xn-3.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 30&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; The Admin is the default user. Click on “Add new” on top to add a new user.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IMsviddq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652495260/3XW4rl8iU.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IMsviddq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652495260/3XW4rl8iU.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 31&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Set username, their email ID (for password reset), name and password (auto generated). Tick the “send user notification” which sends an email to the user with the creation of the account, where password is encrypted and sent. Confirm and proceed. The&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AE1c00zV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652497391/cgvAFJwoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AE1c00zV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652497391/cgvAFJwoh.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 32&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Now the new user is added to the list.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O9W-yOHH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652499617/qLsXlmc4P.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O9W-yOHH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652499617/qLsXlmc4P.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 33&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; The user has now been able to successfully login to his ID with the credentials provided.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MP2BqSrk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652501944/wCgHgAZ9p.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MP2BqSrk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637652501944/wCgHgAZ9p.jpeg" alt="" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 34&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;Balkhi, S. (n.d.). &lt;em&gt;HOW TO ALLOW USER REGISTRATION ON YOUR WORDPRESS SITE&lt;/em&gt;. Retrieved from WPBeginner: &lt;a href="https://www.wpbeginner.com/beginners-guide/how-to-allow-user-registration-on-your-wordpress-site/"&gt;https://www.wpbeginner.com/beginners-guide/how-to-allow-user-registration-on-your-wordpress-site/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WPBeginners-WordPress-Tutorials. (n.d.). &lt;em&gt;How to Install a WordPress Plugin (3 Different Methods)&lt;/em&gt;. Retrieved from YouTube: &lt;a href="https://www.youtube.com/watch?v=QXbrdVjWaME&amp;amp;feature=youtu.be"&gt;https://www.youtube.com/watch?v=QXbrdVjWaME&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WPBeginner-Wordpress-Tutorials. (n.d.). &lt;em&gt;How to Allow User Registration on Your WordPress Site&lt;/em&gt;. Retrieved from YouTube: &lt;a href="https://www.youtube.com/watch?v=TuCX5W32Hvg&amp;amp;feature=youtu.be"&gt;https://www.youtube.com/watch?v=TuCX5W32Hvg&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WPBeginner-WordPress-Tutorials. (n.d.). &lt;em&gt;How to Allow Users to Upload Images in WordPress Comments&lt;/em&gt;. Retrieved from YouTube: &lt;a href="https://www.youtube.com/watch?v=UGLj3gt65QU&amp;amp;feature=youtu.be"&gt;https://www.youtube.com/watch?v=UGLj3gt65QU&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zen, O. P. (n.d.). &lt;em&gt;How to Install WordPress on AWS&lt;/em&gt;. Retrieved from YouTube: &lt;a href="https://www.youtube.com/watch?v=4WR7EFFLF04&amp;amp;feature=youtu.be"&gt;https://www.youtube.com/watch?v=4WR7EFFLF04&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>wordpress</category>
      <category>hosting</category>
    </item>
    <item>
      <title>How to send an Email using Powershell ISE</title>
      <dc:creator>Vignesh</dc:creator>
      <pubDate>Tue, 23 Nov 2021 07:38:03 +0000</pubDate>
      <link>https://dev.to/ckvignesh/how-to-send-an-email-using-powershell-ise-dg5</link>
      <guid>https://dev.to/ckvignesh/how-to-send-an-email-using-powershell-ise-dg5</guid>
      <description>&lt;p&gt;PowerShell is a tool to carry out Automation Configuration Management. This can be used to automate sending of emails with just an authorisation and a click of few buttons. The task of scripting the email sending should be done on PowerShell ISE.&lt;/p&gt;

&lt;p&gt;The cmdlet to send emails is &lt;em&gt;Send-MailMessage&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The Send-MailMessage cmdlet uses the &lt;strong&gt;From&lt;/strong&gt; parameter to specify the message’s sender. The To parameter specifies the message’s recipients. The &lt;strong&gt;Cc&lt;/strong&gt; parameter sends a copy of the message to the specified recipient. The &lt;strong&gt;Bcc&lt;/strong&gt; parameter sends a blind copy of the message. A blind copy is an email address that is hidden from the other recipients. The &lt;strong&gt;Subject&lt;/strong&gt; parameter is the message because the optional &lt;strong&gt;Body&lt;/strong&gt; parameter is not included.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Credentia&lt;/strong&gt;l parameter specifies a domain administrator’s credentials are used to send the message. The UseSsl parameter specifies that &lt;strong&gt;Secure Socket Layer (SSL)&lt;/strong&gt; creates a secure connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple email
&lt;/h3&gt;

&lt;p&gt;I will be using two of my email IDs to demonstrate this. The simplest program to send an email will be as follows:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Send-MailMessage -To “” -From “” -Subject “Your message subject” -Body “Plain text” -Credential (Get-Credential) -SmtpServer “” -Port 587&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The fields can be substituted to add the sender’s and receiver’s email address, the subject and the body of the email. The SMTP credentials can be looked up on the internet. In case of Gmail, it’s &lt;a href="http://smtp.google.com/"&gt;smtp.google.com&lt;/a&gt;. Port 587 refers to the default submission port which is used when a client or an outgoing server is sending an email to be routed by the proper server. The &lt;strong&gt;-Credential (Get-Credential)&lt;/strong&gt; cmdlet is used to open up a dialog box like this to prompt the authorisation.&lt;/p&gt;

&lt;p&gt;Let’s first test the program to send a simple email to my email address&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$MyEmail = “&lt;/em&gt;&lt;a href="//mailto:vgbravopenpal@gmail.com"&gt;&lt;em&gt;_______@gmail.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$To = “&lt;/em&gt;&lt;a href="//mailto:vigneshckprakash@gmail.com"&gt;&lt;em&gt;_______@gmail.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$Subject = “This is the automated email”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$Body = “testing”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$Creds = (Get-Credential -Credential “$MyEmail”)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$SMTP= “&lt;/em&gt;&lt;a href="http://smtp.gmail.com/"&gt;&lt;em&gt;smtp.gmail.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Start-Sleep 1&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Send-MailMessage -To $to -From $MyEmail -Subject $Subject -Body $Body -SmtpServer $SMTP -Credential $Creds -UseSsl -Port 587&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--siesvTTH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651368043/tIsQkAtjB.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--siesvTTH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651368043/tIsQkAtjB.png" alt="" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before running this block of code, you have to go to the Gmail Account Settings of the Gmail Account, open securities settings and allow access to less secure apps as shown here.&lt;/p&gt;

&lt;p&gt;Kindly click on the images, to see a more detailed view of the steps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nkFZVle0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651369900/urMnq8CWU.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nkFZVle0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651369900/urMnq8CWU.png" alt="" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e4Lh7ax3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651371967/TV4mOmnQSmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e4Lh7ax3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651371967/TV4mOmnQSmu.png" alt="" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you run the program, the prompt to carry out the authorisation would be asked for. Type in the Gmail account password and proceed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d8NETVve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651373757/8GKZbqR0A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d8NETVve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651373757/8GKZbqR0A.png" alt="" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to the Gmail inbox now and see that the mail has arrived. The subject and body are as it was set to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rz0AUFhm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651375570/al-Oapp8T.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rz0AUFhm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651375570/al-Oapp8T.png" alt="" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YiK0uWE0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651377842/4YNYzX8MpZ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YiK0uWE0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651377842/4YNYzX8MpZ.png" alt="" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Send an email with Attachments
&lt;/h3&gt;

&lt;p&gt;Now, we need to send an attachment. For this the cmdlet used is –Attachment. It attaches the file with the email and sends it to the receiver. Here, I will add the code for attaching the file which I have created just to test.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;file = “D:\test.txt”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$att = $file&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;-Attachments $att&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GlcFfmd---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651380081/vNbGrpKVe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GlcFfmd---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651380081/vNbGrpKVe.png" alt="" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sMEarcCz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651381984/SN4A8pofg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sMEarcCz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651381984/SN4A8pofg.png" alt="" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, the email has been sent to my inbox with the attachment I uploaded.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WjEOAo36--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651383766/IDuMY55Nt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WjEOAo36--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651383766/IDuMY55Nt.png" alt="" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>beginners</category>
      <category>email</category>
    </item>
    <item>
      <title>Host a simple snake game on your website</title>
      <dc:creator>Vignesh</dc:creator>
      <pubDate>Tue, 23 Nov 2021 07:34:10 +0000</pubDate>
      <link>https://dev.to/ckvignesh/host-a-simple-snake-game-on-your-website-198o</link>
      <guid>https://dev.to/ckvignesh/host-a-simple-snake-game-on-your-website-198o</guid>
      <description>&lt;p&gt;You can easily host a simple snake game on your website, using code and a hosting service. You may not know coding or even the names of some programming languages. But, don’t worry. I can help you do it, with code which already exists. All you have to do is, link them &amp;amp; host them. Have a look at mine.&lt;/p&gt;

&lt;p&gt;And no, you don’t need any money to do this as well. Sounds cool, right ? Let’s proceed now.&lt;/p&gt;

&lt;p&gt;I have used &lt;a href="http://infinityfree.net"&gt;infinityfree.net&lt;/a&gt;, to create a free account. I suggest that you sign up there as well, before you start doing this.&lt;/p&gt;

&lt;p&gt;There are broadly two things we have to do. Let me walk you through this.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Get the code to run a game and link them properly.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Host it on the internet.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Part One: Getting the Code Ready.
&lt;/h3&gt;

&lt;p&gt;Let’s first get the code. Here, I am using a simple example, so I have taken it from Freecodecamp’s website. It’s from an &lt;a href="https://www.freecodecamp.org/news/how-to-build-a-snake-game-in-javascript/"&gt;article&lt;/a&gt; written by Fakorede Damilola. He has used Javascript to create the game code.&lt;/p&gt;

&lt;p&gt;It’s primarily of 3 components.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. HTML Part
&lt;/h4&gt;

&lt;p&gt;I have copy-pasted the code here, for your reference.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Nokia 3310 snake&amp;lt;/h1&amp;gt; &amp;lt;div class="scoreDisplay"&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class="grid"&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div class="button"&amp;gt; &amp;lt;button class="top"&amp;gt;top&amp;lt;/button&amp;gt; &amp;lt;button class="bottom"&amp;gt;bottom&amp;lt;/button&amp;gt; &amp;lt;button class="left"&amp;gt;left&amp;lt;/button&amp;gt; &amp;lt;button class="right"&amp;gt;right&amp;lt;/button&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;div class="popup"&amp;gt; &amp;lt;button class="playAgain"&amp;gt;play Again&amp;lt;/button&amp;gt; &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. CSS Part
&lt;/h4&gt;

&lt;p&gt;This is for the styling of the snake and the area in which it moves.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body { background: rgb(212, 211, 211); } .grid { width: 200px; height: 200px; border: 1px solid red; margin: 0 auto; display: flex; flex-wrap: wrap; } .grid div { width: 20px; height: 20px; /\*border:1px black solid; box-sizing:border-box\*/ } .snake { background: blue; } .apple { background: yellow; border-radius: 20px; } .popup { background: rgb(32, 31, 31); width: 100px; height: 100px; position: fixed; top: 100px; left: 100px; display: flex; justify-content: center; align-items: center; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Javascript Part
&lt;/h4&gt;

&lt;p&gt;This is the little tricky side of it. But, read on. It’s not impossible.&lt;/p&gt;

&lt;p&gt;I’m copying the whole part of the Javascript here, for your convenience. If you wish to study each code block, it’s better to refer to the &lt;a href="https://www.freecodecamp.org/news/how-to-build-a-snake-game-in-javascript/"&gt;article&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let grid = document.querySelector(".grid") let popup = document.querySelector(".popup"); let playAgain = document.querySelector(".playAgain"); let scoreDisplay = document.querySelector(".scoreDisplay") let left = document.querySelector(".left") let bottom = document.querySelector(".bottom") let right = document.querySelector(".right") let up = document.querySelector(".top") let width=10; let currentIndex = 0 let appleIndex=0 let currentSnake=\[2,1,0\] let direction =1 let score = 0 let speed = 0.8 let intervalTime =0 let interval =0 document.addEventListener("DOMContentLoaded",function(){ document.addEventListener("keyup",control) createBoard() startGame() playAgain.addEventListener("click", replay); }) function createBoard(){ popup.style.display = "none"; for(let i=0;i&amp;lt;100;i++){ let div =document.createElement("div") grid.appendChild(div) } } function startGame(){ let squares =document.querySelectorAll(".grid div") randomApple(squares) //random apple direction =1 scoreDisplay.innerHTML=score intervalTime=1000 currentSnake =\[2,1,0\] currentIndex = 0 currentSnake.forEach(index=&amp;gt;squares\[index\].classList.add("snake")) interval = setInterval(moveOutcome,intervalTime) } function moveOutcome (){ let squares =document.querySelectorAll(".grid div") if(checkForHits(squares)){ alert("you hit something") popup.style.display="flex" return clearInterval(interval) }else{ moveSnake(squares) } } function moveSnake(squares){ let tail = currentSnake.pop() squares\[tail\].classList.remove("snake") currentSnake.unshift(currentSnake\[0\]+direction) // movement ends here eatApple(squares,tail) squares\[currentSnake\[0\]\].classList.add("snake") } function checkForHits(squares){ if( (currentSnake\[0\] + width &amp;gt;=(width\*width) &amp;amp;&amp;amp; direction === width) || (currentSnake\[0\] % width ===width -1 &amp;amp;&amp;amp; direction ===1) || (currentSnake\[0\] % width === 0 &amp;amp;&amp;amp; direction === -1) || (currentSnake\[0\] - width &amp;lt;= 0 &amp;amp;&amp;amp; direction === -width) || squares\[currentSnake\[0\] + direction\].classList.contains("snake") ){ return true }else{ return false } } function eatApple(squares,tail){ if(squares\[currentSnake\[0\]\].classList.contains("apple")){ squares\[currentSnake\[0\]\].classList.remove("apple") squares\[tail\].classList.add("snake") currentSnake.push(tail) randomApple(squares) score++ scoreDisplay.textContent = score clearInterval(interval) intervalTime = intervalTime \*speed interval = setInterval(moveOutcome,intervalTime) } } function randomApple(squares){ do{ appleIndex =Math.floor(Math.random() \* squares.length) }while(squares\[appleIndex\].classList.contains("snake")) squares\[appleIndex\].classList.add("apple") } function control(e){ if (e.keycode===39){ direction = 1 // right }else if (e.keycode===38){ direction = -width //if we press the up arrow, the snake will go ten divs up }else if (e.keycode===37){ direction = -1 // left, the snake will go left one div }else if (e.keycode===40){ direction = +width // down the snake head will instantly appear 10 divs below from the current div } } up.addEventListener("click",()=&amp;gt;direction= -width ) bottom.addEventListener("click",()=&amp;gt;direction= +width ) left.addEventListener("click",()=&amp;gt;direction= -1 ) right.addEventListener("click",()=&amp;gt;direction= 1 ) function replay() { grid.innerHTML="" createBoard() startGame() popup.style.display = "none"; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you have got the 3 code blocks from the article. But, do you know how it must be used? This is where I’m going to teach you how to use code and link them, so that a program works !&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1
&lt;/h3&gt;

&lt;p&gt;Copy the HTML code into a notepad file. Like this. You can alternatively use Visual Studio too, it works fine for writing the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rDwkuM_I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651389300/5m3CgxV_m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rDwkuM_I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651389300/5m3CgxV_m.png" alt="html" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2
&lt;/h3&gt;

&lt;p&gt;Add a &lt;strong&gt; &lt;/strong&gt; tag above the HTML Code you entered, previously. Inside that, add &lt;strong&gt; &lt;/strong&gt; tags.&lt;/p&gt;

&lt;p&gt;Now, copy the CSS code in &lt;strong&gt;between the  &lt;/strong&gt; tags. Like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FNrraazQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651391764/LNG4WnDq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FNrraazQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651391764/LNG4WnDq4.png" alt="css" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It must be like this, above the HTML code you pasted. I have highlighted the portion where the HTML code begins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3
&lt;/h3&gt;

&lt;p&gt;Now let’s add the Javascript part into this file. Go to the end of the HTML Script you wrote. It ends at . Create a &lt;strong&gt; &lt;/strong&gt; tag and then copy paste the Javascript code in between the &lt;strong&gt; &lt;/strong&gt; tag. Here is an illustration. I have selected the HTML code, to make it clearer, for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yomXMZZf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651393988/etP6kQ2gAg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yomXMZZf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651393988/etP6kQ2gAg.png" alt="javascript" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, save this file with any name of your choice and add a “.html” extension to it. Do not save it as a text file. Try to open it in your machine, to test if it works. This is how your screen will be. I added my name to the code, hence it shows up.&lt;/p&gt;

&lt;p&gt;You can add your’s too, by editing the HTML code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xPdKFN8r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651395989/DfODRfH4W.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xPdKFN8r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651395989/DfODRfH4W.png" alt="custom" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Part Two: Hosting the Code.
&lt;/h3&gt;

&lt;p&gt;Now that the code is ready, let’s host it. Go to infinityfree.net and login to the account you created.&lt;/p&gt;

&lt;p&gt;Click on the &lt;strong&gt;Create Account&lt;/strong&gt; button as shown in the picture below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cit6kB9c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651398024/6bN03SsE2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cit6kB9c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651398024/6bN03SsE2.png" alt="infinityfree" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select a domain name and its extension, which is unique. Proceed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4Wu2TIdp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651399971/vS2guTKdC_.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Wu2TIdp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651399971/vS2guTKdC_.png" alt="infinityfree" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a password for it and Proceed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M6fYD3LV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651401860/qA_FS-TIl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M6fYD3LV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651401860/qA_FS-TIl.png" alt="infinityfree" width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, this is the screen you will see.&lt;/p&gt;

&lt;p&gt;Let’s get back to it. Click on the File Manager, to open it. Like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cDtYsbWx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651404921/rdRybM0WX.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cDtYsbWx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651404921/rdRybM0WX.png" alt="infinityfree" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is what you’ll see. Open the &lt;strong&gt;htdocs&lt;/strong&gt; folder and upload your .HTML file into it. It was the one we created in Part One. Ensure that it’s named as . Or the game may not load from the link.&lt;/p&gt;

&lt;p&gt;Go to the link you made on your infinityfree.net account and access the game. You can modify the file contents any time and update the file in your account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qXCv2GsY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651407699/MrbXS6FAL.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qXCv2GsY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637651407699/MrbXS6FAL.png" alt="infinityfree" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope this article helped you understand hosting of code.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stage, Commit and Push Changes to Github Repositories in Atom without commands</title>
      <dc:creator>Vignesh</dc:creator>
      <pubDate>Tue, 23 Nov 2021 04:21:22 +0000</pubDate>
      <link>https://dev.to/ckvignesh/stage-commit-and-push-changes-to-github-repositories-in-atom-without-commands-ncl</link>
      <guid>https://dev.to/ckvignesh/stage-commit-and-push-changes-to-github-repositories-in-atom-without-commands-ncl</guid>
      <description>&lt;p&gt;Context: I recently switched to Atom Editor as I faced some problems with VS Code and did not have time to figure it out, then.&lt;/p&gt;

&lt;p&gt;Install the Atom Editor from their &lt;a href="https://atom.io/"&gt;official website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Open it and work on your code that's already cloned from a remote repository.&lt;/p&gt;

&lt;p&gt;Save your work with Ctrl+S or &lt;code&gt;Save&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Click on &lt;code&gt;Git&lt;/code&gt; which is on the bottom right side, as shown in the image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Xmxcl5G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597068004/U5p73scAj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Xmxcl5G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597068004/U5p73scAj.png" alt="0.png" width="880" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is how your work will be seen, currently. It's unstaged. You can see this on the right side of this image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rlxlN_6f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597025158/KSNpqjNsu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rlxlN_6f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597025158/KSNpqjNsu.png" alt="1.png" width="880" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will also show you the changes to the file that you have made. Click &lt;code&gt;enter&lt;/code&gt; to stage it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JJsbj-uh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597135311/GLf7WTKAg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JJsbj-uh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597135311/GLf7WTKAg.png" alt="2.png" width="880" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, the changes would move to the staged area, on the right side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gmk5TBhE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597186848/xXzQzNg4R.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gmk5TBhE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597186848/xXzQzNg4R.png" alt="3.png" width="880" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enter your commit message before you commit by clicking on &lt;code&gt;Commit to Master&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Now, your code would have got committed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bvMYNrv8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597269100/eaFRtwNMc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bvMYNrv8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597269100/eaFRtwNMc.png" alt="4.png" width="880" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on this &lt;code&gt;Push&lt;/code&gt; button to push the code to your remote repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XfPrUO60--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597297028/45PcTBBnLu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XfPrUO60--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597297028/45PcTBBnLu.png" alt="5.png" width="880" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once it's pushed, you'll see &lt;code&gt;Fetch&lt;/code&gt; instead of &lt;code&gt;Pull&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6_u_lu0y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597322771/9RwP4uX3rI.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6_u_lu0y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597322771/9RwP4uX3rI.png" alt="6.png" width="880" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you'd want to push the changes to a different branch, click on &lt;code&gt;master&lt;/code&gt; as shown in this image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mKeKF3vn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597619223/szBMHOg6mQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mKeKF3vn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637597619223/szBMHOg6mQ.png" alt="1.png" width="880" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In case you don't have a branch named &lt;code&gt;master&lt;/code&gt;, any other branch may show up there. You can change it from the drop-down menu shown above it.&lt;/p&gt;

</description>
      <category>github</category>
      <category>atom</category>
    </item>
    <item>
      <title>Github Submodules and how you can use them for your Projects</title>
      <dc:creator>Vignesh</dc:creator>
      <pubDate>Sat, 20 Nov 2021 15:02:41 +0000</pubDate>
      <link>https://dev.to/ckvignesh/github-submodules-and-how-you-can-use-them-for-your-projects-4b4b</link>
      <guid>https://dev.to/ckvignesh/github-submodules-and-how-you-can-use-them-for-your-projects-4b4b</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Before we get into the crux of Github submodules, let me give you some context. I'm writing this article on Day 9th of my #100DaysofCode challenge. I'm working my way through freeCodeCamp's Fronted certifications and building a portfolio website on the side. I also participated in the #Hacktoberfest, last month.&lt;/p&gt;

&lt;p&gt;I document my progress in freeCodeCamp by saving the important answers in &lt;a href="https://github.com/ckvignesh/FreeCodeCamp"&gt;this repositary&lt;/a&gt;. But, I faced a challenge while updating my progress in the &lt;a href="https://github.com/ckvignesh/100-days-of-code/"&gt;#100DaysofCode log file Repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was cumbersome to handle both these Repos as they needed to be updated daily, to keep track of my progress. Then I created a lot of other Repos too, to document solutions to smaller problems that I solved. Mostly in CSS games as I was learning CSS in freeCodeCamp back then. &lt;/p&gt;

&lt;p&gt;I also needed to find a way to map these Repos into my #100DaysofCode log Repo as proof. You could say that I can easily add the link of those Repos to my Markdown log file. But, I felt that would become a daily chore as I keep increasing the number of folders for each section or topic.&lt;/p&gt;

&lt;p&gt;Yesterday, I moved a few of these Repos to my #100DaysofCode Repo and tried to commit it. But, the terminal threw this message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ir-xSFRa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635917783549/ST4vwlwkp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir-xSFRa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635917783549/ST4vwlwkp.png" alt="Error.png" width="606" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is how I stumbled upon GitHub submodules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Github Submodules
&lt;/h2&gt;

&lt;p&gt;When you're working on a project, you may have to use another project within it. In my case, I owned all the Repos I used. But, it need not be like that always. You may sometimes be using a 3rd party's Repo for your work. Sometimes, one Repo may be needed for many Projects. In any of these cases, you will have to rely on Github Submodules.&lt;/p&gt;

&lt;p&gt;Git submodules allow you to Repo as a subdirectory or a folder within another Repo. Let's now see how we can add Submodules without making such an error as I made before.&lt;/p&gt;

&lt;p&gt;The usual command to clone a repo is like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/uName/repoName.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But this won't make it a submodule. It'll remain as a standalone Repository. Now, this is not how we add a Submodule in another Repository. The command to clone it is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git submodule add https://github.com/uName/repoName.git&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Once this has been completed successfully, try running &lt;code&gt;git status&lt;/code&gt; to see what are the new files added. You'll see this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GXcJ9RKw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635918611200/MVvc9Jhz_.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GXcJ9RKw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635918611200/MVvc9Jhz_.png" alt="Gitmodules.png" width="433" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see 2 things here, one the submodule Repo and then a file named &lt;code&gt;.gitmodules&lt;/code&gt;. It's similar to the .git folder that's hidden and you may not see it unless you enable "show hidden files". &lt;/p&gt;

&lt;p&gt;Let's check &lt;code&gt;.gitmodules&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Khpk5KBL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635918830255/yZgNk8YLZ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Khpk5KBL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635918830255/yZgNk8YLZ.png" alt="Submodule file.png" width="849" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, you can see the details of the submodule. This is the file that tells Git about your submodule. Now you can work on your Repo or the submodule Repo and commit it to Github.&lt;/p&gt;

&lt;p&gt;This is how my submodules appear in the Parent Repo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_z8wfUtG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635919068274/hJb372Bs-y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_z8wfUtG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635919068274/hJb372Bs-y.png" alt="Submodules.png" width="880" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It lets you click the folders and leads you to the submodule Repos directly. The &lt;code&gt;@ xyz123&lt;/code&gt; value after the submodule Repos show the last commit of the submodule/child Repo that's present in the Parent Repo's submodule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working on Submodules and keeping them updated within the Parent Repository
&lt;/h2&gt;

&lt;p&gt;Now let me make some changes to both these submodule/child Repos and commit them. But this won't change the &lt;code&gt;@ xyz123&lt;/code&gt; values with the folder names in the Parent Repo. They'll remain constant like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_z8wfUtG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635919068274/hJb372Bs-y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_z8wfUtG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635919068274/hJb372Bs-y.png" alt="Submodules.png" width="880" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, if you need the updated version of the child Repo within your Parent Repo, you must add these changes from the root of the parent Repo. It'll show up like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J1Umy4P6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635919888275/nN56FRCuQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J1Umy4P6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635919888275/nN56FRCuQ.png" alt="1.png" width="584" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you commit and push the changes, the changes are reflected in the Parent Repo. You can see the difference in the commit numbers in this picture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D3-MQa_T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635919935896/9GwJmp8et.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D3-MQa_T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1635919935896/9GwJmp8et.png" alt="2.png" width="880" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Github Submodules are a very vast topic and this article is just to help you get started with it. There is a lot more to explore here.&lt;/p&gt;

&lt;p&gt;You can read more from the official documentation, &lt;a href="https://git-scm.com/book/en/v2/Git-Tools-Submodules"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  github #100DaysOfCode #Submodules #git
&lt;/h1&gt;

</description>
      <category>github</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Configuring Github's Personal Access Token to Make Code Pushes Easier</title>
      <dc:creator>Vignesh</dc:creator>
      <pubDate>Sat, 20 Nov 2021 15:01:20 +0000</pubDate>
      <link>https://dev.to/ckvignesh/configuring-githubs-personal-access-token-to-make-code-pushes-easier-3p1h</link>
      <guid>https://dev.to/ckvignesh/configuring-githubs-personal-access-token-to-make-code-pushes-easier-3p1h</guid>
      <description>&lt;p&gt;&lt;em&gt;Before you start reading, this is an article that will teach you how to configure Github's Personal Access Token so that you need not have to copy-paste the Token each time you push code to remote.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem and Research
&lt;/h2&gt;

&lt;p&gt;Recently I faced an issue with &lt;code&gt;git push&lt;/code&gt; on VS Code. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jt72xVO2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637381615284/uGEeGmBQP.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jt72xVO2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637381615284/uGEeGmBQP.png" alt="image.png" width="880" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I rechecked my VS Code terminal to see if I was still logged into git and confirmed I was.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0t0XtpPn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637382189449/sLHEHdA_0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0t0XtpPn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637382189449/sLHEHdA_0.png" alt="image.png" width="779" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Unsuccessful Attempts to Solve it
&lt;/h2&gt;

&lt;p&gt;I immediately tried a Google search for the error &lt;code&gt;remote: no anonymous write access&lt;/code&gt;. I could see that there were a few issues on VS Code's Github Repo regarding this issue.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/vscode/issues/137161"&gt;Issue 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/vscode/issues/136791"&gt;Issue 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The discussion looked like there was some issue or bug with VS Code's latest version 1.62.2 that stopped users from pushing their code in the traditional way of &lt;code&gt;git push origin branch-name&lt;/code&gt;. One suggestion was to downgrade the VS Code's version to 1.62.0 and try pushing the code.&lt;/p&gt;

&lt;p&gt;But, that did not work for me. &lt;/p&gt;

&lt;h2&gt;
  
  
  Introspection and More Research
&lt;/h2&gt;

&lt;p&gt;I was aware that Github's Personal Access Tokens could be used to push changes from the terminal. It looked like a cumbersome process.&lt;/p&gt;

&lt;p&gt;Entering my GitHub user name and PAT (Personal Access Token) as the password for each push would make the code-commit-push process much difficult. &lt;/p&gt;

&lt;p&gt;GitHub stopped accepting passwords through the terminal, since August 2021. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qLK6k2Lp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637383569559/uLljHrzLz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qLK6k2Lp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637383569559/uLljHrzLz.png" alt="image.png" width="880" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This would make it much harder for developers to push the commits to remote.&lt;/p&gt;

&lt;p&gt;After talking with a  &lt;a href="https://hashnode.com/@eduardovedes"&gt;mentor&lt;/a&gt; , I understood that it was not an issue with VS Code but, with the authentication during the push. &lt;/p&gt;

&lt;p&gt;He also said that he used the PAT to push the changes.&lt;/p&gt;

&lt;p&gt;Now my goal was to google PAT and see if there was any way to authenticate my pushes without having to enter the Personal Access Token for each push.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;I read through GitHub Documentation, Stackoverflow and Ask Ubuntu. I also did some small trials using the PAT, to arrive at a solution. &lt;/p&gt;

&lt;p&gt;The gist of this solution is that each Repo I was working on had to be authenticated with the PAT so that the pushes could be done seamlessly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding the PAT to the Repositories
&lt;/h3&gt;

&lt;p&gt;Generate a Personal Access Token, if you don't have one. Read  &lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"&gt;this document&lt;/a&gt; to understand how it can be generated.&lt;/p&gt;

&lt;p&gt;Once you have saved your PAT, it must be added to the Repos on your local machine. &lt;/p&gt;

&lt;p&gt;Open the VS Code Terminal from the Repo you want to add the PAT to.&lt;/p&gt;

&lt;p&gt;Enter &lt;code&gt;git remote set-url origin https://yourPAT@github.com/yourGitUserName/yourGitRepo.git&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: It's not a double-line command. **Do not&lt;/em&gt;* hit enter after &lt;code&gt;origin&lt;/code&gt;.*&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JWxa5ky3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637385774257/NsbsFLvg-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JWxa5ky3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637385774257/NsbsFLvg-.png" alt="image.png" width="880" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can commit and push without having to enter the Personal Access Token every time you push your commits to remote.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F2nIb0VX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637384603937/oyxoBE09o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F2nIb0VX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1637384603937/oyxoBE09o.png" alt="image.png" width="860" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;This approach saves time and does not compromise security. Feel free to write to me if you have better suggestions on how this can be solved. My contact details are available on my Profile.&lt;/p&gt;

</description>
      <category>github</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
