Back to the grind

Firstly, I would like to apologize for not posting for over a month. I had to take a break from the fullstack course because of a teaching responsibility that I had taken over. I tried out teaching a “Introduction to Python” course to middle schoolers. It was a fun experiment for me because of a lot of reasons. I rediscovered my interest in teaching and I got to improve my public speaking skills. I was able to effectively interact with my students as I explained all the concepts. Overall the five week program was a success and the students enjoyed learning their first programming language.

Today, I have resumed my full stack course and I plan on finishing the full stack course by the end of this week. I also will resume my full stack project and my preparation for the AWS cloud certification. So starting today, it is going to be a tough two-three weeks. I am completely ready to get back into this grind and finish it successfully.

I will start updating this blog with all my project progress in the coming weeks. My fourth and final year of my Bachelors degree also starts in the last week of August. I am looking forward to completing all my targets before I get started my final year at Stony Brook University.

Mission Report June 28, 2020

It has been an exciting 8 weeks since the beginning of this blog initiative. I have learnt a lot of new and useful skills. I started with the “Linux and Operating System Fundamentals” course and upon its successful completion, I started the “Fullstack Development” course, which is currently ongoing and nearing completion. When I started learning about linux and operating systems, I did not have any experience or knowledge about it. To go from an empty slate to everything I now know after the completion of the course, has truly been a fun experience. As a result of all the stuff I learnt from this course, I was able to make my own trash command( I have an entire post regarding this ). The fullstack course that I have been doing for the past few weeks might be one of the best online courses in my opinion. Unlike linux, I had some basic knowledge about javascript, react and front-end development. The amount of stuff I have newly learnt as well as every other skill that I have built on is truly what I did not expect at the beginning of this course. It is entirely text based and something that I not generally used to. But the course has proved that the text based format is really resourceful if made in a certain way. This course has helped me engage and learn so many new things as I move through it. I highly recommend it to anyone who wants to get to know about modern full stack development. The blog posts have been at the crux of all my work. Learning from the course materials and sharing what I learnt at the end of the week has been the most effective learning routine I have had in a long time. I believe that everyone should engage in teaching the topics they learn. Teaching, or writing about things you have learnt is probably one of the best ways to learn a topic in depth. It not only helps you gain deeper insights about the things you are learning, but also helps anyone out there who is trying to get started. It acts a service to the community which someday is going to be repeated again by someone who you helped by your posts, who will teach it someone else and that becomes a never ending cycle of such acts which helps the learning community to remain intact and grow endlessly. I have truly enjoyed every moment of the last few weeks and I plan to just move forward from here and keep doing my best to learn and help as much as I can.

Github: https://github.com/atharvakadam
Fullstack course : https://fullstackopen.com/en

Git Fundamentals – Getting started with Git and GitHub

Hello everyone. It has been about two weeks since my last post and I want to firstly take the opportunity to apologize for not posting last week. But, I am gonna rectify that by posting more regularly from now onwards.

So let us get started with this week’s topic. I was wondering what I could talk about that could be informative for all aspiring programmers out there, and fortunately one of our regular blog viewer and my good friend, Aditi, suggested a post explaining the basics of git and how to get started with git and start using git to manage their projects effectively.

I personally believe that git is is one of the most important skills to master for all software programmers out there. And obviously there is so much information out there on git which at times may feel too overwhelming and this is exactly what discourages beginners from exploring and keeps them from building their skills.

Now in this post my main goal is not to teach you everything there is to know about git, but mostly to teach you what git is, why is it necessary and how to get started with it. So let us get right into it.

What is Git ?

So the definition of git on the internet is that it is a version control system. Now obviously to someone who is new, this definition may not seem useful to understand, and there is no point to learning something if that process does not involve truly understanding what you are learning or trying to learn. So let us break down the definition to understand what it is. Git’s function is to efficiently manage your project by keeping track of your progress and in doing so it helps you save versions of your project. The reason why this is done is so that in the case of you losing your progress due to any unforeseen circumstances, you can still access specific versions of your project and retrieve them, so that you can continue working without losing your progress.

Why is it necessary to know Git ?

