<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Software Incubator - Medium]]></title>
        <description><![CDATA[Software Incubator is the research and development center established within the portal of Ajay Kumar Garg Engineering College. We have set a foothold in the areas of software development, machine learning, blockchain, web-based enterprise solutions, mobile and web development. - Medium]]></description>
        <link>https://medium.com/software-incubator?source=rss----58097990e571---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Software Incubator - Medium</title>
            <link>https://medium.com/software-incubator?source=rss----58097990e571---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 02 Jun 2026 08:11:33 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/software-incubator" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[A complete roadmap for the first year of engineering]]></title>
            <link>https://medium.com/software-incubator/a-complete-roadmap-for-the-first-year-of-engineering-c145c2683bd7?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/c145c2683bd7</guid>
            <category><![CDATA[roadmaps]]></category>
            <category><![CDATA[freshman-year]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[students]]></category>
            <dc:creator><![CDATA[Niharika Rastogi]]></dc:creator>
            <pubDate>Wed, 31 Aug 2022 11:49:20 GMT</pubDate>
            <atom:updated>2022-08-31T11:49:20.666Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eCrqoNo_JOGpoU4QUia2Vg.png" /></figure><p>The first year of engineering can be quite overwhelming. It brings a bag full of new experiences along with tons of questions and confusion. Exposure to new technologies and buzz words is sometimes petrifying, primarily when you have never heard of them. Most of the students are clueless at the start of their journey. Seeking guidance from seniors is always useful and helps in making new connections. But…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/336/1*cr6QY1CaO3_R7cDy7KbiDA.gif" /></figure><p>I remember when I was in the first year of my engineering, I used to reach out to my seniors on Instagram and spam their inboxes with myriads of doubts. Some of my <strong>significant perplexities</strong> were, “<em>should I focus on academics or should I start learning something apart from the curriculum</em>”, “<em>which programming language should I learn</em>”, and “<em>how should I start with Competitive Programming(CP)</em>”. Initially, I had no idea what CP was, but later I learned about some websites to begin CP. These websites used to confuse me a lot. At first, I struggled and spent a few months gathering information and seeking guidance from multiple sources, which created a mess, and it took me a few months to regulate my plan of action.</p><p>The first year is labelled as the year of exploration, and indeed it is, but the prominent doubt is and will always be, <strong><em>what</em></strong>, <strong><em>from where</em></strong><em>,</em> and <strong><em>how much</em></strong> to explore. Every teacher and every senior has different answers to these questions. Having so many sign boards on a single road can be confusing and lead to undesired destinations. Similarly, seeking guidance from multiple sources can sometimes leave you bewildered and lost. Below are a few points that may simplify your path and take you forward clear-headed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/828/1*eBi9A7O-QAidiQZEOqbRag.png" /></figure><p>Here is the complete guide for your first year of engineering.</p><h3><strong>1.<em> Know the basics of emerging technologies</em></strong></h3><p><strong><em>(a)</em></strong> Explore emerging technologies and future trends such as Blockchain, Artificial Intelligence, Internet of Things, Cloud Computing, AR/VR, 3D Printing &amp; Drones. Study their fundamentals, applications, and use cases.</p><p><strong><em>(b)</em></strong> <strong>Read blogs</strong> related to these trends and technologies to develop interest. At least know the basics of each of these.</p><p><strong><em>(c)</em></strong> If you find any of the above-mentioned technologies interesting, you can pursue them further in your second year. Keep it simple for the first year.</p><p><strong><em>(d)</em></strong> Maintain your interest by staying updated about trending technologies through the internet and participating in quizzes and competitions. This will also enable you to learn more about the same and retain interest.</p><h3><strong>2.<em> Learn a programming language</em></strong></h3><p><strong><em>(a)</em></strong> Choose a language that supports <strong>object-oriented programming</strong>, such as <strong>C++</strong> or <strong>Java</strong>. This will help you learn a programming language’s syntax along with the concepts of OOPs. Object-oriented programming is essential when it comes to interviews and concept building.</p><p><strong><em>(b) </em></strong>Understand the usage and working of <strong>pointers</strong>, <strong>functions</strong>, <strong>classes</strong>, and <strong>inheritance</strong>. This will help you in your academics as well as in competitive programming.</p><p><strong><em>(c)</em></strong> You can also start with <strong>Python</strong>. It is used in various fields of computer science along with <strong>machine learning</strong> and <strong>data science</strong> applications. It supports OOPs, and you can easily build a few mini-projects to gain some experience.</p><h3><strong>3.<em> Kick-off with competitive programming</em></strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/277/0*beHo-p1XrtvL00Th" /></figure><p><strong><em>(a)</em></strong> After learning the fundamentals of a programming language, you can start practicing it through competitive programming.</p><p><strong><em>(b)</em></strong> CP helps develop <strong>problem-solving</strong> skills, which are a must for a programmer.</p><p><strong><em>(c) </em></strong>Begin by solving simple to medium-level problems daily on coding platforms such as <strong>HackerRank</strong>, <strong>CodeChef</strong>, <strong>CodeForces</strong>, etc.</p><p><strong><em>(d)</em></strong> You can learn new concepts through video solutions or blogs. Initially, it can look confusing, but don&#39;t be afraid to get your hands dirty. Step into the ground and kick-off.</p><h3><strong>4. <em>Choose your path</em></strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/460/1*vAEHT0iPTtdUPInlzTnlIA.png" /></figure><p>There are two major domains to choose from, namely, <strong><em>designing</em></strong> and <strong><em>development</em></strong>. It will be beneficial for you to choose your domain and start working on it by the end of the first year so that you can work on considerable projects in your second year.</p><p><strong><em>(a) Designing</em></strong><br>Designing covers the areas such as user interface(<strong>UI</strong>) and user experience(<strong>UX</strong>). It is the overall planning of how the application is going to look, feel and function. If you are creative and have an innovative imagination then you can definitely excel in this domain. You can start exploring UI/UX through websites such as <a href="http://Material.io"><strong>Material.io</strong></a>, <a href="https://dribbble.com/"><strong>dribbble</strong></a> and <a href="https://www.behance.net/"><strong>Behance</strong></a>.</p><p><strong><em>(b) Development</em></strong><br>Development involves the actual coding and building of the website or the application. You can choose between <strong>web development</strong> and <strong>app development</strong>. Once you are clear with the basics of a programming language, you can begin learning development frameworks based on these programming languages, for example, <strong>Spring</strong> is a framework of Java and <strong>Django</strong> is a framework of Python. Later you can start building projects for your resume.</p><blockquote>Reading blogs and the art of googling is the foundation of an efficient developer.</blockquote><h3><strong>5. <em>Pay attention to your grades</em></strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VZeGKSitohT-9QJRR3c3iA.png" /></figure><p><strong><em>(a)</em></strong> The first year is the most scoring year of engineering as the curriculum is comparatively less challenging, thereby providing more chances to score well.</p><p><strong><em>(b)</em></strong> Give your externals and internals very seriously, as scoring well in these exams will improve your overall GPA and benefit you further in your internals.</p><p><strong><em>(c)</em></strong> You need to maintain a balance between your grades and your skills. Make sure you are eligible to apply to most of the companies for placements by maintaining at least a <strong>75% overall percentage</strong>.</p><h3><strong>6.<em> Attend seminars and workshops</em></strong></h3><p><strong><em>(a) </em></strong>A workshop may introduce a new idea and inspire you to further <strong>explore</strong> it on your own. It is an opportunity to <strong>build relationships</strong> with like-minded people.</p><p><strong><em>(b)</em></strong> You get exposed to many new <strong>technical terms</strong> during a workshop, which paves the way for you to learn and explore more.</p><p><strong><em>(c) </em></strong>Jot down all the new terms you come across during a seminar and google them later. Also, develop a habit of <strong>reading blogs</strong>. This will widen the scope of your knowledge, and you will always have something new to explore until you find your area of interest.</p><h3><strong>7. <em>Participate in every hackathon</em></strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AEvnpGZmjn2yoEFs7FT2qQ.png" /></figure><p><strong><em>(a)</em></strong> Try to participate in as many competitions as you can.</p><p><strong><em>(b)</em></strong> Hackathons are generally a day-long competition between participants in which they have to develop a solution for a problem statement. You have to <strong>develop ideas</strong> to build a software or a hardware solution for the problem.</p><p><strong><em>(c)</em></strong> Do not participate for the sake of winning; participate to gain <strong>experience and exposure</strong>.</p><p><strong><em>(d)</em></strong> Try to learn from other participants. Notice their problem statements and solutions they built. This will help you when you are ready not just to participate but to compete with them.</p><p><strong><em>(e)</em></strong> Also, it would be best if you go in for <strong>quizzes</strong>, <strong>treasure hunts</strong>, and <strong>programming competitions</strong>.</p><blockquote>Hard work pays off, but only when it meets the right plan of action.</blockquote><h3>Wrap up</h3><p>Make your journey memorable, involve yourself in extracurricular activities and participate in cultural programs to refresh yourself. You can also join your college’s cultural and technical societies. This will help bridge the gap between you and your seniors and build new connections in the college. <br>Accompany yourself with good friends and maintain your health. Do regular workouts to sustain your mental and physical health.</p><p>Best of luck with your future endeavours!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c145c2683bd7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/a-complete-roadmap-for-the-first-year-of-engineering-c145c2683bd7">A complete roadmap for the first year of engineering</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Node.js Event Loop]]></title>
            <link>https://medium.com/software-incubator/node-js-event-loop-41c56d45d9c5?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/41c56d45d9c5</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[js]]></category>
            <category><![CDATA[event-loop]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[node-js-development]]></category>
            <dc:creator><![CDATA[Niharika Rastogi]]></dc:creator>
            <pubDate>Wed, 09 Feb 2022 07:17:45 GMT</pubDate>
            <atom:updated>2022-02-09T07:17:45.397Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>“Loop goes on and on and on and on and on”</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Jw9V__6jYhm2amP74D_0lw.png" /></figure><p>Suppose you are driving on a one-lane road with tons of cars all lined up. As long as all the cars are moving with an appreciable speed there will be no problem at all. But what if a car needs to halt on the road for a few seconds? Every car behind that car will have to wait and this will cause inconvenience for everyone.</p><p>How is this related to the node.js event loop? Let’s find out.</p><h3>Node.js</h3><blockquote>Node.js is an open-source and cross-platform JavaScript runtime environment.</blockquote><p>A Node.js application is <strong>single threaded </strong>which means that there is just one thing happening at a time just like the one-lane road in the example above. So if you have tons<strong> </strong>of clients requesting your server then each of them will have to wait for their turn because the server is serving one client at a time using a single thread.</p><h3>Non-blocking I/O</h3><p>Now suppose a client requested a file read task for a huge file which is going to take too long and due to single threading the event loop will have to wait for this process to finish before executing any other JavaScript code. This means that any further execution is blocked until the file read operation is completed just like the whole traffic is blocked if a car needs to halt for a few seconds.</p><p>But, this is not what we observe while working with Node. It is asynchronous and can<strong> </strong>perform <strong>non-blocking I/O</strong> operations, like reading from the network, accessing a database or the filesystem. It is like, if one car wants to halt then it is raised above in the air and asked to wait there while all the other cars can continue to move.</p><h3>Event loop</h3><blockquote>The event loop is an endless loop, which waits for tasks, executes them and then sleeps until it receives more tasks.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/623/1*N3RT7z4lc7W0O8zra2iXrQ.gif" /></figure><p>It is initialized by node when the application starts. It is going to manage all the requests that the server receives.</p><p>The JavaScript code in node.js is executed by the V8 engine which is written in C++. C++ has a special library module called <strong>libuv </strong>which is used to perform asynchronous operations and manage a special thread pool called the libuv thread pool.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/1*T3MKJr31N2wMXzA8vf38CQ.gif" /></figure><p>Let’s dive deeper into the working of the event loop with a series of steps.</p><p>A client makes a request to the server. The event loop will check if the request is synchronous or asynchronous.</p><ol><li><strong>Synchronous request: </strong>The<strong> </strong>C++ code, under the hood, will execute any synchronous request then and there and return the response to the client.</li><li><strong>Asynchronous request:</strong> If any asynchronous request is made then the event loop will check if there is any C++ primitive available to complete the task with the help of C++ libuv library.</li><li>If any C++ primitive is available then the event loop will assign the task to that primitive and the C++ code will complete the task in the main thread itself. <br>Else the task is assigned to background threads in the thread pool. This thread pool is composed of four threads which are used to delegate operations that are too heavy for the event loop.</li><li>The event loop offloads operations to the system kernel whenever possible. When one of these operations completes, the kernel responds back to Node.js so that the appropriate callback may be added to the poll queue to eventually be executed.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QxR2kCEOmaSU5nGOMKMqHA.png" /></figure><h3>Phases of event loop</h3><p>The event loop has six phases each of which has a queue of callbacks to execute. These six phases create one cycle, or loop, which is known as a <strong>tick</strong>. The event loop executes the callbacks of a specific phase until the queue has been exhausted or the maximum number of callbacks has been executed. The event loop will then move to the next phase in order.</p><p>Between each run of the event loop, Node.js checks if it is waiting for any asynchronous I/O or timers and shuts down cleanly if there are not any.</p><p>Following are the phases of the event loop which it enters in the respective order.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/583/1*NM69_tHSmin86GS4F9sPVA.png" /></figure><ol><li><strong>Timers</strong>: Suppose you want to execute a code after 100ms with the help of setTimeout(). The event loop will say, “OK, I am registering your request and I will not execute your code before 100ms for sure. I will execute it after 100ms as soon as possible.”</li><li><strong>Pending callbacks</strong>: This phase executes callbacks for some system operations such as types of TCP errors. For example if a TCP socket receives ECONNREFUSED when attempting to connect, some *nix systems want to wait to report the error. This will be queued to execute in the pending callbacks phase.</li><li><strong>Idle, prepare</strong>: This phase is used internally by Node.</li><li><strong>Poll</strong>: The event loop will execute all the callbacks in poll queue synchronously. If the poll queue was already empty then the event loop will look for requests in the next phase. If there are no requests in the fourth phase then the event loop will wait for callbacks to be added in the poll queue and execute them. <br><em>Once the poll queue is empty the event loop will check for timers whose threshold is over and if it finds any then it will go back to the timers phase and execute the callback for those timers which are over.</em></li><li><strong>Check</strong>: The code in this phase is executed using setImmediate() function just after the poll phase. If the event loop finds that the poll queue is empty then it will not wait for poll events and jump directly to the check phase and execute the code there.</li><li><strong>Close callbacks</strong>: If a socket or handle is closed abruptly (e.g. socket.destroy()), the ‘close’ event will be emitted in this phase. Otherwise it will be emitted via process.nextTick().</li></ol><h3>Summary</h3><p>The node.js event loop is single threaded and hence it can perform one task at a time. If a time consuming task is requested from the event loop then it will offload this task to the kernel and the worker threads and continue to work on other requests. There are certain phases of the event loop which it traverses in a fixed order and hence it is able to perform asynchronous and non-blocking tasks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/319/1*YU6pxj1CFmkaMyEJE4eXxQ.gif" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=41c56d45d9c5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/node-js-event-loop-41c56d45d9c5">Node.js Event Loop</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Beginner’s Guide To Android App Development]]></title>
            <link>https://medium.com/software-incubator/beginners-guide-to-android-app-development-6f3100e7968?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/6f3100e7968</guid>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[android]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[android-app-development]]></category>
            <category><![CDATA[beginners-guide]]></category>
            <dc:creator><![CDATA[Garima Pandey]]></dc:creator>
            <pubDate>Sat, 13 Feb 2021 12:44:35 GMT</pubDate>
            <atom:updated>2021-02-14T08:19:53.763Z</atom:updated>
            <content:encoded><![CDATA[<blockquote><strong>“The difference between a successful person and others is not a lack of strength, not a lack of knowledge, but rather a lack of will.”</strong></blockquote><p>Do you want to build an app to be available to millions of users worldwide? Do you like developing on open platforms? If you answered yes to either of these questions, but don’t know how and where to start you’re at the right place. Keep reading, and this walkthrough will guide you through the basics of Android development and help you build a strong foundation in the same.</p><p>Maybe you create the next “hit app” that changes the way we work or interact with each other. Maybe you’ll develop a tool that you can use yourself to improve your workflow. Or perhaps you’ll just gain a new skill that lands you a great job!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*xuYj6HV1t9tREKFodxj9Qg.gif" /></figure><h3>What is Android?</h3><p>Android is an open-source and Linux-based <em>Operating System</em> for mobile devices such as smartphones and tablet computers. Android being based on the Linux kernel, means that the basic operating structure is portable, multi-user, and able to handle complex multitasking.</p><p>Android offers a unified approach to application development for mobile devices which means developers need only to develop for Android, and their applications should be able to run on different devices powered by Android. The term “Android app development” as it relates to job opportunities covers a pretty fluid and extensive area of expertise and great career options right now! <em>Fun projects, a wider pool of customers, greater innovative potential, ease of installation, compatibility with more devices, ease to learn, freelancing, and tons of job prospects </em>are just some of the reasons developers are starting their journeys into the exciting world of the Android operating system.</p><p>Learning Android skills will open doors and make you a desirable developer across the board.</p><h3>Pre-Requisites</h3><p>Before you start with your app development journey, you must have the basics of Java or Kotlin all brushed up. You don’t need to be a walking encyclopedia of either of the two languages, just the basic understanding of OOPs and some other fundamental concepts will be enough for a beginner to start. The next skill up your way is XML, a markup language commonly used in Android development to declare a layout for the user interface (UI), dimensions, and strings. Now arises the big question: Java or Kotlin?</p><p>Both languages are officially supported by Google and Android Studio, but they have some distinct differences.</p><h4>Java</h4><p>Java has been supported by Google the longest and is what developers have been using to craft Android apps for years. Java is also one of the most popular programming languages in the world, which makes it a great choice for those who want to begin a career in development.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1018/1*tzeCjad95vqQmFltfgtsLw.png" /></figure><h4>Kotlin</h4><p>Kotlin on the other hand has become Google’s official choice for Android development. Kotlin is also significantly easier to get to grips with if you’re a complete beginner. Known for being much more concise and expressive, Kotlin helps alleviate some of Java’s drawbacks. For these reasons, Kotlin has become the language of choice for Android developers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/934/1*lRqRXa5P0Q_qaScSyXG27A.png" /></figure><p>Kotlin is preferred over Java because the ease of learning and adoption is great. Kotlin also removes the boilerplate code, greatly eliminates possible errors such as the infamous Null Pointer Exception. Furthermore, most top apps have already ported to Kotlin. Also, once you become a whiz in any one of the languages with respect to android app development, switching to the other won’t be much of a daunting task.</p><h3>Android Development tools</h3><p>Alright, so now you have the basic programming skills up your sleeves, next you need to tackle some basic android development tools such as :</p><ul><li>Android Studio IDE</li><li>Android SDK</li><li>Gradle build system</li><li>ADB(Android Debug Bridge)</li></ul><h4>Android Studio IDE</h4><p><a href="https://developer.android.com/studio/">Android Studio</a> is Android’s official IDE for native Android app development. Based on Intellij IDEA, Android Studio provides the fastest possible turnaround on your coding and running workflow. Android Studio provides an intelligent code editor, flexible build system, real-time profilers, debugging and testing tools, and emulators all within an easy-to-use drag-and-drop interface. It is free to download and is supported not only by Google but also by a large and actively engaged community of Android developers.</p><h4>Android SDK</h4><p>The Android SDK is the official development kit for Android app development. It is composed of modular packages that can be separately downloaded from the Android SDK Manager, including SDK tool, Google API, Android support, Android Debug Bridge (ADB), and more. You should always keep your Build Tools component updated by downloading the latest version using the <a href="https://developer.android.com/studio/intro/update">Android SDK Manager</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*rIa1v_xj0mPtzTuX9BBdvQ.gif" /></figure><h4>Gradle build system</h4><p>Google endorsed <a href="https://gradle.org/">Gradle</a> as a build system for Android apps. Based on Apache Maven and Apache Ant, Gradle is one of the most popular development tools for creating large-scale applications involving Java and Kotlin. Developers like using Gradle in conjunction with Android Studio because it’s very easy to add external libraries using a single line of code. With Gradle, you can deliver much faster builds.</p><h4>ADB(Android Debug Bridge)</h4><p>Android Studio includes the <a href="https://developer.android.com/studio/command-line/adb.html">Android Debug Bridge</a>, which is a command-line tool or “bridge” of communication between Android devices and other computers that can be used during development and the overall debugging process. By connecting an Android device to the development PC and entering a series of terminal commands, a developer is able to make modifications as needed to both devices.</p><h3>Know the project structure of an Android App</h3><p>If you strip an android app down to its core, you will find that it comprises a bunch of folders. They are as follows:</p><ol><li>Manifests Folder</li><li>Java Folder</li><li>res (Resources) Folder</li></ol><ul><li>Drawable Folder</li><li>Layout Folder</li><li>Mipmap Folder</li><li>Values Folder</li></ul><p>4. Gradle Scripts</p><h4>1. Manifests Folder</h4><p>Manifests folder contains <em>AndroidManifest.xml</em> for your creating the android application. This file contains information about your application such as android version, metadata, states package for Kotlin file, and other application components.</p><h4>2. Java folder</h4><p>Java folder contains all the java and Kotlin source code (.java and .kt) files that you create during the app development, including other Test files.</p><h4>3. Resource (res) folder</h4><p>The resource folder is the most important folder because it contains all the non-code sources like images, XML layouts, UI strings for your android application.</p><p><strong>res/drawable folder - </strong>It contains the different types of images used for the development of the application.</p><p><strong>res/layout folder - The layout</strong> folder contains all XML layout files which are used to define the user interface of your application.</p><p><strong>res/mipmap folder - </strong>This folder contains launcher.xml files to define icons that are used to show on the home screen.</p><p><strong>res/values folder - </strong>Values folder contains a number of XML files like strings, colors, and style definitions.</p><h4>4. Gradle Scripts folder</h4><p>It contains number of files which are used to define a build configuration which can be applied to all modules in your application. In <em>build.gradle</em> (Project level) there are buildscripts and in <em>build.gradle</em> (Module level) plugins and implementations are used to build configurations that can be applied to all your application modules.</p><h3>Introduction to UI</h3><p>The user interface (UI) for an Android app is built as a hierarchy of <em>layouts</em> and <em>widgets</em>. The layouts are View Group objects, containers that hold other Views (or other View Groups) and control how their child views are positioned on the screen. Widgets are View objects, interactive UI components such as buttons and text boxes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HiB3kYicoTsyKq0fmBTv1A.png" /><figcaption>Illustration of how ViewGroup objects form branches in the layout and contain View objects.</figcaption></figure><p>The basic layouts used from the start are Relative and Linear for most purposes and rarely Frame Layout at the starting of Android Development. Now there are many layouts that came into existence but one that gained the most attention is Constraint Layout for aligning views and removing nested hierarchies. The second important layout is the Motion layout which gained popularity recently for its ease of handling animations. You can check out this awesome Udacity course for starting with User Interface - <a href="https://www.udacity.com/course/android-basics-user-interface--ud834"><em>Android Basics: User Interface</em></a><em>.</em></p><p>Explore more about<em> </em>layouts<em> </em><a href="https://developer.android.com/guide/topics/ui/declaring-layout"><em>here</em></a>.</p><h3>Application Components</h3><p>Once you are done with the UI, you need to handle it and that’s where Java and Kotlin enter the game. Kotlin(or Java) classes called <em>Activities</em> and F<em>ragments</em> hold the container layouts and display them to the users with clicks management, showing and hiding loaders as required, etc. Alongside these, there are other essential building blocks of an android application namely <em>Services, Broadcast Receivers, Content Providers,</em> etc.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*68Dzf9MOUvXxyGbpdJYkmw.png" /></figure><h4>Activity</h4><p>An activity represents a single, focused screen that the user interacts with. Every activity contains a layout, which has a user interface to interact with the user. As every activity contains a layout associated with it, so it can be said that the activity class is the gateway, through which a user can interact programmatically with UI. An Android app may contain one or more activities, meaning one or more screens.</p><h4>Fragment</h4><p>A fragment represents a reusable portion of your app&#39;s UI. A fragment defines and manages its own layout, has its own lifecycle, and can handle its own input events. Fragments cannot live on their own-they must be <em>hosted</em> by activity or another fragment.</p><p>An activity has a lifecycle with callback methods where you can declare how your activity behaves i.e, the Activity class provides a number of callbacks that allow the activity to know that a state has changed: that the system is creating, stopping, or resuming an activity, or destroying the process in which the activity resides.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/662/1*eHQaNRketK4Af66pnwXTFA.png" /><figcaption>Activity Lifecycle</figcaption></figure><p>You can explore more about the activity lifecycle <a href="https://developer.android.com/guide/components/activities/activity-lifecycle"><em>here</em></a><em>.</em></p><h4>Services</h4><p>A service is a component that runs in the background to perform long-running operations. For example, a service might play music in the background while the user is in a different application, or it might fetch data over the network without blocking user interaction with an activity.</p><h4>Broadcast Receivers</h4><p>Broadcast Receivers simply respond to broadcast messages from other applications or from the system. For example, applications can also initiate broadcasts to let other applications know that some data has been downloaded to the device and is available for them to use, so this is the broadcast receiver who will intercept this communication and will initiate appropriate action.</p><h4>Content Providers</h4><p>A content provider component supplies data from one application to others on request. Such requests are handled by the methods of the ContentResolver class. The data may be stored in the file system, the database, or somewhere else entirely.</p><p>Once you get the hang of these basics, you can move ahead with some intermediate concepts like networking, threading, storage, etc.</p><h3>Networking</h3><p>The Android platform provides several Http clients thereby allowing connecting to the network, monitoring the network connection (including connection changes), and giving users control over an app’s network usage. It also describes how to parse and consume XML data. Android supports many libraries like <a href="https://developer.android.com/training/volley"><em>Volley</em></a>, <a href="https://github.com/square/retrofit"><em>Retrofit</em></a><em>,</em> etc. making networking a cakewalk. Go ahead and connect to the Internet! For more on networking, refer this course. <a href="https://www.udacity.com/course/android-basics-networking--ud843"><em>Android Basics: Networking</em></a></p><h3>Threading</h3><p>When an application is launched, Android creates a thread of execution for that application called the <em>main thread</em> or <em>UI thread</em>. The main thread is nothing but a handler thread. Any block of code that needs to be run is pushed into a work queue and then serviced by the main thread. As the main thread does so much work, it’s better to offer longer works to other threads so as not to disturb the UI thread from its rendering duties. They’re executed synchronously, which means the UI will remain completely unresponsive until the task gets completed. To avoid this situation, they’re usually executed in separate threads, which avoids blocking the UI while the tasks are being performed. This means they’re executed asynchronously from the UI. Android provides many ways of creating and managing threads like Async Task, Handler thread, Thread Pool Executor, Intent Service, and many more. Use these services and get some work off of the main thread.</p><h3>Storage</h3><p>Android provides several options for you to save persistent application data such as Shared Preferences, Disk Storage, Databases, Network Connection etc. The option you choose depends on your specific needs, such as whether the data should be private to your application or accessible to other applications (and the user) and how much space your data requires. For more on Data Storage, refer the following course. <a href="https://www.udacity.com/course/android-basics-data-storage--ud845"><em>Android Basics: Data Storage</em></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/627/1*ENAFy1GbusBYJK5eE1D76w.jpeg" /></figure><h4>Resources from Google and Android</h4><ul><li><a href="https://developer.android.com/guide"><em>Official Android Guide</em></a><em>: </em>A step-by-step guide to build an android app.</li><li><a href="http://developer.android.com/index.html"><em>Android developer hub</em></a>: The official Android developer site burst with tools, training, downloads, code samples, a thorough package library, and much more.</li><li><a href="https://www.youtube.com/user/androiddevelopers"><em>Android Developers YouTube channel</em></a>: Google’s Android Developers YouTube page that includes videos from live Android events, as well as demos and tutorials.</li><li><a href="https://developers.google.com/android/for-all/vocab-words/"><em>Google Android Glossary</em></a>: A complete glossary of new terms and vocab related to Android.</li></ul><blockquote>“Perfection is achieved not when there is nothing more to add, but rather when there is nothing more to take away.”</blockquote><p>The learning journey, however, doesn’t stop here. Once you are well acquainted with these fundamentals, you can continue with advanced concepts if you wish to go deeper down the rabbit-hole. If you’re still there, an awesome Android Development roadmap video awaits you! <a href="https://youtu.be/BakbEAyXoMI"><em>Android Development Roadmap video.</em></a></p><p>Head’s up! In no time you will be building apps that will make your resume stand out!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6f3100e7968" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/beginners-guide-to-android-app-development-6f3100e7968">Beginner’s Guide To Android App Development</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unveiling the concept of “Blockchain”.]]></title>
            <link>https://medium.com/software-incubator/unveiling-the-concept-of-blockchain-15844e8f5bb0?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/15844e8f5bb0</guid>
            <category><![CDATA[blockchain-technology]]></category>
            <category><![CDATA[types-of-blockchain]]></category>
            <category><![CDATA[byzantine-fault-tolerance]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[blockchain-protocols]]></category>
            <dc:creator><![CDATA[Aman Mishra]]></dc:creator>
            <pubDate>Tue, 05 May 2020 11:24:49 GMT</pubDate>
            <atom:updated>2020-05-05T18:56:52.488Z</atom:updated>
            <content:encoded><![CDATA[<p>Getting ahead with the power of blockchain.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*HTC1oMKYwC7a8vUBsiplhw.gif" /></figure><blockquote>Ever wondered about the problem of data tampering, fraud transaction, illegal manufacturing, unauthorised data access, overheads in the supply chain, secure digital currency, and many more?</blockquote><p>Well, with an increase in the technology and web-based applications the importance of having <strong>data integrity, reliability, and durability</strong> has become far more important than it ever was. The term <strong>WEB 3.0</strong> is closely related to these problems and their solution.</p><p>Hence to answer all these questions efficiently <strong>Blockchain Technology</strong> is the best solution available so far. Most of us already heard about the term <strong>Blockchain,</strong> but little of us have a clear understanding of this technology and its underlying principles.</p><p>Well, let’s decode this technology in the most fundamental terms.</p><h4>A blockchain is a decentralized immutable digital data ledger.</h4><p>Well, these terms might get confusing so let’s break it and have a crystal clear concept of it.</p><ul><li><strong>A blockchain is decentralized -: </strong>In simple term, there is no centralized governing system or a body, means each node(system on the blockchain network is called as a node) in the network has the complete information about all the transactions and records.</li><li><strong>A blockchain is immutable:- </strong>Immutable means data or record that cannot be changed, hence data in the blockchain can not be changed.</li><li><strong>A blockchain is a digital data ledger:-</strong> Ledger means a record or collection of the transactions. So a blockchain can be a chain of any digital record that might include transaction records, any file, etc.</li></ul><blockquote>Therefore, <strong>Blockchain can be described as a data structure that holds transactional records and while ensuring security, transparency, and decentralization.</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cvOshfIDHN19Ihn2bd_YJA.jpeg" /></figure><p>In the early days of this technology, it was mainly understood as the technology that is well efficient only for cryptocurrency and digital money like bitcoin, etc but <strong>make no mistake as the scope of this beautiful technology is far beyond the cryptocurrency and digital money.</strong></p><p>The first work on a cryptographically secured chain of blocks was described in 1991 by <strong>Stuart Haber and W. Scott Stornetta</strong>. However, the first blockchain was conceptualized by a person known as <strong>Satoshi Nakamoto</strong> in 2008. From where the cryptocurrency came into very existence and the term cryptocurrency became the synonym for the term blockchain. <strong>However, a Blockchain is not a bitcoin or cryptocurrency rather a blockchain is a technology upon which protocols like cryptocurrency and bitcoin are formulated.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*Jb8nTh-i-WHVeK-AvyeLDA.gif" /></figure><p><strong>Let’s see the basic principles of this technology:-</strong></p><ol><li><strong>Distributed or decentralized database</strong>. Each party on a <strong>blockchain</strong> has access to the whole database and its complete history. No single party regulates the data or information. Every party can validate the records of its transaction partners directly, without an intermediary.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jfTRyOq_9cEU13RnmF80tA.jpeg" /></figure><p><strong>2. Peer-to-peer transmission</strong>. Communication occurs straightforwardly between peers instead of through a central node. Each node stores and forwards information to all other nodes.</p><p><strong>3. Irreversibility of records</strong>. Once a transaction is inputted in the database and the accounts are updated, the records cannot be changed, because they are linked to every transaction record that came before them (this is basically where the term “chain” comes from). Various computational algorithms and approaches are deployed to ensure that the recording on the database is permanent, chronologically ordered, and available to all others on the network.</p><p><strong>Let’s see the mechanism of how this technology works and dive deeper.</strong></p><h4>What does a block in a blockchain consist of?</h4><p>Well, in the simplest term each block can be thought of as a page in a ledger. Page in a ledger consists of the information about a record like transaction, date and time signature, etc. Similarly, a block is also composed of several components like <strong>previous hash, timestamp, nonce, goal(difficulty or the hash function/mathematical function that is required to solve the hash to add a block in the chain), block body, etc.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/770/0*tn4eH6MtasIQhITI" /></figure><h4>What is Genesis Block</h4><p>The genesis block is the first block in any blockchain-based protocol. This block is sometimes referred to as Block 0. Every block in blockchain stores a reference to the previous block. In the case of the Genesis Block, there is no previous block for reference.</p><p>In technical terms, it means that the Genesis Block has it’s “previous hash” value set to 0. This means that no data was processed before the Genesis Block. All other blocks will have sequential numbers starting by 1 and will have a “previous hash” set to the hash of the previous block.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/616/1*HH5mhFOYB_47zdT6rChejA.png" /></figure><ol><li><strong>The hash of the previous block</strong></li></ol><p>The hash of the previous block is, so to speak, the chain of blockchains. Because the hash of the previous block is contained in the hash of the new block, the blocks of the blockchain all build on each other. Without this component, there would be no connection and chronology between each block.</p><p>Many Different hashing algorithms are present that can be used for cryptographing, however, <strong>SHA-256</strong> is the most famous of all cryptographic hash functions and is extensively used in blockchain technology.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/1*a499o8uWWtGztgMPFaxHRA.png" /></figure><p><strong>2. Block timestamp</strong></p><p>Each block contains a Unix time timestamp. Timestamp can be referred to as “Proof of existence”.In the blockchain, it would say as a <strong>crypto notarization</strong> can be used<strong> </strong>as the proof of integrity.</p><p><strong>3. The goal of the current difficulty</strong></p><p>The goal indicates how small the new hash must be to claim validity. In other words, every hash has a size in bits. The lower the goal in bits is, the harder it is to find a matching hash. A hash with many zeros at the beginning is smaller than a hash without zeros.</p><p><strong>4. The Nonce</strong></p><p>A nonce is an abbreviation for “number only used once,” which is a number added to a hashed — or encrypted — block in a blockchain that, when rehashed, meets the difficulty level restrictions. The nonce is the number that blockchain miners are solving for. When the solution is found, the blockchain miners are offered cryptocurrency in exchange.</p><p><strong>5. Block Body</strong></p><p>The block body is conceivable as the loading space of a truck. It contains all information about a record.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/550/1*MdNFAtjOa5lL_TL4pMnMhA.png" /></figure><blockquote>The transactions in a block are not just in a list, but in a so-called Merkle Tree.</blockquote><blockquote><strong>What is a Merkle Tree?</strong></blockquote><blockquote>The Merkle Tree takes its name from the mathematician Ralph Merkle. The discovery was that much information can be represented in a single hash. For this, the data itself is first hashed. Then the hashes are hashed again and merged. Finally, the Merkle Tree is merged into a single hash. This last hash is also called the root hash, the root of the tree. It represents all the information of its “leaves” (individual transactions) and “branches” (hashes of the leaves) in a relatively short string.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/447/1*wvBvWtdzAvM9886F9r450A.jpeg" /></figure><h4>Let’s see a very interesting scenario where a hacker wants to change/manipulate a block in the chain, to do so he has to solve the hash to decrypt the information, within a second. Since you might think that it’s not very difficult to hack into the network with a very powerful computer that can solve a hash in a second, but this is not the case. In order to prove the tempered block authentic, the hacker must have the block changed in at least 51% of the nodes that are present in the network otherwise that tempered block will be discarded by the other nodes on the network. So in simple terms, the hacker must hack at least 51% nodes in the network that too within a second which is almost impossible. That is why tempering the node in the decentralized system of the blockchain is impossible.</h4><blockquote>Since in the beginning, we discussed that blockchain is decentralised and there is no central authority to validate and authorise the transactions done and added to the blockchain. <strong>So you might have a question that how does the transactions are then validated and verified?</strong></blockquote><blockquote><strong>Well, this is possible only because of the presence of the consensus protocol which is a core part of any Blockchain network.</strong></blockquote><p>A <strong>consensus algorithm</strong> is a procedure through which all the peers of the Blockchain network reach a common agreement about the present state of the distributed ledger. In this way, consensus algorithms achieve reliability in the Blockchain network and establish trust between unknown peers in a distributed computing environment. Essentially, the consensus protocol makes sure that every new block that is added to the Blockchain is the only version of the truth that is agreed upon by all the nodes in the Blockchain.</p><p><strong>But before having a dive into consensus algorithm we’ll look at a scenario that may arrive into the blockchain network and that triggers the importance of the consensus protocols.</strong></p><blockquote>What happens, if some of the nodes are likely to fail or to act dishonestly? how can a distributed network of computer nodes then agree on a decision?</blockquote><h4>Well, this is the very question that gives rise to what we call as Byzantine Generals’ Problem.</h4><p>It is a logical dilemma that illustrates how a group of Byzantine generals may have communication problems when trying to agree on their next move.</p><p>The dilemma assumes that each general has its army and that each group is situated in different locations around the city they intend to attack. The generals need to agree on either attacking or retreating. It does not matter whether they attack or retreat, as long as all generals reach consensus, i.e., agree on a common decision to execute it in coordination.</p><p>Therefore, we may consider the following requirements:</p><ul><li>Each general has to decide: attack or retreat (yes or no);</li><li>After the decision is made, it cannot be changed;</li><li>All generals have to agree on the same decision and execute it in a synchronized manner.</li></ul><p>The aforementioned communication problems are related to the fact that one general is only able to communicate with another through messages, which are forwarded by a courier. Consequently, the central challenge of the Byzantine Generals’ Problem is that the messages can get somehow delayed, destroyed, or lost.</p><p>Besides, even if a message is successfully delivered, one or more generals may choose (for whatever reason) to act maliciously and send a fraudulent message to confuse the other generals, leading to a total failure.</p><p>If we apply the dilemma to the context of blockchains, each general represents a network node, and the nodes need to reach consensus on the current state of the system. Putting in another way, the majority of participants within a distributed network have to agree and execute the same action to avoid complete failure.</p><h4>Therefore, the only way to achieve consensus in these types of distributed systems is by having at least ⅔ or more reliable and honest network nodes. This means that if the majority of the network decides to act maliciously, the system is susceptible to failures and attacks (such as the 51% attack).</h4><h3>Byzantine fault tolerance (BFT)</h3><p>Byzantine fault tolerance (BFT) is the property of a system that can resist the class of failures derived from the Byzantine Generals’ Problem. This means that a BFT system can continue operating even if some of the nodes fail or act maliciously.</p><p>There is more than one possible solution to the Byzantine Generals’ Problem and, therefore, multiple ways of building a BFT system. Likewise, there are different approaches for a blockchain to achieve Byzantine fault tolerance and this leads us to the so-called consensus algorithms.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*u-wCROoNH4jCRr-RpxxVVw.png" /></figure><p>There are various consensus algorithm we’ll see some of the most important consensus algorithms</p><h3>Proof-of-Work</h3><p>Proof-of-work (PoW) is a consensus algorithm for blockchain networks that is the underlying consensus model of Bitcoin. Proof-of-work is a mechanism for achieving agreement on the blockchain network to confirm transactions and produce new blocks to the chain.</p><p>In proof of work, a miner has to solve a complex mathematical puzzle to generate the hash required for adding a block in the network.</p><p>Well, it might seem that it’s a quite easy protocol that we just have to solve a puzzle and we can get the access to add a block in the network. Well however it’s not the case because these are highly complex mathematical puzzle which requires immense computational power to solve and it’s all a brute force approach.</p><p>The complexity of the problem depends upon many factors like the maximum number of users, the minimum current power, and the overall load of the network. There is an avalanche effect on the hash generated if the information is changed even slightly</p><blockquote>PoW is very energy consuming and thus becomes very difficult to overpower this protocol in order to hack in the system.</blockquote><h3>Proof of Stake</h3><p>Proof-of-Stake algorithms achieve consensus by requiring users to stake a number of their tokens to have a chance of being selected to validate blocks of transactions and get rewarded for doing so.</p><p>An algorithm chooses from the pool of candidates the node which will validate the new block. This selection algorithm combines the quantity of stake (amount of cryptocurrency) with other factors (like coin-age based selection, randomization process) to make the selection fair to everyone on the network.</p><blockquote><strong>Coin-age based selection:<br></strong>The algorithm tracks the time every validator candidate node stays a validator. The older the node becomes, the higher the chances of it becoming the new validator.</blockquote><blockquote><strong>Random Block selection:<br></strong>The validator is chosen with a combination of ‘lowest hash value’ and ‘highest stake’. The node having the best weighted-combination of these becomes the new validator.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vfIu_ScxklTfMilhmxBQbA.jpeg" /></figure><p><strong>Now let’s see different types of blockchain networks.</strong></p><h3>1. Public Blockchain</h3><p>It is a non-restrictive, permissionless distributed ledger system. It marks the beginning of the major types of blockchains we know today. Bitcoin, Litecoin, and Ethereum are the <strong>blockchain platforms</strong> that are typical examples of a public blockchain. So, what are public blockchains? As the name suggests, this blockchain is <strong>‘for the people, by the people, and of the people.’</strong> Anyone having access to the internet can become an authorized node by signing in to the blockchain platform. They are then considered part of the blockchain network. A node or user of a public blockchain has the authority to perform mining, access current, and records, and verify transactions, or perform the proof-of-work consensus protocol for an incoming block. In this blockchain, there is no one in charge, and anyone can participate in writing, reading, or auditing the blockchain. These blockchains are open and transparent. In a public blockchain, decision making happens through what we discussed above i.e <strong>consensus algorithms </strong>such as proof-of-work, proof of stake.</p><h3>2. Private Blockchain</h3><p>This refers to a closed blockchain network, and this network is not completely decentralized and distributed like a public blockchain. It is a restrictive, permitted blockchain that only operates within a closed network. It is the private property of an organization or an individual. Unlike public blockchains, there is a person who is in charge here and looks after important things like reading/writing and to whom access must be given to read. Here, consensus or decision-making is achieved on the whims of the central in-charge who will decide whom to give mining rights or will even decide not to give at all. Private blockchains comprise specific constituent nodes on the network that are given the right to create, view, and authorize transactions. The blockchains developers will decide on the node that will get the transaction rights. The authorizations, permissions, accessibility, and level of security are in the hands of the controlling organization. Public blockchains have a small and restrictive network. The blockchain platforms that fall under the private blockchain category are <strong>Hyperledger Fabric, Hyperledger Sawtooth, Corda, and Multichain.</strong></p><h3>3. Consortium Blockchain</h3><p>It is a semi-decentralized type of blockchain where a blockchain network is managed by more than one organization. It is part public and part private and hence a combination of both public and private blockchains. The split between the public and private nature happens based on the consensus. In a consortium blockchain, only a few nodes or users are given the right to authorize transactions and oversee the consensus process. The division of rights and powers will be different for each consortium blockchain. Consortium blockchains are governed by a group and not by a single entity. Some of the typical examples of consortium blockchains are <strong>Quorum, Corda, and Hyperledger.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/638/1*wBaA1hjRKIyrsA-PYiXQeg.jpeg" /></figure><p><strong>Let’s see some of the major protocols of the blockchain technology</strong></p><h3>Bitcoin:</h3><p>The protocol on which the cryptocurrency <em>Bitcoin</em> is transacted, this was the earliest of the blockchain protocols. We have already discussed this protocol above.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*np2BFmZCfeu1IxZnI1ogjQ.jpeg" /></figure><h3>Ethereum:</h3><p><em>Ethereum</em> blockchain has many similarities with the <em>Bitcoin</em> protocol, e.g.:</p><ul><li>It’s a public, permission-less blockchain;</li><li>It uses the same technological backbones, e.g. cryptographic hash function, private-and-public key encryption, P2P network, etc;</li><li>The PoW consensus algorithm is used, the PoS consensus algorithm is also used some times;</li><li>There’s a native cryptocurrency, called <em>Ether</em>. <em>Ether</em> has the second highest market cap, behind only <em>Bitcoin</em>.</li></ul><blockquote>However, unlike <em>Bitcoin</em>, which was built for allowing crypto payment transactions over a decentralized network, <em>Ethereum</em> was designed with much larger objectives in mind. <em>Ethereum</em> provides a blockchain platform, using which developers can launch their own blockchain projects, including their own cryptocurrencies. The platform, commonly called as ‘<em>Ethereum Virtual Machine</em>’ (<em>EVM</em>).</blockquote><p><strong>What gives so much of the liberty for the developers on the Ethereum platform?</strong></p><p>The answer is <strong>Smart contracts. </strong>Smart contracts are pieces of code, which allow execution of legal functions, e.g. taking control of an entity based on certain conditions, and transferring crypto tokens based on fulfilling required conditions. Smart contracts on the <em>Ethereum</em> platform are codes using <em>Ethereum</em>’s proprietary language Solidity, which is inspired by C++, Java, Python, and JavaScript.</p><p><strong>DApps may be considered as the basis for the web 3.0 which I discussed in the beginning, </strong>are applications where the backend code runs on a decentralized blockchain and comprises of smart contracts. The frontend code can be written in any language. To be considered as DApp, an app must meet the following conditions:</p><ul><li>Fully open-source;</li><li>It must operate autonomously;</li><li>The app must use a crypto token, and no one entity can control the majority of the crypto tokens;</li><li>A consensus of the users determines future changes to the app;</li><li>Data must be stored in a decentralized blockchain, and meet cryptographic standards;</li><li>A standard cryptographic algorithm such as POW must be used, to generate the crypto tokens.</li></ul><h4>Ethereum also provides a way for the user to specify how much computing power will be expended for a transaction, by using a measure of processing power, called ‘Gas’. The user can specify a gas limit. If a transaction remains within that limit then it’s executed, however, if it exceeds the limit, then the changes are reverted.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/669/1*2xCDIQPPBu3PXO7ZFIzh5A.png" /></figure><h3>Hyperledger:</h3><blockquote><strong>Hyperledger Fabric is an enterprise-grade permissioned distributed ledger</strong> framework for developing solutions and applications. Its modular and versatile design satisfies a broad range of industry use cases. It offers a unique approach to the consensus that enables performance at scale while preserving privacy.</blockquote><p>While public, permissionless blockchains have made it possible for many cryptocurrency projects to make a mark, wider adoption of blockchain is possible only when large enterprises adopt this technology. However, large enterprises have some specific requirements from blockchain technology, i.e :</p><ul><li>Only trusted entities should join the network because enterprises can’t have their proprietary information visible to everyone;</li><li>Enterprises need blockchains with high scalability and transaction speed;</li><li>Even among the trusted participants, access to information should be role-based.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/770/1*TK5amIlKsO4gYCs9u1a5Uw.png" /></figure><p><strong>Finally, let’s see some of the use cases of blockchain technology.</strong></p><ol><li>Supply chain.</li><li>Healthcare Facilities.</li><li>Land and asset registry.</li><li>Banking and Stock Market.</li><li>Cryptocurrency.</li><li>Digital Identity.</li><li>Voting.</li><li>Food Safety.</li><li>Verification of the documents(certificates, mark sheet, etc)</li><li>Fake news detection.</li></ol><blockquote>So in this article, I’ve tried to explain all the fundamentals of the blockchain technology in the most simple terms.</blockquote><blockquote>I hope you all must have found this article useful.</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=15844e8f5bb0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/unveiling-the-concept-of-blockchain-15844e8f5bb0">Unveiling the concept of “Blockchain”.</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[7 Tried and True Laws of UX.]]></title>
            <link>https://medium.com/software-incubator/7-tried-and-true-laws-of-ux-3c846ceb6fab?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/3c846ceb6fab</guid>
            <category><![CDATA[ux-research]]></category>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[ux-design]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[laws-of-ux]]></category>
            <dc:creator><![CDATA[Vinayak Gupta]]></dc:creator>
            <pubDate>Wed, 29 Apr 2020 09:58:26 GMT</pubDate>
            <atom:updated>2021-09-29T18:07:17.608Z</atom:updated>
            <content:encoded><![CDATA[<h3>7 Tried and True Laws of UX</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WnUouALb9G9bjInZNBHN3g.png" /></figure><p><strong>Design just for the sake of designing does not make any sense. </strong>Design differs from art, it makes the worlds living more comfortable by <strong>providing solutions to particular problems and aims to achieve some result</strong>. Any Design won’t ever remain in isolation, It surely will come into interaction with end-users. Hence, professional Designers try to make out things by stepping into the user’s shoes itself and try to gather their pain points and how they feel. This is where the coined term,<strong> User Experience Design (UX Design)</strong> comes into play.</p><blockquote><strong>“Want your user to fall in love with your Design? Fall in love with your User.” — Dana Chisnell</strong></blockquote><p>UX design always happens. Whenever anyone thinks of interaction between product and user, there occurs a process of UX Design. But Good Design happens when these thoughts are developed in an organized way by following certain principles and guidelines of Design, to understand and fulfill the need of users and the business. This can be achieved with the help of effectual design laws and use proven formula as a guide to achieve optimal user experience in designs.</p><p>As we all know, Graphical representations are much easier to remember than a huge lot of thesis. In <strong>“Laws of UX”</strong>, each law gets its Graphic representation inspired by the classic covers of minimalist books. And of course, when these laws will be strung with real-life instances, it’ll surely make your implementations go smooth. <strong>So Let’s begin!</strong></p><h3>1. Fitt’s Law</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/534/1*-6JTEoGS4YyIQx9KzszE1w.png" /><figcaption>Fitt’s Law Graphical Representation.</figcaption></figure><blockquote>“The time to acquire a target is a function of distance to and size of the target.”</blockquote><p>This law states that the time required for a user to move to its target area is a function of the distance between the pointer of the user divided by the size of the target area. It demonstrates how to <strong>ease interactions through the careful sizing and positioning of interface elements</strong>. Touch targets should be large enough to be recognized and accurately selected by users.</p><p>Let’s relate it to real-life instance, Many of you have wondered that, why<strong> “Add to Cart”</strong> and <strong>“Buy Now”</strong> buttons are comparatively bigger than any other buttons, this law proves the fact. These buttons are closer to the user’s pointer, since we are western and we read from left to right, and it falls in the reading zone of the mouse.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lDP6Pxg7pUSfnJcsRgmgvQ.png" /><figcaption>Fitt’s Law Instance on E-commerce.</figcaption></figure><p>This can also be felt on the mobile view that, these buttons are mostly present in the area where our thumbs are easier to reach naturally (know as <strong>UX Thumb zones</strong>).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5zSQ4lbNlCuIDLyatgbgeA.png" /><figcaption>Fitt’s Law verifying UX Thumb Rule.</figcaption></figure><h3>2. Hick’s Law</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/536/1*aozgnTSEJfPI-u1C7rQGYQ.png" /><figcaption>Jakob’s Law Graphical Representation.</figcaption></figure><blockquote>“The time it takes to make a decision increases with the numbers and complexity of choices.”</blockquote><p>This law makes sure that the product is not confusing and misleading for the users. It can be done by <strong>providing them with a concise set of options or by breaking down complex tasks into smaller steps</strong>. This can also be performed by highlighting the recommended options for the users.</p><blockquote><strong>Rule of Thumb for UX: More Options, More Problems.</strong></blockquote><p>Hick’s law reflects a Usability Principle in UX i.e KISS: Keep it Simple, Stupid. This comes out that the users want everything on point, simple and straightforward.</p><p><em>What would you prefer?</em></p><p><em>A.) A form with 20 Input fields?</em></p><p><em>B.) A 4-stepper form with 5 Input fields on each?</em></p><p>It mostly <strong>depends on type and sector</strong> of the product and person, but according to Hick’s law, the second option is more preferable because it tends to simplify the questionnaire and accumulate similar types of the question at the same place, reducing its complexity.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3gn9aycAV2tNysnmB2Y0pw.jpeg" /><figcaption>Hick’s Law In The Real World.</figcaption></figure><p>One of the greatest examples of Hick’s law in the real world is the TV remote. Most remotes are so confusing that they need to make a button diagram before people can understand how to use it. Apple’s reaction was to make the remote simpler. The apple remote is much easier to understand. More importantly, <strong>users don’t have to spend so much time figuring out how to use it</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QuZh-dyu3MRSkxvu_ETY4A.jpeg" /><figcaption>Hick’s Law practical use.</figcaption></figure><h3>3. Jakob’s Law</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/538/1*u_mZmQt5ZtzpQbaBu-NA4Q.png" /><figcaption>Jakob’s Law Graphical Representation.</figcaption></figure><blockquote>“Users spend most of their time on other sites. This means that users prefer your site to work the same way as all the other sites they already know.”</blockquote><p>The best way to make something new is to take reference from some similar pre-existing products so that clients can understand what is it about and can associate with it properly. <strong>By leveraging the existing mental model, we can build better User Experience</strong> so that the user can focus more on the task rather than building any new mental model. That’s why it’s better not to be over-original or over-creative.</p><blockquote><strong>Do not make them think.</strong></blockquote><p>Most of you would have noticed that in approx 90% of the websites, <strong>the logo of the company is on the top-left corner</strong>. Its because people have this regular fixation of finding the logo on that particular place. To accumulate these kinds of erudition that what people are already up to, a <strong>5-second usability test</strong> can be performed, with the help of which you can get the keynotes that what users tend to remember on its first shot, and hence use it for making superior User Experience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jM1Cj_0Fl_xk7H8MQ9BvhA.png" /><figcaption>Jakob’s Law practical example.</figcaption></figure><p>Another practical example of Jakob’s law can be heeded in most of the E-Commerce website that, for any particular product, the information related to the product and “Add to Cart” button will be on the right side whereas the image of the product will be on left. This is because a <strong>potential client expects it in the same way</strong>.</p><h3>4. Law of Prägnanz</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/536/1*4U8AgvWq0Z8MUy7SII8JaA.png" /><figcaption>Prägnanz’s Law Graphical Representation.</figcaption></figure><blockquote>“People will perceive and interpret ambiguous or complex images as the simplest form possible, because it is the interpretation that requires the least cognitive effort of us.”</blockquote><p>Also known as <strong>“Law of Simplicity”</strong>, which confronts that people opt for simple and ordered shapes rather than any complex structure because the interpretation of simple shapes requires less mental efforts. Hence, when confronted with complex shapes, we tend to reorganize them into simpler components or a simpler whole.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*KUScyNxfu3Cl1eNAuMrZMg.png" /><figcaption>Law of Prägnanz’s practical Example.</figcaption></figure><p><em>Which of these caught your sight at first?</em><strong> The one on right</strong>, as it is organized of recognizable shape you are familiar with and you didn’t have to stress your mind to figure out what is it?</p><p><strong>Ever Wondered? Why most of the buttons are rectangular? Why don’t people try other shapes like a rhombus, pentagon, etc for a button?</strong></p><h3>5. Law of Proximity</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/538/1*Q-hzzn1BRkIKIXizrPO0KA.png" /><figcaption>Law of Proximity Graphical Representation.</figcaption></figure><blockquote>“Objects that are near or proximate to each other, tend to be grouped together.”</blockquote><p>This law describes how <strong>the human eye builds up a connection between the objects that are grouped as visual elements</strong>. Elements that are close to each other are perceived to be related when compared with elements that are separate from each other.</p><p>Just like any book or any written story, different subjects and ideas are <strong>separated with the help of paragraphs</strong>, stating the practical implementation of the law of proximity.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U1c46AUN9q-tCWc_VwQykg.png" /><figcaption>E-commerce following Law of Proximity.</figcaption></figure><p>Nowadays, every E-commerce Website tends to obey The Law of Proximity, by grouping similar objects and hence making it more manageable for the user to understand the placement of objects.</p><h3>6. Serial Position Effect</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/538/1*X9T5rG8QX3QiAD7FjtWXaw.png" /><figcaption>Serial Position Effect Graphical Representation.</figcaption></figure><blockquote>“Users have prosperity to best remember the first and last item in the series.”</blockquote><p>This law states that <strong>the human mind can store the first and last item of the series in its long-term working memory</strong>, Hence it is suggested to keep the important matters either at last or at first and place the least significant item in the middle.</p><p>For a practical example, we can refer to the <strong>navigation bar of Instagram</strong>. The <strong>Home button</strong> is in the first place and the <strong>Profile button</strong> is at last. The most important and core parts of the use of the application. Positioning key actions on the far left and right within elements such as navigation can increase memory.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*l-nSflIwaI_5PLxXSm6EWQ.png" /><figcaption>Instagram obeying The Serial Positioning effect.</figcaption></figure><h3>7. Von Restorff Effect</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/534/1*sY6Hh8w1LeP5ax8CPSkj8g.png" /><figcaption>Von Restorff Effect Graphical Representation.</figcaption></figure><blockquote>“The Von Restorff effect, also known as The Isolation Effect, predicts that when multiple similar objects are present, the one that differs from the rest is most likely to be remembered.”</blockquote><p><strong>The Isolation effect</strong>, as the name suggests, <strong>the most important information needs to be visually different</strong>. The most distinctive object draws the attention of the user and is striking. It should be notably diverse from other objects in the series in terms of color, size, etc.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8oq3TlViv_Cb7ihMHnajgg.jpeg" /><figcaption>Evernote serves The Von Restorff effect.</figcaption></figure><p>Here is an example of using the Von Restorff effect in their pricing plan, by having a <strong>black label on top of their premium plan to highlight it</strong>.</p><p>Making an item stand out will make its surroundings fade away, therefore balance should be an important factor when using the art of isolation, and it should only be used when there’s a specific goal or objective.</p><h3>Winding Up!</h3><p>Here are some Tried and True Laws of UX which were illustrated with help of some real-life examples to make it feel more happening, Furthermore, some more basic guidelines can be followed while pursuing User Experience Design, you can check it here <strong>“</strong><a href="https://lawsofux.com/"><strong>Laws of UX</strong></a><strong>”</strong> by <strong>Jon Yablonski</strong>. However, these were also referred from the following website itself.</p><p><strong>‘Don’t make users think’</strong> is a common adage in the product design. Designers should strive to reduce the user’s cognitive load and lower the cost of interaction by designing <strong>easy-to-use products</strong>. The principles above should be a part of your<strong> design toolbox</strong>. Applied correctly, they can help you create a better user experience for your users.</p><blockquote><strong>“Perfection is achieved not when there is nothing more to add, but there is nothing left to take away.”</strong></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3c846ceb6fab" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/7-tried-and-true-laws-of-ux-3c846ceb6fab">7 Tried and True Laws of UX.</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Git And GitHub — A Beginner’s Guide]]></title>
            <link>https://medium.com/software-incubator/git-and-github-a-beginners-guide-81fb984ce36a?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/81fb984ce36a</guid>
            <category><![CDATA[git]]></category>
            <category><![CDATA[git-and-github]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[beginners-guide]]></category>
            <dc:creator><![CDATA[Madhur Vashistha]]></dc:creator>
            <pubDate>Wed, 15 Apr 2020 20:08:01 GMT</pubDate>
            <atom:updated>2020-04-19T13:27:47.005Z</atom:updated>
            <content:encoded><![CDATA[<h3>Git And GitHub — A Beginner’s Guide</h3><blockquote>“Success is just an outcome of exploring the endless possibilities.”</blockquote><p>Git is one of the most popular version control systems out there. Proper knowledge of git helps you become more efficient and work conveniently especially when working in a team. It is also one of the essential skills for a good software engineer.</p><blockquote>A bank is utilized to keep your finances and maintain it likewise Git and Github is the bank of world developers. This is the very step towards professionalism in the world of code.</blockquote><p>So, if you are new and are looking to understand Git and GitHub, this is the right place you have landed. So, let’s get started.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*BZw9XLYRsVNIsL8Cisw5gA.gif" /></figure><h3>What is Git and GitHub?</h3><p>Git is a distributed version control system for tracking changes in source code during software development. It is designed for coordinating work among programmers, but it can be used to track changes in any set of files. Its goals include speed, data integrity, and support for distributed, non-linear workflows [source — <a href="https://en.wikipedia.org/wiki/Git">wikipedia</a>].</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/186/1*Ik2uFjixGHEBUKjX3UORxQ.png" /></figure><p>First, let’s understand what a <strong>version control system</strong> is?</p><p>In simple words, version control can be defined as the track of amendments in a document, information, a computer program, etc.</p><p>A <strong>distributed version control</strong>(VCS) is one in which the complete code or project and its history (including the commits and changes) is present on every developer’s computer.</p><p>Thus, in simple words Git is a software to keep track of your project, which means you can keep track of the changes you made in your code or any file, you can add or remove files you created and maintain the full history of your work.</p><p>Other features of Git include:</p><ul><li>Allowing many people to work on the same project and let them see the changes made by others.</li><li>Data integrity.</li><li>Easy access to the source code</li><li>It helps to find bugs as it keeps the history of the changes to the code.</li></ul><p>Now, many times the names Git and GitHub are used interchangeably. But actually, they are two different things. Git is a tool to create a local repository on your system and make changes to it whereas GitHub is a website to host a repository on a remote server. Git is what you will locally use on your system to commit changes to a remote repository which will be present on a remote server and which you can access through your GitHub account.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/0*1X-b4wr-qeu2EZHF" /></figure><p>So this now, that you’ve got a simple idea about what Git and GitHub are. <strong>So let’s now understand what a repository is:</strong></p><p>A repository (shortly pronounced as repo) is a space where you keep your project or where your project is actually present. It can be a local folder of your computer or a space on GitHub. You can keep any kind of file in a repository, including your codes, images, text files or any other kind of file. <strong>Repositories are mainly of two types:</strong></p><p><strong>i)</strong> <strong>Local Repository</strong> — The repository on your machine is called a local repository.</p><p><strong>ii)</strong> <strong>Remote Repository</strong> — The repository on the remote server or the one on your GitHub account is called a remote repository.</p><p>So after understanding Git and GitHub now let’s move on and understand some basic Git commands. Now let’s understand <strong>some basic Git commands</strong> and how to use them. Follow the steps given below, so that you can completely understand the flow and working.</p><h3>Step 0: Setting Up Git and GitHub</h3><p>First, install <a href="https://git-scm.com/download/win"><strong>Git</strong></a> to your system and create a <a href="https://github.com/join"><strong>GitHub</strong></a> account. Then, you need to configure your git with your GitHub account.</p><p>Open terminal or git bash and type the following commands:</p><pre><strong>git config --global user.name “Your GitHub username”</strong></pre><pre><strong>git config --global user.email “Your email address”</strong></pre><h3>Step 1: Create a local Git repository</h3><ul><li>First, create a folder where you will store your project.</li><li>Then open the terminal or Git Bash to use the following commands for creating a local repository.</li></ul><pre><strong>cd &lt;your-project-folder-name&gt;    </strong>// To move to the project folder.</pre><pre><strong>git init           </strong>// Initializes a local repository to the project.</pre><p>The “git init” command initializes your project folder with a local git repository.</p><h3>Add Some Files To Your Project</h3><p>Now to understand the following steps, first add some files to your project folder. For example, let’s add a text file to the folder, say <em>file1.txt</em>.</p><h3>Before Moving Forward!</h3><p>Before moving further, first, let’s understand what is staging and what is a commit.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/225/0*9EmTdAQe3OMzbZr0" /></figure><p>A commit is just a track of the changes you make to your project along with a message that you give in relevance to the changes you made. <strong>A commit helps you get back to any state of your project.</strong> Simply, it is a record that at what time, what was the state of your project.</p><p>Before you add your files or code to a commit, it needs to be in the <strong>staging area</strong>. The staging area keeps track of the files which need to be committed or which are changed but not added to the repository. This gives you the control to select which files are to be committed.</p><h3>Step 2: Staging</h3><p>Now let’s add our “file1.txt” file to the staging area. To do so, use:</p><pre><strong>git add file1.txt</strong></pre><p>If you want to add all the files present in the folder to the staging area then simply use:</p><pre><strong>git add .</strong></pre><h3>Step 3: Committing</h3><p>Once you have added your files in the staging area, you can commit them now.</p><p>To commit the files present in the staging area use the following command:</p><pre><strong>git commit -m “Your commit message”</strong></pre><p>Written in the inverted commas is the commit message which you write in relevance to the changes you made to the code or files in a particular commit.</p><h3>Step 4: Setting Up The Remote repository</h3><p>Until now you have just added your files or code to the local repository. No one will be able to see your files or code in any other system than yours. So we need to add the files or code to the remote repository so that others can view them, clone to their systems and add files to your repository if you want them to do so. This is where GitHub comes into action.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*sOWIyC1rjrWSUdIS1KvyHw.gif" /></figure><p>On the GitHub homepage, you will find a <strong>New Repository </strong>option. Click on it and create a new repository. Give a name to your repository.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/988/0*xmaBnMfbFZGrqCe2" /></figure><ul><li>Now you can sync your local repository with this remote repository.</li><li>This remote repository allows others to view your files and clone them to their system.</li><li>It stores your project on a remote server, so if you ever lose the project folder from your system, you can get all your files back from this repository.</li><li>For this, you need the URL of the remote repository, which you can find as shown in the image below.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*L2MXNtbM0jN1XFjx" /></figure><p>Copy this URL and to point your local repository to the remote repository use the following command:</p><pre><strong>git remote add origin &lt;remote-repository-url&gt;</strong></pre><h3>Step 5: Pushing</h3><p>To push the code means to add the code to a branch in the remote repository. To do so, use the following command:</p><pre><strong>git push -u origin master</strong></pre><p>After the first commit, you can simply use</p><pre><strong>git push</strong></pre><p>to push the changes to the remote repository.</p><p><strong>So, the normal workflow can be understood as:</strong></p><ol><li>Do some programming</li><li>Check what you have changed.</li><li>Add the files to the staging area.</li><li>Commit the files.</li><li>Finally, push them to GitHub.</li></ol><h3>Branches</h3><p>Now, let’s move to a bit advanced topic of Git, i.e, branches.</p><p>Branching is one of the most important and useful concepts of git. Every repository contains one branch by default, which is the “master” branch. Up to this point, you’ve been working on the master branch, which is the only branch in your repository.</p><p>Essentially, a branch allows you to create different states of your project without affecting one another.</p><p>For example, you want to add a new file or make some changes to your code, but don’t want to affect the work you have done till now. This is where branches are used. You can create a new branch from any commit on any branch. The new branch contains all the files of the branch from which it has been created. You can do your stuff on the new branch. This will not affect your code on any other branch, say the “master” branch. Generally, the main code is kept on the master branch and new features or changes are implemented using new branches and then finally merging these branches into master after the work has been done.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/440/0*lXoupJNjU0yK0ugV" /><figcaption>Branching</figcaption></figure><p>Branches are useful when two or more people are working on a project or in a repository. They can simply make branches of their own, do some work and then <strong>merge </strong>branches into a single branch that contains the contents of both the previous branches.</p><p>To get the list of all the branches in your repository use:</p><pre><strong>git branch</strong></pre><p>To create a new branch from any branch, you first need to be on the branch from which you want to create a new branch. For simplicity, let’s say we want to create a new branch from the master branch.</p><p>Since we are already on the master branch we can directly use the following command:</p><pre><strong>git branch &lt;branch-name&gt;</strong>    (without angular bracket)</pre><p>This creates a new branch that will contain all the files of your master branch, but any further changes done on this branch will not affect the files on the master branch.</p><p>Now, to start working on the new branch you need to switch from master or previous branch to the new branch. For that, use:</p><pre><strong>git checkout &lt;branch-name&gt;</strong></pre><p>You can now make changes to the files on this branch without affecting the files on the master branch.</p><p>You can also use below shorthand command to do the above two mentioned tasks in a single step i.e create the new branch and switch to it:</p><pre><strong>git checkout -b &lt;branch-name&gt;</strong></pre><h3>Merging</h3><p>After you implement a new feature on a branch you’d like to merge this branch with any other branch, say the “master” branch. You can do this with the help of a <em>git merge.</em></p><p>To merge a branch into another, you first need to checkout to the branch in which you want to merge the other branch.</p><p>For example, suppose we want to merge a branch into master. So first we need to checkout to the master branch, i.e</p><pre><strong>git checkout master</strong></pre><p>And then we can use the following command:</p><pre><strong>git merge  &lt;name-of-branch-to-be-merged&gt;</strong></pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*EaZVrqXp8JgArWEv" /><figcaption>Merging</figcaption></figure><p>Now, when we merge two branches git first checks for the differences in the files of the two branches, line by line. These differences sometimes lead to what is known as a <strong>merge conflict.</strong></p><p>For example, consider you have file1.txt on the master branch. Suppose the first line of file1.txt contains “This is the first line”. Now, let’s say you created a new branch and changed the content of the first line to “This is the second line”. Now, when you merge these two branches, it will create a conflict because git doesn’t know what should be the content on the first line. Hence, it will generate a merge conflict and will not complete the commit. Otherwise, if there is no conflict found, git will simply merge the files and create a commit.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/716/0*B4kkM7OEo0fwwHpz" /><figcaption>Merge Conflict</figcaption></figure><p>In case of conflict, git inserts appropriate conflict markers to the files having a conflict. You can resolve the merge conflicts with the help of these conflict markers. Open the file in any editor of your choice and it will look like:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/852/0*vkggxSByfw6qUVIg" /></figure><p>Now, you need to decide the content of the lines where the conflict has occurred. Keep the required content and remove all the remaining lines and markers and finally commit the changes.</p><p>After the commit, your branch will get merged to the master branch.</p><h3>Few More Commands:</h3><p><strong>Git Status</strong></p><p>If you want to get the details about what files have been modified and what files are in the staging area then use this command as:</p><pre><strong>git status</strong></pre><p><strong>Git Log</strong></p><p>To know all the commits which have been done yet, use:</p><pre><strong>git log</strong></pre><p><strong>Git Clone</strong></p><p>You can clone an existing repository to your system, you can use the following command:</p><pre><strong>git clone &lt;remote-repository-url&gt;</strong></pre><p><strong>Git Pull</strong></p><p>If you want to get the latest changes from the remote repository to your local repository use the following command:</p><pre><strong>git pull origin master</strong></pre><p>This is generally used when you work in teams and other developers commit changes to the repository regularly.</p><h3>What’s Next?</h3><p>And that’s the basics of how to work with Git and GitHub. But there is much more ahead you need to learn. Now explore more about Git and also how to use it efficiently. Having a good knowledge of a version control system helps you a lot in better development as it makes the development process faster, convenient and gives you more control over your code.</p><p>Also one thing about both Git and GitHub — the community behind them is extremely supportive and generous in the sheer volume of information contributed. You’ll be in good hands. Now, it&#39;s your time to explore and step forward as an expert in the field of Git and GitHub.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=81fb984ce36a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/git-and-github-a-beginners-guide-81fb984ce36a">Git And GitHub — A Beginner’s Guide</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Definitive Guide For Web Development]]></title>
            <link>https://medium.com/software-incubator/a-definitive-guide-for-web-development-889e6e63b1a7?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/889e6e63b1a7</guid>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Muskaan Mittal]]></dc:creator>
            <pubDate>Mon, 06 Apr 2020 09:13:52 GMT</pubDate>
            <atom:updated>2020-04-06T14:07:21.712Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>“Doing what you love the most, certainly leads you towards excellence”</blockquote><p>While surfing through different websites, most often you might have wondered how the stuff works or might have heard the terms like front-end development, back-end development, but never got familiar with them. With billions of websites out there, web development is among the most popular and trending jobs today. So, if you want to get started with web development and get the idea of how things function or want to be an aspiring web developer, we are here to help you out with this.</p><p>So, now it’s time to roll in towards the goal…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*h-FuIYtxJxoQzDrE_E3QRw.gif" /></figure><h3>How do web applications work?</h3><p>Before diving into the tools and technologies required, we first need to understand the working of a web app. Whenever you type in some URL in your web browser or open any website, it nearly takes just blink for your eye to get the requested site loaded in the browser. So, how does all this happen?</p><p>Let’s try to grab these concepts with an example of Facebook. When you try to login to your account you act as a <strong>client </strong>to them. You enter your email id and password and hit the login button. The browser then sends a request to the Facebook servers to check the credentials and let you log in to your account.</p><p>On the<strong> server</strong>, the credentials you entered are checked, that if the email id and password you provided are correct or not. This data (email id, password and much more) of all the users is stored in what is known as the <strong>database</strong>. From the database, the credentials are matched and the server then sends a <strong>response</strong> to the browser whether the information entered is correct or not. The browser interprets the response and gives the result to you (client).</p><figure><img alt="Working of Web App" src="https://cdn-images-1.medium.com/max/1024/1*q3k_qb71dvCFOxdUxuUQsg.png" /><figcaption>Working of Web App</figcaption></figure><p>Thus, a web application mainly consists of the following layers:</p><ol><li><strong>Front-End Web Development, </strong>which is simply what you see and interact with on any website while navigating on the Internet.</li><li><strong>Back-End Web Development, </strong>it includes the server to which the calls are made whenever you do some operation on the website, like clicking on a button.</li><li><strong>Database,</strong> where all the data are meant to be stored and manipulation on data can be done.</li></ol><p>So, now as you’ve understood the working of the browser, let’s dive deep into the layers of a web application and the tools and technologies required for them.</p><h3>Front-End Web Development</h3><p>The front-end of the web application is simply what you see on the website. It is the visible part of the website or web application that is responsible for user experience. The user directly interacts with the front end portion of the web application or website. From fonts and colors to dropdown menus and sliders, is a combo of HTML, CSS, and JavaScript being controlled by your computer’s browser.</p><blockquote><strong>A front-end dev is responsible for the interior design of a house that’s been built by a back-end dev.</strong></blockquote><p>Now, let’s see the languages and tools required for front-end development.</p><h4>Skills and Languages</h4><ol><li><strong>HTML</strong>: stands for HyperText Markup Language and is generally the cornerstone for all the webpages you see today. It defines elements on a webpage and tells browsers what to display, how to display it, and where.</li><li><strong>CSS: </strong>Cascading Style Sheets, is a simple design language. Using CSS, you can control the style of fonts, how columns are sized, layouts are designed, variations in display for different devices and screen sizes as well as a variety of other effects.</li><li><strong>Javascript: </strong>It is responsible for all the changes or dynamicity that occurs on a webpage. Its implementation allows a client-side script to interact with the user and make dynamic pages.</li></ol><blockquote>In simple words, you can say that HTML acts as the skeleton of the body of a webpage. CSS is a dress that beautifies it and makes it look attractive and JS is responsible for the movement and actions of the body of the webpage.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*IaGbJ7t4TFpD-eSDmCVM1w.gif" /></figure><h4>Front-End Frameworks and Libraries</h4><p>A <strong>software framework</strong> is a pre-written app structure for you to build on top of. There are numerous Front-End Frameworks and a lot more are added in the following list of these frameworks on a daily basis. but the most popular of them are listed below :</p><ol><li><strong>Angular: </strong>This <strong>Javascript framework</strong> is basically used to build a Single Page Application (SPA) i.e. once the website is loaded in the browser it does not need to load any of its pages again. It is written in Typescript, which is a more strictly typed version of javascript.</li><li><strong>React: </strong>It is a declarative, efficient, and flexible <strong>Javascript library</strong> for building user interfaces. It lets you compose complex UIs from small and isolated pieces of code called “components”. Basically, it is used to build a Single Page Application.</li><li><strong>Bootstrap: </strong>It makes any website responsive very effortlessly on fingertips. It is the most popular <strong>CSS framework</strong> for developing responsive, mobile-first web sites.</li></ol><h4>Resources</h4><p>Now, the question is how and where to learn these languages?</p><ul><li><a href="https://www.w3schools.com/html/"><strong>W3schools</strong></a> is a favored website for learning HTML, CSS and other languages. It helps you to learn many different topics in a short and handy way.</li><li>One can get the learning of Javascript from root to advance by referring to <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript"><strong>MDN</strong></a> Web Docs.</li><li>Official documentation renders the best coding architecture and best practices for the following framework, mentioned here are <a href="https://angular.io/docs"><strong>Angular</strong></a>, <a href="https://reactjs.org/docs/getting-started.html"><strong>React</strong></a>, <a href="https://getbootstrap.com/docs/4.4/getting-started/introduction/"><strong>Bootstrap</strong></a>, etc.</li><li>Also, you can touch on to Udemy courses for <a href="https://www.udemy.com/course/the-complete-guide-to-angular-2/"><strong>Angular</strong></a>, <a href="https://www.udemy.com/course/react-the-complete-guide-incl-redux/"><strong>React</strong></a> and various other frameworks.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/680/1*im8jPpXv1FR4tSCXYgQntA.png" /></figure><h3>Back-End Web Development</h3><p>So what makes the front end of a website possible? Where is all that data stored? This is where the back end comes in.</p><p>It refers to the server-side development of web applications or websites with a primary focus on how the website works. Back-end development languages handle the ‘behind-the-scenes’ functionality of web applications.</p><p>It’s the code that connects the web to a database, manages user connections, and powers the web application itself. Anything you can’t see easily with the eye such as databases and servers is the work of a back-end developer.</p><blockquote>“I’ve always preferred back-end development because I love manipulating data,” said long-time back-end developer JP Toto.</blockquote><h4>Skills and Languages</h4><ol><li><strong>Java — </strong>It is one of the most popular and widely used programming languages and platforms. It is highly scalable. It is used in frameworks like Spring.</li><li><strong>Python — </strong>It’s a programming language that lets you work quickly and integrate systems more efficiently.</li><li><strong>JavaScript — </strong>It has numerous diversified frameworks, hence, it can be used as both (front end and back end) programming languages.</li><li><strong>C#</strong> — The C# language is the preferred architecture for backend programming and automation in Windows environments.</li></ol><h4>Back-End Frameworks</h4><p>Same as in Front-End Frameworks, there are various of<strong> Back-End Frameworks</strong> that can efficiently act as server-side. Conventional ones are mentioned below:</p><ol><li><strong>Django: </strong>It is a <strong>Python-based</strong> free and open-source web framework, with a primary goal to ease the creation of complex, database-driven websites. Some popular sites that use Django are Instagram, Mozilla, Bitbucket, etc.</li><li><strong>ASP.NET: </strong>ASP.NET is a free, cross-platform, open-source developer platform for building many different types of applications. With .NET, you can use multiple languages, editors, and libraries to build for web, mobile, gaming, and IoT. You can write .NET apps in C#, F#, or Visual Basic.</li><li><strong>NodeJs: </strong>It is an open-source, cross-platform runtime environment for developing server-side and networking applications. It also provides a rich library of various JavaScript modules which simplifies the development of web applications to a great extent. It is often used for real-time applications such as chat, news feeds, and web push notifications, used by popular startups like Netflix, Uber, Walmart, LinkedIn, etc.</li><li><strong>Spring Boot: </strong>Level up your Java code, With <a href="https://spring.io/projects/spring-boot">Spring Boot</a> in your app, just a few lines of code is all you need to start building services like a boss.</li></ol><h4>Resources</h4><p>Let’s get on to, from where to learn these things,</p><ul><li>To get started with <strong>Django</strong> you can go through the official <a href="https://docs.djangoproject.com/en/3.0/"><strong>documentation</strong></a><strong>, </strong>this would surely guide from scratch to advanced.</li><li>For <strong>.Net</strong> go through these following links:</li></ul><p><a href="https://docs.microsoft.com/en-us/aspnet/web-api/"><strong>ASP.NET Web API — ASP.NET 4.x</strong></a></p><p><a href="https://dotnet.microsoft.com/apps/aspnet/mvc"><strong>ASP.NET MVC Pattern</strong></a></p><ul><li>Official <a href="https://nodejs.org/en/docs/"><strong>Documentation</strong></a> of Node JS is absolute, you can make this more minimal and flexible by using a framework of the framework (Node.js) know as <a href="https://expressjs.com/en/starter/installing.html"><strong>Express JS</strong></a>.</li><li>See <a href="https://www.tutorialspoint.com/nodejs/index.htm"><strong>Tutorialspoint Nodejs</strong></a> and run the simple code to gain some confidence at using Expressjs.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*YOK61zW3phkz8pwmE89Lkw.gif" /></figure><h3>Databases</h3><p>Every modern web application leverages one or more databases to store information. Databases provide ways of defining your data structures, inserting new data, finding existing data, updating or deleting existing data, performing computations across the data, and more.</p><p>For example, the database of Facebook contains the information of all its users, from their login credentials to the posts they share or like daily.</p><p>They are major of two varieties, SQL and NO-SQL, elaborated below,</p><ol><li><strong>SQL:</strong> Stands for Structured<strong> </strong>Query Language. These databases are also called relational databases as they use relations to store the data.SQL databases are table based and have a predefined structure. With this type of database, the loads on the servers can be increased by increasing components like RAM, SSD or CPU. Some examples of such databases are MySQL, Oracle, SQLite, Postgres, and MS-SQL.</li><li><strong>NO-SQL: </strong>The term ‘NoSQL’ means ‘non-relational’. It means that these databases aren’t based on the table-like relational database structure but provides a different mechanism for storage and retrieval of data. They are document-based and have a dynamic structure. Some examples of such databases are MongoDB, Aerospike, Redies, and Cassandra.</li></ol><h3>Full Stack Development</h3><p>There’s often not a black-and-white distinction between front-end and back-end development. “Front-end developers often need to learn those additional back-end skills, and vice versa, especially in the current economy where marketing is thinly resourced,” said Matranga. “Developers need some of that cross-discipline. Oftentimes, you have to be a generalist.”</p><blockquote><strong>Full stack developers are jacks-of-all-trades.</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/791/0*pcqOLXOA30BbMn87" /></figure><p>It refers to the development of both <strong>front end</strong>(client-side) and <strong>back end</strong>(server-side) portions of the web application. Full-stack web developers have the ability to design complete web applications and websites. They work on the frontend, backend, database and debugging of web applications or websites. Popular stacks nowadays are:</p><ul><li><strong>MEAN Stack:</strong> MongoDB, Express, AngularJS, and Node.js.</li><li><strong>MERN Stack:</strong> MongoDB, Express, ReactJS, and Node.js.</li></ul><h3>Domain Name and Hosting</h3><p>Once you have learned the basics and have built your first website, naturally you want to make it available to the world. Again, in the interest of saving you hours of research, here are listed some links,</p><ul><li>Learning purposes can be fully filled with the help of <a href="https://www.heroku.com/"><strong>Heroku</strong></a>.</li><li>For Domain name, <a href="https://in.godaddy.com/"><strong>Godaddy</strong></a>, <a href="https://www.namecheap.com/"><strong>Namecheap</strong></a> is preferable.</li><li>For Hosting, <a href="https://aws.amazon.com/"><strong>AWS</strong></a>, <a href="https://www.digitalocean.com/"><strong>DigitalOcean</strong></a> is superior and has elaborative documentation that would help you build production easily.</li></ul><p>Okay, so now you might have got the idea of how web applications work and what are the latest and trending tools for web development. So, now you can decide where you want to start off and explore the field of web development. Either you can choose front-end development or back-end development or even full-stack which includes both of them. The only thing you need to get all this done is patience and dedication.</p><h3>Some helpful Ingredients</h3><ol><li><strong>Git: </strong>Git is one of the most popular version control systems among developers. It is designed for coordinating work among programmers, but it can be used to track changes in any set of files. Its goals include speed, data integrity, and support for distributed, non-linear workflows.</li><li><strong>Stackoverflow — </strong>Stack Overflow is a question and answer site for professional and enthusiast programmers. You can find solutions to most of your problems through existing answers or even ask your question directly or help others by solving their doubts.</li><li><strong>Text Editors — </strong>Use popular text editors like VS Code, Sublime Text, Atom, to take help in the development process. These editors include features like debugging, auto-completion, syntax highlighting and inbuilt Git control.</li><li><strong>Style Guides: </strong>There are preferred style guides, Code Structures and best practices for every language, that makes your application more efficient and optimized.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/490/1*bWgOeb8wrl5Z5EvGUJg9qg.gif" /></figure><h3>The Bottom Line</h3><p>Web development has many faces. But no matter the type of development you’re thinking of pursuing, soft skills like attention to detail, ability to learn quickly, ability to solve problems efficiently, and strong communication will stand you in good stead on top of the hard skills outlined above.</p><blockquote>Happily, there’s never been a better time to pursue a career in web development. Employment of web developers is <a href="http://www.bls.gov/ooh/computer-and-information-technology/web-developers.htm">projected to grow</a> 27 percent over the 10-year span from 2014 to 2024, faster than the average for all occupations.</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=889e6e63b1a7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/a-definitive-guide-for-web-development-889e6e63b1a7">A Definitive Guide For Web Development</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Competitive Programming — A Beginner’s guide.]]></title>
            <link>https://medium.com/software-incubator/competitive-programming-a-beginners-guide-13942eb70734?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/13942eb70734</guid>
            <category><![CDATA[code]]></category>
            <category><![CDATA[college]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[competitive-programming]]></category>
            <dc:creator><![CDATA[Pranat Sharma]]></dc:creator>
            <pubDate>Sat, 30 Nov 2019 02:31:01 GMT</pubDate>
            <atom:updated>2022-03-19T10:38:46.569Z</atom:updated>
            <content:encoded><![CDATA[<h3>Competitive Programming — A Beginner’s Guide.</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5H6STKG7-Mh_VGwHMtohTA.png" /></figure><h3><strong>What is Competitive Programming (CP)?</strong></h3><blockquote>It is basically a mind Sport where you are given some problem and you are required to give an optimized solution under various constraints by using your programming skills. This sport basically tests your Logical thinking, Analytical Thinking, Pattern Recognition, Pressure Handling, and most importantly your knowledge of Data Structures and Algorithms.</blockquote><h3><strong>Why CP?</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gL6YBc-ATodFe8ksMNrLYQ.png" /></figure><p>There are many reasons for doing CP:-</p><ol><li>It’s an awesome brain exercise.</li><li>Helps to build your Problem Solving Skills.</li><li>You will get used to working on challenging problems.</li><li>The adrenaline rush you experience when your code gets accepted is just amazing.</li><li>Being good in CP increases your chances to land in good Product Based Companies like Amazon, Microsoft, Google, etc. which look for people who are strong at Data Structures and Algorithms. And getting good at CP requires being good at Data Structures and Algorithms.</li></ol><h3><strong>Where to Start from?</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6VwN1Ekq_NhVIMxhj1vsPA.png" /></figure><p>These are some steps to start your competitive Programming Journey:</p><p><strong>1 Learn a Programming Language :</strong></p><p>Some most used languages for Competitive Programming are C++, Java, Python. Although Python is simple and easy to learn, it is a relatively slow language. Even python is not allowed in some contests.</p><p>Java is also preferred by some people but the Java Codes are longer to write. Also, you may get TLE(Time Limit Exceeded) in some cases due to being slow on the time limit side.</p><p>C++ is the fastest among Python and Java and is comparable to C. C++ offers you a very powerful Library STL(Standard Template Library) which makes many things easy for Competitive Programmers. (Ex. Predefined Functions for sorting, searching; Vectors, Sets, Maps, Pairs, etc.)</p><p><em>I personally prefer C++ for Competitive Programming.</em></p><blockquote><strong>Resources for learning C++:</strong></blockquote><ul><li><a href="https://www.geeksforgeeks.org/">GeeksForGeeks</a></li><li><a href="https://www.youtube.com/user/saurabhexponent1">Saurabh Shukla (MySirG)</a></li><li><a href="https://www.youtube.com/playlist?list=PLAE85DE8440AA6B83">The New Boston (C++ playlist)</a></li><li><a href="https://www.youtube.com/user/mycodeschool/">My Code School</a></li><li><a href="https://www.hackerearth.com/practice/codemonk/">HackerEarth-CodeMonk</a></li></ul><p><strong><em>2 Start practicing and take part in Contests:</em></strong></p><p>As a beginner, start with the <a href="https://www.hackerrank.com/domains/algorithms?badge_type=problem-solving">Problem Solving Section</a> on Hackerrank. Cover Topics like Implementation, Strings, Sorting, Searching, Greedy, Bit Manipulation in order of Easy-Medium-Hard. Try to get 6 stars in it and you will begin to feel that you have learned a lot of new things. Your code length will decrease and you will begin to write more efficient code.</p><p>Meanwhile, take part in contests on sites like Codechef and Codeforces as they are a great way to learn some new concepts. In the beginning, you may find the language of problems a bit hard to understand but after some contests, you will get used to it.</p><p>Also, don’t forget to up-solve the problems which you were unable to solve in the contest.</p><blockquote><strong>Resources:</strong></blockquote><ul><li>STL: <a href="https://www.youtube.com/watch?v=zBhVZzi5RdU&amp;list=PLgUwDviBIf0o1bOOzLwejRTbgaWZLoM8N&amp;index=3">TakeUForward</a>, <a href="https://www.youtube.com/watch?v=PZogbfU4X5E">Utkarsh Gupta</a>, <a href="https://www.youtube.com/playlist?list=PLauivoElc3gh3RCiQA82MDI-gJfXQQVnn">Luv</a>, <a href="https://www.youtube.com/channel/UC9fDC_eBh9e_bogw87DbGKQ">Rachit Jain</a> and <a href="https://www.geeksforgeeks.org/the-c-standard-template-library-stl/">GeeksForGeeks-STL</a></li><li>Searching: <a href="https://www.hackerearth.com/practice/notes/searching-code-monk/">Searching Algorithms</a> and <a href="https://www.geeksforgeeks.org/searching-algorithms/">GeeksForGeeks-Searching</a> (Binary Search and Linear Search are important.)</li><li>Sorting: <a href="https://www.cs.cmu.edu/~adamchik/15-121/lectures/Sorting%20Algorithms/sorting.html">Sorting Algorithms</a> and <a href="https://www.geeksforgeeks.org/sorting-algorithms/">GeeksForGeeks-Sorting</a>(Quick Sort and Merge Sort are important.)</li><li>Number Theory: <a href="https://www.youtube.com/playlist?list=PL2q4fbVm1Ik4liHX78IRslXzUr8z5QxsG">CodeNCode</a></li><li>Binary Search: <a href="https://codeforces.com/edu/course/2/lesson/6">Codeforces Edu</a>, <a href="https://www.youtube.com/playlist?list=PLgUwDviBIf0qYbL4TBaEWgb-ljVdhkM7R">TakeUForward</a></li><li>Greedy: <a href="https://www.hackerearth.com/practice/algorithms/greedy/basics-of-greedy-algorithms/tutorial/">Greedy Algorithms</a> and <a href="https://codeforces.com/problemset">Codeforces Problem set</a></li><li>Bit Manipulation: <a href="https://www.hackerearth.com/practice/basic-programming/bit-manipulation/basics-of-bit-manipulation/tutorial/">Basics of Bit Manipulations</a></li><li>Recursion: <a href="https://www.youtube.com/playlist?list=PL_z_8CaSLPWeT1ffjiImo0sYTcnLzo-wY">Aditya Verma</a>, <a href="https://www.youtube.com/playlist?list=PLgUwDviBIf0rQ6cnlaHRMuOp4H_D-7hwP">TakeUForward</a></li><li>Graph Theory: <a href="https://www.youtube.com/playlist?list=PLgUwDviBIf0rGEWe64KWas0Nryn7SCRWw">TakeUForward</a></li><li>Topic Wise Practice: <a href="https://codeforces.com/problemset">Codeforces Problem set</a>, <a href="https://hackerrank.com/">Hackerrank</a>, <a href="http://cp-algorithms.com/">CP-Algorithms</a>, <a href="http://goo.gl/unDETI">Junior Training Sheet</a>, <a href="https://earthshakira.github.io/a2oj-clientside/server/">A2OJ</a>, <a href="https://cses.fi/problemset/">CSES Problem Set</a></li></ul><p><strong>Youtube Channels to follow :</strong></p><ul><li><a href="https://www.youtube.com/c/takeUforward">TakeUForward</a></li><li><a href="https://www.youtube.com/channel/UC0zvY3yIBQTrSutsV-4yscQ/featured">CodeNCode</a></li><li><a href="https://www.youtube.com/channel/UC9fDC_eBh9e_bogw87DbGKQ">Rachit Jain</a></li><li><a href="https://www.youtube.com/c/AdityaVermaTheProgrammingLord/featured">Aditya Verma</a></li></ul><p><strong><em>3 Learn Data Structures and Algorithms :</em></strong></p><p>While practicing and taking part in contests, get your hands dirty on Data Structures and Algorithms.</p><p>This is the most important part where you learn how to make your program more efficient. Having good knowledge of Data Structures will help you in selecting the optimal Data Structure for a problem.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*CWM5omSsQVUpMREJwHQUzQ.jpeg" /></figure><p><strong>Important Data Structures for Competitive Programming:</strong></p><ul><li>Arrays</li><li>Strings</li><li>Stacks</li><li>Queues</li><li>Linked Lists</li><li>Heaps (priority queue)</li><li>Disjoint Set Union</li><li>Graphs</li><li>Trees</li><li>Segment Trees</li><li>Binary Index Tree (Fen-wick tree)</li></ul><p><strong>Important Algorithms for Competitive Programming:</strong></p><p><a href="https://youtu.be/zZOQVLll9u4">Algorithms required to solve problems in a Coding Contest</a></p><p><strong><em>4 Practice, Practice, and Practice:</em></strong></p><p>Practice is the key to success in Competitive Programming.</p><p>There are many platforms out there where you can get to practice numerous problems. Now after getting some good knowledge of DSA, start participating in Short Contests.</p><p>Some of the most popular platforms are:</p><ul><li>Hackerrank (<a href="https://www.hackerrank.com/">https://www.hackerrank.com/</a>)</li><li>Codechef (<a href="https://www.codechef.com/">https://www.codechef.com/</a>)</li><li>Codeforces (<a href="http://codeforces.com/">https://codeforces.com/</a>)</li><li>Atcoder (<a href="https://atcoder.jp/">https://atcoder.jp/</a>)</li><li>HackerEarth (<a href="https://www.hackerearth.com/">https://www.hackerearth.com/</a>)</li><li>TopCoder (<a href="https://www.topcoder.com/">https://www.topcoder.com/</a>)</li><li>SPOJ (<a href="https://www.spoj.com/">https://www.spoj.com/</a>)</li></ul><p>Contests to watch out for:</p><ul><li>CodeChef Starters(for beginners)</li><li>CodeChef Long Challenge</li><li>CodeChef CookOff</li><li>CodeChef Lunchtime</li><li>Codeforces Div 3 (for beginners)</li><li>Codeforces Contests (Div 2, Educational Rounds and Global Rounds)</li><li>AtCoder Beginners Contest</li><li>AtCoder Regular Contest</li></ul><h3><strong>Do’s &amp; Don’ts in Competitive Programming</strong></h3><ol><li>While practicing on any platform, <strong><em>do not look into the solution/editorial without giving your best.</em></strong> Peeking into the solution will not do any good for you. Always give your best to find a solution to a problem. Even after an hour or two, if you are unable to get any approach to the solution then look at the editorial/discussions and try to thoroughly understand the Code and then implement it by yourself.</li><li>After the contest gets over, always try to <strong><em>up-solve the problems which you were unable to solve in the contest</em></strong><em>.</em> This is where real learning starts. Look at Editorials and discussions.</li><li>Do not hesitate to <strong><em>look at the solution of other people/friends after the contest</em></strong><em>.</em> Maybe your friend’s approach could be better than yours.</li><li>Do<em> </em><strong><em>read Blogs on Codeforces</em></strong> written by High Rated Coders. You will get to learn a lot from them for sure.</li><li><strong><em>Do not stick with just easy problems</em></strong><em>.</em> Get out of your comfort zone and challenge yourself. Start solving problems that really push you.</li><li>Make a company of friends who also enjoy CP and have healthy competition with them. Discuss your doubts with them(Obviously not during a contest ).</li><li>Do not really worry about ratings on various Coding Platforms. Rather <strong><em>focus on your growth.</em> </strong>Your rating will automatically increase if you focus on learning.</li><li>Do not get demotivated or disheartened if you cannot perform well in a contest or cannot solve a problem. It happens. Just learn from your mistakes and try not to repeat them again.</li><li>Competitive Coding is much more about practice. It takes time to become a master in it. So <strong><em>never give up</em></strong>(unless you don’t really enjoy doing it) and never have self-doubt upon yourself.</li></ol><p>You can analyze your performance using this awesome website: <a href="https://www.stopstalk.com/">StopStalk</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*esyUnkx7PxEHiCBHlHTPVg.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=13942eb70734" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/competitive-programming-a-beginners-guide-13942eb70734">Competitive Programming — A Beginner’s guide.</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Buzzwords in UI/UX Designing]]></title>
            <link>https://medium.com/software-incubator/buzzwords-in-ui-ux-designing-ea550b950558?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/ea550b950558</guid>
            <category><![CDATA[buzzwords]]></category>
            <category><![CDATA[ui]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[ui-ux-design]]></category>
            <dc:creator><![CDATA[Vinayak Gupta]]></dc:creator>
            <pubDate>Mon, 18 Nov 2019 14:00:11 GMT</pubDate>
            <atom:updated>2020-10-15T09:04:38.809Z</atom:updated>
            <content:encoded><![CDATA[<p>Moving into a new field is challenging and sometimes half the battle in learning a new field is getting your head around the jargon.</p><blockquote>UI/UX is no exception, while one starts exploring UI/UX Designing, they easily get to know about what UI and UX are all about, but when you go deep and explore more about the UI/UX Designing, you’ll get to know some terminology which may be quite confusing for the newcomers.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*K4BH8kToT6uVHUqL9e9s8A.gif" /></figure><p>Knowing your way around UI/UX and tech terms and jargon can really help release some of the pressure. It’ll not only make more of your knowledge but also give you the confidence to engage in <strong><em>design talks, ask questions, and network</em></strong><em> </em>with ease. Here are some UI/UX Designing and tech terms I would have loved to know as a young UI/UX designer.</p><p>Before digging deep into the jargons related to UI/UX Designing, one must have an overview of the following subject. If you are a pure newbie for this field, you can have a run-through of a blog on the same i.e <a href="https://medium.com/software-incubator/the-acronyms-unveiled-ui-ux-design-8e640f8b9b9"><strong>The acronyms unveiled- UI/UX Design</strong></a><strong>.</strong></p><blockquote>“We must design for the people the way they are, not the way we wish them to be.”</blockquote><h3>| UI DESIGNING</h3><h4>(1). Design Fidelity :</h4><p>It refers to the level of details and functionality built into a prototype of the project. They are basically of three types :</p><ul><li><strong>Low Fidelity:</strong> Pen and paper are used to draw the basic skeleton of the application after a huge amount of brainstorming and research.</li><li><strong>Mid Fidelity:</strong> Different software tools are used to make the final structure of the product and positioning of elements in the app.</li><li><strong>High Fidelity:</strong> It is the final User Interface of the product along with the final color scheme and visual interface.</li></ul><figure><img alt="Design Fidelity in UI/UX Designing" src="https://cdn-images-1.medium.com/max/1024/1*7pIwhICQM8sackcrihcG5A.png" /><figcaption>Design Fidelity in UI Designing</figcaption></figure><h4>(2). Wireframing :</h4><p>Primarily, It is the middle fidelity of any UI Design Process, which is Graphic representation of any Mobile application or Website containing most essential elements and the content. Various characteristics are:</p><ul><li>Shows the main chunk of content.</li><li>Draws the outline and layout structure.</li><li>Depicts the most basic UI.</li></ul><h4>(3). Prototyping :</h4><p>The most basic definition of a prototype is, “ A simulation or sample version of a final product, which is used for testing before launch”. The goal is to test products before sinking lots of time and money into the final product as it provides the flow and the blueprint beforehand.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vbYfp_8p7fQQ_kbKAUyT7A.png" /><figcaption>Prototype in UI</figcaption></figure><h4>(4). Design Specifications :</h4><p>It is the art and technique of arranging the elements and contents of the product to provide a better interface. It helps us decide the color scheme, contrast, font and typography of the content, etc.</p><h4>(5). Interaction Design :</h4><p>It is the design of interactive products and services in which a designer’s focus goes beyond the item in development to include the way users will interact with it. It deals with animations, mouse interaction, timing, etc in UI.</p><h4>(6). Visual Hierarchy :</h4><p>It is one of the core techniques in the design process as it is used for powerful UI Organization: Size, Proximity, contrast, Negative Space and other stuff to structure UI elements effectively. It organizes UI so that the brain could distinguish the objects on the basis of their physical appearance.</p><h4>(7). Aesthetics :</h4><p>It is the philosophical study of beauty and taste. In design, it refers to the visual attractiveness of a product. Studies have proven that creating good aesthetics in a product leads to better usability and user experience.</p><h4>(8). Information Architecture :</h4><p>It is a science of organizing and structuring the content of the websites, web and mobile application and social media software so that users would easily adjust to the functionality of the product and could find everything they need, without big efforts.</p><h3>| UX DESIGNING</h3><h4>(1). User flows:</h4><p>It is a visualization or flowcharts of steps (interactions) a user needs to complete a specific task on a website or mobile application. It is also known as Taskflow.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*aH3qL7uAtiycKZVftGTrGQ.gif" /></figure><h4>(2). Mindmap :</h4><p>It allows you to present UX in a visual, hierarchical and understandable way before you go forward with any visual design. If you work with developers, closely, create and share and review your mindmap.</p><h4>(3). Persona :</h4><p>It is that one or several fictional characters that can represent the majority of the potential users of the product with conventional user demand and are created through a great amount of qualitative and quantitative research.</p><h4>(4). User Scenario :</h4><p>It is the fictitious story of a user’s accomplishing an action or goal via product. It focuses on a user’s motivation and documents the process by which the user might use a design. It is therefore common for user scenarios to be based on user personas.</p><h4>(5). Empathy :</h4><p>It is a core value if designers want to make something that is good for the people who are going to use it. Personas help designers to create understanding and empathy with the end-user.</p><h4>(6). A/B testing :</h4><p>It is a controlled experiment where you compare two or more versions of a page or a flow in order to optimize a certain result or metric.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*sQDMVPZPBa32shY-JZChRg.gif" /></figure><h4>(7). F- shape Rule :</h4><p>The F-shape pattern describes the most common user eye-scanning patterns when a user has a loot at the block of content on the application. User first read in a horizontal movement, usually across the upper part of the content area the inial element forms the f’s top bar.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/670/1*nV9qIvhRGgX__2jTNUfNrA.jpeg" /><figcaption>F-Shaped Pattern</figcaption></figure><h4>(8). 3 Click Rule :</h4><p>It is an unofficial web design rule concerning the design of website navigation. It suggests that a user of a website should be able to find any information with no more than 3 mouse clicks.</p><h4>(9). 80/20 Rule :</h4><p>It states that 80% of the effects in any large system are caused by 20% of the variables in the system. What this essentially implies is that 20% is what causes 80%. Look at 80 as the effect produced and the 20 as the cause of the effect. For example, 80% of the users rely on 20% of the features of the app.</p><h4>| Summing Up</h4><p>Those are just a few common terms used during a designers’ work process. Now you have a bit more muscle to flex. Key in each item into Google and read up on it. Cementing your understanding of each key term will boost your confidence and knowledge.</p><blockquote>“Design to communicate, not just decorate”</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ea550b950558" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/buzzwords-in-ui-ux-designing-ea550b950558">Buzzwords in UI/UX Designing</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why it is important to know more about “Computer Networking”?]]></title>
            <link>https://medium.com/software-incubator/why-it-is-important-to-know-about-computer-networking-26ce410ed025?source=rss----58097990e571---4</link>
            <guid isPermaLink="false">https://medium.com/p/26ce410ed025</guid>
            <category><![CDATA[router]]></category>
            <category><![CDATA[ipv6]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[computer-networking]]></category>
            <category><![CDATA[osi-model]]></category>
            <dc:creator><![CDATA[Aman Mishra]]></dc:creator>
            <pubDate>Thu, 07 Nov 2019 14:46:43 GMT</pubDate>
            <atom:updated>2019-11-18T14:26:50.476Z</atom:updated>
            <content:encoded><![CDATA[<h3>What is Computer Networking?</h3><p><strong>The concept of Computer Networking Unveiled. (Part 1)</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*LnOSvWkXLLZPtkjWpau4MA.gif" /></figure><p><em>Talking specifically about the IT professionals and engineers in today’s world the knowledge of computer networking and its principles is getting far more important than it ever was.</em></p><p>But it’s not all about being IT professionals or engineers; if you are using the internet and its services it becomes important for you to know at least some basic terms and key concepts of networking to have an extra cutting edge from the other users, for being a smart user you must have knowledge about the networking principles and its architecture.</p><p>So, now let’s see some basic concepts and definitions of computer networking.</p><p><em>A computer network is a set of computers connected together for the purpose of sharing resources. The most common resource shared today is a connection to the Internet. Other shared resources can include a printer or a file server. The Internet itself can be considered a computer network.</em></p><blockquote>Now talking about a computer network, the <strong>computer network</strong> is a set of connected computers. Computers on a network are called <strong>nodes</strong>. The connection between computers can be done via cabling, most commonly the Ethernet cable, or wirelessly through radio waves. From here only the concept of wired networks and wireless network comes into existence.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/499/1*k12rCMoTPb3wp75IpU0yow.jpeg" /></figure><ol><li><strong>Wired Network :</strong></li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*Dj7Y0sKrMn4AW_y5Y8LoHg.png" /></figure><p>In simple terms <strong>Wired network </strong>refers to the transmission of data over a wire-based communication technology. Examples include Ethernet, telephone networks, fibre optic, etc.</p><p><strong>2. Wireless Network :</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2zxIJzEARVWJiWZrDF_ALg.jpeg" /></figure><p>Wireless networks are computer networks that are not connected by cables of any kind. The basis of wireless systems is radio waves, an implementation that takes place at the physical level of network structure. Types of the wireless network may include Wireless Local Area Network (LAN), Wireless Wide Area Network(WAN), Wireless Personal Area Network(PAN), Wireless Metropolitan Area Networks(MAN).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*10rpBKSCgYnCwUfD9_7R6g.png" /></figure><p><em>Well now let’s take some fundamental concepts of networking that are essential to know the networking architecture -</em></p><h3>The OSI model of the Networking :</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/570/1*c1MzO6VzbS_C7Od9Ve6TaA.jpeg" /></figure><p>OSI stands for <strong>Open System Interconnection</strong> is a reference model that describes how information from a software application in one computer moves through a physical medium to the software application in another computer. OSI model divides the whole task into seven smaller and manageable tasks. Each layer is assigned a particular task.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/624/1*Usdyk-rRD8uBZkuz7Q9lYg.png" /></figure><p><em>Well, the basic question still remains the same that what happens when we ping to some website or when we enter a URL since this question seems obvious yet still it becomes quite complicated when we try to understand and go deep into its terminologies and concepts.</em></p><blockquote>Let’s see what happens when we type or ping a URL, we will take our discussions further by taking this very question in our mind.</blockquote><p>To explain it in a simple yet efficient way we’ll break it into simple 7 steps :</p><ol><li><em>You enter a URL into a web browser</em></li><li><em>The browser looks up the IP address for the domain name via DNS</em></li><li><em>The browser sends an HTTP request to the server</em></li><li><em>The server sends back an HTTP response</em></li><li><em>The browser begins rendering the HTML</em></li><li><em>The browser sends requests for additional objects embedded in HTML (images, CSS, JavaScript) and repeats steps 3–5.</em></li><li><em>Once the page is loaded, the browser sends further async requests as needed.</em></li></ol><p>So, these were the steps but still, it might confuse you until we take each of its typical terms in a detailed manner.</p><p>So, lets first take DNS, well in broad terms we type a URL and we access the website but it’s far more than that. <strong>The first thing that happens is that our entered URL is converted into its corresponding IP address well why does it happen?</strong></p><p>The obvious reason is that just think when we have to remember each website’s IP address well it’s quite an impossible task to remember that hectic mathematical number to access the website so that’s why the website has its URL which is more user-friendly. But how a server knows where the request is to be transferred since it can only understand the IP address? Therefore here the DNS comes into play it tells the server about the requested website and it’s IP address.</p><p>So now let’s go deeper into the background process since I guess it’s the most basic yet founding principle of networking.</p><p>When you type <strong>maps.google.com</strong> into the address bar of your browser.</p><p>The browser checks the cache for a DNS record to find the corresponding IP address of maps.google.com.</p><p><strong>DNS</strong>(Domain Name System) is a database that maintains the name of the website (URL) and the particular IP address it links to. Every single URL on the internet has a unique IP address assigned to it. The IP address belongs to the computer which hosts the server of the website we are requesting to access. DNS is a list of URLs and their IP addresses just like how a phone book is a list of names and their corresponding phone numbers.</p><p>In order to find the DNS record, the browser checks four caches.</p><ol><li><strong>First</strong>, it checks the browser cache. The browser maintains a repository of DNS records for a fixed duration for websites you have previously visited. So, it is the first place to run a DNS query.</li><li><strong>Second</strong>, the browser checks the OS cache. If it is not found in the browser cache, the browser would make a system call (i.e. <em>get hostname</em> on Windows) to your computer OS to fetch the record since the OS also maintains a cache of DNS records.</li><li><strong>Third</strong>, it checks the router cache. If it’s not found on your computer, the browser would communicate with the router that maintains its’ own cache of DNS records.</li><li><strong>Fourth</strong>, it checks the ISP cache. If all steps fail, the browser would move on to the ISP. Your ISP maintains its’ own DNS server which includes a cache of DNS records which the browser would check with the last hope of finding your requested URL.</li></ol><p>You may wonder why there are so many caches maintained at so many levels. Although our information being cached somewhere doesn’t make us feel very comfortable when it comes to privacy, caches are important for regulating network traffic and improving data transfer times.</p><p><em>After this step :</em></p><p><strong>The browser initiates a TCP connection with the server.</strong></p><p>Once the browser receives the correct IP address it will build a connection with the server that matches an IP address to transfer information. There are a number of different internet protocols that can be used but TCP is the most common protocol used for any type of HTTP request.</p><p>So after the TCP connection is established the following steps take place-</p><p><strong>The browser sends an HTTP request to the webserver.</strong></p><p>Once the TCP connection is established, it is time to start transferring data! The browser will send a GET request asking for maps.google.com web page. If you’re entering credentials or submitting a form this could be a POST request.</p><p>Sample GET request (Headers are highlighted):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JZ3QVo2mllmKQVPyfTCP1A.png" /></figure><p><strong>The server handles the request and sends back a response.</strong></p><p>The server contains a web server (i.e Apache, IIS) that receives the request from the browser and passes it to a request handler to read and generate a response. Now,</p><p><strong>The server sends out an HTTP response.</strong></p><p>The server response contains the web page you requested as well as the status code, any cookies to set, privacy information, etc.</p><p><strong>The browser displays the HTML content (for HTML responses which is the most common).</strong></p><p>The browser displays the HTML content in phases. First, it will render the HTML skeleton. Then it will check the HTML tags and sends out GET requests for additional elements on the web page, such as images, CSS, JavaScript files, etc. These static files are cached by the browser so it doesn’t have to fetch them again the next time you visit the page. In the end, you’ll see maps.google.com appearing on your browser.</p><p>So, finally you can see the requested website, well it might be seen a tedious process but yet we know it takes less than a second to process these tasks.</p><p><em>To trace the path of your requested website just open your command prompt and type following command</em></p><p><strong>tracert &lt;URL&gt; </strong>and hit enter</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/656/1*CMJHWjB_xazy1leQvHjsQQ.png" /></figure><blockquote>You can now check for these IPs and their place and can know from where your request goes to the final desired webpage.</blockquote><p>So now these were the basic phenomenon in requesting the webpage to understand the background process but now let’s dive deeper into some other fundamental concepts of networking.</p><blockquote>Well, so many times you read above about IP address but <em>d</em>o you exactly know <em>what is an IP address of the system?</em></blockquote><p>Well, a common definition is that <strong><em>IP address</em></strong><em> is a mathematical number that is an identifier for a computer or device on a TCP/IP network.</em> Networks using the TCP/IP protocol route messages based on the IP address of the destination. But it is more than this, what we need to know about the IP address.</p><p>An IPv4 address consists of 32 bits, often shown as 4 octets of numbers from 0–255 represented in decimal form instead of binary form. For example, the IP address: <strong><em>168.212.226.204</em></strong><em> </em>in binary form is 10101000.11010100.11100010.11001100.</p><p>An IP address consists of two parts, one identifying the network and one identifying the node, or host.</p><p>Here in the above example if we see then first 3 octets i.e 168.212.226 represents the network part and the last octet 204 represents the host part and serves to point out a single device in the network specifically.</p><p>Well since IP addresses are mathematical hence it is finite and the devices using the internet are increasing day by day so therefore it’s the need of the hour to have a solution for this problem.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*10rpBKSCgYnCwUfD9_7R6g.png" /></figure><h3>IPv6</h3><p>The Internet Engineering Task Force (IETF) had formalized the successor protocol. IPv6 uses a 128-bit address. IPv6 addresses are represented as eight groups, separated by colons, of four hexadecimal digits. For example, <strong><em>2001:0db8:0000:0000:0000:8a2e:0370:7334.</em></strong></p><blockquote><em>Well, we were talking about the IP address of the system in the network but the question arises who assigns the IP address to the systems on the network.</em></blockquote><p><em>The answer is the </em><strong><em>Dynamic Host Configuration Protocol(</em></strong><em>DHCP).</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*fpQ3DFzFYwaKnarztsUQpQ.jpeg" /></figure><p>Dynamic Host Configuration Protocol (DHCP) is a network management protocol used to dynamically assign an IP address to any new node(system) entering the network. DHCP permits a node to be configured automatically. Without DHCP, the network administrators would be forced to assign an IP address manually for every node in a network. Because DHCP assigns IP addresses for a specific period of time (called a lease period), using commands like <strong>ipconfig </strong>to find a computer’s IP address yields different results over time.</p><blockquote><em>Well did you wonder where do these DHCP and DNS servers are located? Since we are so much dependent on these devices its becomes quite important to know where does they exactly reside in the network configuration.</em></blockquote><p>Yes, the answer is <strong>L3 switches </strong>or in layman term in your <strong>wifi routers</strong>, and yes this is the very term which I wanted to introduce i.e <strong>switches and routers.</strong></p><blockquote>So what are switches and routers ?</blockquote><h3>Switch</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3x6nsVC36kodN_1JmreDUw.jpeg" /></figure><p>A switch is a high-speed device that receives incoming data packets and redirects them to their destination on a local area network (LAN). A LAN switch operates at the data link layer (Layer 2) or the network layer of the OSI Model. The destination information in the packets is used to determine which output ports will be used to send the data on to its intended destination.</p><h3>Router</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TjPCt12o16Q1Bzmog2zCaQ.jpeg" /></figure><p>The router forwards data packets along with the networks. It is connected to at least two networks, commonly two LANs or WANs or a LAN and its ISP’s network. Routers are located at gateways, the places where two or more networks connect. Routers determine whether the source and destination are on the same network or whether data must be transferred from one network type to another and which requires encapsulating the data packet with routing protocol header information for the new network type.</p><blockquote>So now we have taken some of the most common devices and concepts of networking and now we are ready to take some advanced networking concepts and technologies like subnetting, routing, whois, VLANs, proxy servers, attacks and security issues in the network, etc which we will see in next article.</blockquote><p><em>I hope you must have found this article helpful.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=26ce410ed025" width="1" height="1" alt=""><hr><p><a href="https://medium.com/software-incubator/why-it-is-important-to-know-about-computer-networking-26ce410ed025">Why it is important to know more about “Computer Networking”?</a> was originally published in <a href="https://medium.com/software-incubator">Software Incubator</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>