The idea behind git is to keep backing up your progress as you proceed with your program. The reason why it is important to know git is precisely what the function of git is. In the unlikely and unfortunate event of you losing out all your data because of any given reason, if your project wasn’t backed up using some version control system, you could lose all the progress you might have had. This is not particularly encouraged in the industry and it is highly recommended to keep backing up your progress using git or some other version control system. The way git works is also essential to why to use git. This is because the way git stores your progress is not by storing the difference in your code or your project, but by storing snapshots of what your code looks like at that point in time. As a student one might try and find a way around using git by using other ways to keep track of their progress, but git is extremely essential to learn as you proceed with your software engineering career. The earlier you get acquainted and get some hands on experience with it, the faster you will be able to efficiently develop more programs and applications

Why use Git, and not any other version control system ?

Well almost any answer I provide for this question, I cannot promise that it won’t be biased. This is because I haven’t had any experience with any other version control systems like SVN or mercurial. I think this post does a way better job of explaining about how git performs compared to other version control systems like SVN.

How to get started with git ?

So finally after all the theoretical explanation, let us get to using git and Github to create our first repo and making a commit. Github is a cloud based hosting platform for helping us manage our projects efficiently using the git version control. There are other such platforms such as GitLab, Bitbucket etc. But for now, we are going to go with GitHub as it is one of the easiest and most used platforms to get started with and there is a ton of material and resources to help expand on what we are going to discuss here.

Okay let us get started with making our first git repository.

  • Step 1: Navigate to your project directory to initialize git in your project:
    First we need to initialize git in your project directory. So let us use the command line to navigate to your project directory. Once we are in it, all we need to do is type the following command:
    • git init
  • Step 2: If you do not have any code already in the directory, then add some code:
    So after the previous step, there is now a .git file in your directory. This is the file that is there is on your local machine which tracks all the changes in your directory. This is the file which handles the whole backing up and tracking progress part of git. So once you have the .git file, all you need to do is write some code. This is primarily done to make changes to the repo so that you can now add these changes to the .git file, so that it can start tracking your progress from here.
  • Step 3: Add these changes to save them in your local .git file:
    Once you are done adding some code, you now need to add them to the .git file so that it can start tracking your progress. This needs to be done initially by adding and then committing the changes. SO in this step we will add these changes by using the following command:
    • git add . : The important thing to understand here is that the ” . ” after git add command tells git to add all changes made in the directory. This means all changes made to any and all of the files in the directory. This dot can also be replaced with the file name to add the changes of a specific file.
  • Step 4: Now we need to commit these changes:
    One we are done staging the changes, we need to now commit our changes. This will be done by using the following command:
    • git commit -m "Initial commit" : The important thing to note here is that ” -m” part reflects that everything after that is a message explaining what the commit is. So “Initial commit” is a message or the name of the commit we just made. As you proceed you may commit more than one time, so you should name your commit based on what changes were made.
  • Step 5: Making your Github account (if you don’t have one) and creating a new repository:
    Once you are done making an account on Github, you need to navigate to creating the “Repositories” tab. After this, you will click one “New”, and this will take you to a page where you will fill out details such as what you want to name your repository. This could be anything you want to name it, but preferably it would be better if you name it what the project name is. Select if you want the project to be private or public. Private repositories can only be accessed by people who you authorize, public repositories are available to everyone on the internet to view. After this click on click on “Create Repository”
  • Step 6: Now copy the .git link from Github and add it to your project.
    Once you create your repository, navigate to the “Clone or download” button and as soon as you click it, it will show a link which will end in “.git”. Copy that link and navigate back to the local directory of your project using command line. Then use the following command:
    • git remote add origin link : Important think is to replace the “link” part of the command with the copied link from Github.
  • Step 7: push your committed changes to Github:
    Now all you need to do is the git push command, which is as follows:
    • git push origin master : This command will push all your changes from the .git file to your repository on Github and clear all the changes on your .git file.
  • Step 8: Repeat steps 3 to 7 as you make new additions and changes to your project:
    So this is it. This is all you need to get started with git in your existing or new project. As you make new changes, add them to Github accordingly using steps 3 to 7. Every time you push your changes, Github will update them and you can see it on Github.

I hope I covered enough information for everyone to get started with git. By no means is this the only way to do git. There are a lot of other things such as making branches, forking and pulling from your versions which are a few advanced topics when it comes to learning git. But in my opinion this is the best way to get started with git. I believe that everyone is constantly learning and developing their skills with git as they practice and use it more over time. The only way to make it a good skill is by constantly using it and learning new things. So as soon as you are done reading this, I want you to go ahead and make a new project and integrate it with git using above steps. Try it out and let me know in the comments if you run into any issues. Cheers, and see you next week!

Linux and OS – How to make a new GCP instance and SSH into it .

Now let us start with the “What”, “Why”, and “How”. (I know that’s a lot of questions, but this way, it’ll be easier for us to compartmentalize sections of the title such that we understand with complete clarity about what we are trying to do here.

“What” is GCP, instance and ssh ?
  • GCP or the “Google Could Platform” is a cloud computing platform which provides a plethora of services pertaining to cloud computing. Cloud Computing is basically getting the services you desire on your computer via cloud. Now this is a very simple definition, and it by no means is everything to know about cloud computing. But Cloud computing is beast of a topic, and we will leave it for some other day. For now, all we need to understand is that GCP just like AWS, DigitalOcean and other cloud computing platforms is what we are going to use to create a linux instance. Learn more about cloud computing using GCP here.
  • An “instance” or a “cloud instance” refers to a virtual server/machine which runs our application(s)(workload) on the cloud. We will use GCP to make a linux instance which will be the linux machine that we will be using for learning linux. Learn more about “instances in cloud computing” here.
  • “SSH” also known as “Secure Shell”, is a network protocol which gives users/system admins, a secure way to access a computer over unsecured network. We will be using ssh to securely log into our GCP “instance”. Learn more about SSH here.
“WHY” GCP ?
  • In my opinion, Google Cloud Platform is really user-friendly. It is one of the best options for beginners to get started with. Since, my assumption for this article is that it is mostly going to read by beginners and first timers in cloud computing, I will be using GCP. But the main idea here is to learn how to make instances and how to ssh into it, so feel free to use whatever platform that is comfortable for you. I will be doing the AWS Cloud Certification soon, and more details about cloud computing and using AWS will be explained then. So do keep a lookout for that. For now, let us proceed with GCP.
“HOW” DO WE Make a GCP instance and ssh into it?

Okay!!! Finally we can get to some hands-on stuff. Let’s get right to it.

  • Step 1: Create and account (If you don’t have one) and log into GCP and navigate to the top left corner and click on “Console”.
  • Step 2: On the left part of the screen, in the menu, hover over “Compute Engine”, and select “VM Instances”
  • Step 3: Select a project you want to work with. If you don’t have one, then type the name of a new project and click on “Create”.
  • Step 4: Set up the billing for your account. (Don’t worry you wont be charged as you can select the free trial). So fill out the details required and finish step 1 and 2 of this billing set up.
  • Step 5: Once you start your free trial, you will be then redirected to the “VM Instances: page. It will take a few minutes to load all your settings. As soon as the loading is done, click on “Create”.
  • Step 6: Navigate to “Machine Type” in “machine Configuration” and select “f1-Micro”. The reason why we do this is because, we do not need anything fancy for learning linux. We just need the most basic configuration.
  • Step 7: Make sure that you have selected some version of “Debian” or “Ubuntu” distribution of Linux in the “Boot Disk” section. After doing this, click on “Create” button to create your instance.
  • Step 8: It will take a few minutes to set up the instance. Once its done setting up the instance , you will see the instance on your screen. You will see something like this:
  • Step 9: Open your terminal and type the following command:
    ssh-keygen -t rsa -f ~/Desktop/key_name -C user_name
    • In the above command replace “key_name” with the name you want for your ssh key. You will also replace “user_name” with the username you want for this specific ssh key. You can also replace “~/Desktop/” with whatever directory path you want to store your key in.
    • Once you execute this command, it will ask you to type a passphrase which will be a unique identifier/password for your instance. Make sure that you will remember this passphrase as it will prompt you to enter this passphrase every time you try to log in to your instance using ssh on your system.
    • This command will make two keys, one public and one private. So as soon as you execute this command, two files will be created in the specified directory.
      • The two files will be:
        • key_name.pub
        • key_name
    • So as mentioned before, the “key_name.pub” file is what contains the public ssh key which goes into your GCP instance. “key_name” remains on your machine. The public key is how the instance checks/communicates with the private key on your machine.
  • Step 10: So once you have these two files, open “key_name.pub”, and copy all the contents of the file.
  • Step 11: Open the “VM Instances” page and click on your instance name.
  • Step 12: Click on the “Edit” button, on the top.
  • Step 13: Navigate all the way down to “SSH Keys”. It will say “you have 0 SSH keys.” if this is the first time you are adding an ssh key. Clicl on “Show and Edit” and add/paste your public key that you copied in Step 10.
  • Step 14: Click on the “Save” Button at the bottom of the page. It will take a few seconds to update.
  • Step 15: Copy the external IP from the “VM Instance page.”
  • Step 15: Now open your terminal and type the following command:
    ssh -i ~/Desktop/key_name user_name@external_IP
    • If you stored your key in a different directory then remember to replace “~/Desktop” , with the path of the directory you stored your key in. Also remember to replace “key_name” with the name you saved your key. Similarly, replace user_name with the username corresponding to your instance and external_IP with what you copied in Step 15.
  • Step 16: Once you do all that correctly and execute the command, it will prompt you to type your passphrase. Type your passphrase that you saved in Step 9.
  • Step 17: Now you have successfully logged into your linux instance.

You have now ready to dive right into Linux. Hopefully this article was useful. I will post some other useful articles and links regarding GCP and SSH soon. Will see you in our next post, as we dive straight into “Introduction of Operating Systems.”

Full Stack Development

After successfully completing the Linux and Operating Systems course, I am proceeding to a new Full Stack Development course. This course as it says in the name, teaches Full Stack development. It encompasses everything from learning frontend with React (a Front-end library) to learning how to communicate with the server, working with a back-end Node.js server and making applications with React, Node.js and Express. An initial overview of the course, seemed very insightful, and I intend to keep working on it. Just like the Linux and Operating Systems course, I will keep uploading my progress and stuff I learn as I proceed through the course. You can find the links to the corresponding posts in the sidebar on the posts page. I hope that my experience and the information I share in these threads are helpful to everyone.

The Trash Command

Almost every beginner in linux/unix systems at some point in time has messed up because of the infamous rm command. For those who don’t know, the rm -rf command is user to delete any given directory/file. Now while it doesn’t sound all that bad, it is really unforgiving and could really mess things up for someone who doesn’t know what they are doing. As I mentioned in my previous post, I worked on a linux and operating system fundamentals course this week. I learnt a lot of new things starting from what is the job of an operating system to learning shell scripts to execute command and automate stuff as a system admin. I found shell scripts to be really interesting, and that motivated me to work on this trash command idea. The motivation behind this was to figure out a way to make a command that is more forgiving than the rm command. So I came up with a suite of trash commands.

This suite includes the following commands:
> trash-add : This command adds the given file to the trash can directory
> trash-remove : This command removes the given file from the trash can and the system permanently
> trash-restore : This command restores the given file in the specified directory .
> trash-empty : This command empties the trash can and removes all the contents of the trash can permanently from the trash can and from the system.
> trash-show : This command shows all the contents of the trash can in a neat formatted way.

  • The trash-add command :
    This command is the core of all the functionalities of the trash can. The idea behind this function was a really simple one. If the user doesn’t have a trash can then make one, or
    else add the requested file/directory to the existing trash can.

The above code snippet shows the trash-add command’s shell script. The code for all these commands along with the documentation and instructions to set up can all be found on my
Github Repo : https://github.com/atharvakadam/Trash-Suite-Linux

This was my first project and experience with shell scripts and I am very happy with this effort. I plan to make this better by adding on to the functionalities, and making it better. I hope this helps everyone who is interested and looking to start out with shell scripts.

Linux and Operating Systems Fundamentals

Learning to work with linux is one of the few extremely essential skills that every programmer should be equipped their skillset with. I recently began working on a course focused towards linux and other unix based operating systems. I believe that this course has some very interesting insights and I plan to note all of them down as I proceed with the course. While doing so, I will also share them here every week, so that these insights could help every beginner out there, trying to figure out where and how to start.

The first one, and many more to come…

It has been about two years since my journey began. Right from writing, print("Hello World") in Python, to learning how to write clean, modular code in different languages like Java, JavaScript and C, it has been a wonderful experience. Its has been a non-stop learning fest. Over the past few days, I have been thinking about learning new things and expanding on skills that I got to learn at college. With the help of my uncle and a few of my friends, I have accumulated a list of programming courses that I will be working on. As I work on them, I will be sharing my learning experience here, and I hope that helps a lot of aspiring programmers and people interested learning new languages and technologies.

So join me in this new learning experience.