<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anubhav Singhal </title>
    <description>The latest articles on DEV Community by Anubhav Singhal  (@anubhavitis).</description>
    <link>https://dev.to/anubhavitis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F557122%2F12dc9738-221a-4aef-a96e-f61a92031493.jpg</url>
      <title>DEV Community: Anubhav Singhal </title>
      <link>https://dev.to/anubhavitis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anubhavitis"/>
    <language>en</language>
    <item>
      <title>Microservices Architecture: What, Where &amp; Why?</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Mon, 22 Aug 2022 08:04:30 +0000</pubDate>
      <link>https://dev.to/anubhavitis/microservices-architecture-what-where-why-106g</link>
      <guid>https://dev.to/anubhavitis/microservices-architecture-what-where-why-106g</guid>
      <description>&lt;p&gt;If you are into software development, you've probably heard about microservices. They've acquired a lot of traction in recent years, and every major corporation is creating one.&lt;/p&gt;

&lt;p&gt;Microservices are an innovative and very unique approach to developing application systems as a collection of small services, each performing &lt;strong&gt;discrete and well-defined functions&lt;/strong&gt; and being deployed independently. They are easier to understand, easier to deploy, and can be shared across different systems. This method brings high agility to an application system and provides many opportunities for DevOps and CI/CD.&lt;/p&gt;

&lt;p&gt;In this article, you are going to learn about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microservices architecture of application systems&lt;/li&gt;
&lt;li&gt;Various benefits of building microservices&lt;/li&gt;
&lt;li&gt;Microservices development tools and technology&lt;/li&gt;
&lt;li&gt;Common patterns for implementing microservice architectures&lt;/li&gt;
&lt;/ul&gt;



&lt;h2&gt;
  
  
  Different architectures of application systems
&lt;/h2&gt;

&lt;p&gt;In terms of architecture, there are two sorts of application systems: the first is centralized and known as a "monolith," whereas the second has a decentralized architecture known as "microservices."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FPhCiUup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FPhCiUup.png" alt="Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Monoliths
&lt;/h3&gt;

&lt;p&gt;An application is composed of three components: a server, a client, and a database. The server processes client requests, implements business logic, collects or stores data in the database, and responds to the client. These kinds of servers are referred to as monoliths.&lt;/p&gt;

&lt;p&gt;A monolith is a straightforward approach to building a server application. They're made up of &lt;strong&gt;classes and functions&lt;/strong&gt; that let you combine all of your business logic into one running process. This is a &lt;strong&gt;single executable application system&lt;/strong&gt;, where every change results in a newer version of the system. Kinda like Thanos with all infinity stones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FnpszbmF6GwHSw%2Fgiphy.gif%3Fcid%3Decf05e47khleqhrhrju4ozr5t1usltrj9o9av2282gk28eqb%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2FnpszbmF6GwHSw%2Fgiphy.gif%3Fcid%3Decf05e47khleqhrhrju4ozr5t1usltrj9o9av2282gk28eqb%26rid%3Dgiphy.gif%26ct%3Dg" alt="Thanos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Monolithic systems are ideal for launching a business since they are self-sufficient, offer fast communications, and their requirements are easy to define. However, when a business grows, monolithic systems become a challenge. They have low scalability and adaptability and require extensive maintenance; even small errors at any point cause the entire system to crash in a split second. Also, they do not allow various teams to work independently and are constrained to be developed on a single technology.&lt;/p&gt;

&lt;h3&gt;
  
  
  Microservices
&lt;/h3&gt;

&lt;p&gt;The microservice architecture is the solution to the challenges faced by monolithic systems. Rather than creating a single full-fledged server program with a dedicated data storage unit, this system consists of multiple microprograms serving unique services, thus referred to as a microservice. Kinda like a team of superheros with specific roles and abilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/LOFT5Jd31ON1b5kLtP/giphy-downsized-large.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/LOFT5Jd31ON1b5kLtP/giphy-downsized-large.gif" alt="Avengers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microservices are built on specialized business capabilities. They have their own running process and can even have their own data storage unit. Different microservices can employ different programming languages, different database approaches, and be deployed independently. Different teams in the company work on specific services, and updates result in newer versions of the affected microservices rather than the entire system. And at any point of error, only the affected service will fail; the rest of the programs will work just fine. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why microservice architecture?
&lt;/h2&gt;

&lt;p&gt;More than &lt;a href="https://dzone.com/articles/new-research-shows-63-percent-of-enterprises-are-a" rel="noopener noreferrer"&gt;60% of enterprises&lt;/a&gt; had switched to microservices architectures by 2018. Many large corporations, such as Amazon, Netflix, Twitter, and Paypal, which began as monolithic systems, were at the forefront of this transformation. Its modular approach in application systems is widely being adopted to handle complex applications.&lt;/p&gt;

&lt;p&gt;Let us take a quick look at some of the real-world use cases of microservices:&lt;/p&gt;

&lt;h3&gt;
  
  
  Refactoring Legacy Applications
&lt;/h3&gt;

&lt;p&gt;In this competitive world, businesses often need to refactor their legacy codes or move to new technologies. Microservices is the preferred architecture by enterprises for rebuilding their system to change the functionality, add new features, or move to a new technology stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  Big data, AI/ML
&lt;/h3&gt;

&lt;p&gt;Applications that use technologies such as big data, artificial intelligence, machine learning, and so on need complex data pipelines for operations such as data collection, data filtering, data processing, and so on. In this scenario, a monolithic design could make the system heavy and difficult to administer; instead, a distributed system architecture with segregated pipelines is the better option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time data processing
&lt;/h3&gt;

&lt;p&gt;Microservices architecture is used by streaming platforms such as Netflix and publish-subscribe pattern apps such as Twitter to provide smooth asynchronous communication and real-time data analysis to produce intelligent outputs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.nginx.com/blog/microservices-at-netflix-architectural-best-practices/" rel="noopener noreferrer"&gt;Netflix&lt;/a&gt; was an early adopter of microservices and now has more than 500 microservices working autonomously to provide you with the best performance available.&lt;/p&gt;

&lt;h3&gt;
  
  
  DevOps
&lt;/h3&gt;

&lt;p&gt;When DevOps and microservices are used together, they work incredibly. By adopting a single toolset that can be used for both development and operations, microservices help the DevOps team be more efficient. Project requirements, task dependencies, and problems may all be described using the same terminology and techniques.&lt;/p&gt;

&lt;p&gt;Microservices, like anything else, have their own pros and cons. You must be aware of both of them before integrating this architecture into your system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of using Microservices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Technical benefits for developers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You have the freedom to use different programming languages, tools, technologies, and data-storing strategies based on the requirements of your service.&lt;/li&gt;
&lt;li&gt;Since every microservice is isolated, results in fast defect isolation too, failure in one microservices won't affect the rest of the system.&lt;/li&gt;
&lt;li&gt;You can easily integrate or transition to new technology for a specific microservice without affecting the whole system.&lt;/li&gt;
&lt;li&gt;Microservices are simpler to understand for new developers as compared to understanding the whole system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/RiVH87KOfOLcrEa8Wt/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/RiVH87KOfOLcrEa8Wt/giphy.gif" alt="Avengers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits for organizations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Microservices save a huge amount of time and money by making the system easy to manage and optimize.&lt;/li&gt;
&lt;li&gt;Different teams in an organization have the freedom to work independently without colliding with other teams.&lt;/li&gt;
&lt;li&gt;Microservices are based on distinct business capabilities, so they can be easily developed by a small team.&lt;/li&gt;
&lt;li&gt;Since a service can be shared among different products, this saves a lot of resources for an organization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Drawbacks of using Microservices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Testing can be a very tedious task in microservices architecture since there are a lot of services to test.&lt;/li&gt;
&lt;li&gt;Handling the entire product might get difficult as the number of services increases.&lt;/li&gt;
&lt;li&gt;Developer needs to design and develop a lightweight, robust and secure communication system for microservices to communicate with each other.&lt;/li&gt;
&lt;li&gt;Internal communication between microservices increases the time taken by servers to respond to clients.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Microservices development tools and technology
&lt;/h2&gt;

&lt;p&gt;As microservices architecture gained popularity, more and more tools and technologies have emerged to support this practice and improve the developer experience. Here are some of the best technologies for developing microservices:&lt;/p&gt;

&lt;h3&gt;
  
  
  Containerization
&lt;/h3&gt;

&lt;p&gt;One of the most key traits of a microservice is that it operates independently, as autonomously as possible. To maintain their autonomy, they must be kept in an isolated environment with their own runtime environment. Containerization services such as &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;, &lt;a href="https://aws.amazon.com/bottlerocket/" rel="noopener noreferrer"&gt;AWS BottleRocket&lt;/a&gt;, and others make this feasible. Through autonomous container-based microservice architecture, you have the freedom to add, remove, scale, and replicate components as required by your business.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Management
&lt;/h3&gt;

&lt;p&gt;With an increasing group of microservices comes the challenge of establishing safe connections between them. You certainly cannot risk exposing any of your microservices to public networks. API management, using services like &lt;a href="https://aws.amazon.com/api-gateway/" rel="noopener noreferrer"&gt;AWS API Gateway&lt;/a&gt;, &lt;a href="https://azure.microsoft.com/en-us/services/api-management/" rel="noopener noreferrer"&gt;Azure API Management&lt;/a&gt;, reduces the time required to build and manage API connections between microservices. They have various capabilities like authentication services, API monitoring, and so on, which may save developers months of time and work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Continuous Integration, Continuous Deployment (CI/CD)
&lt;/h3&gt;

&lt;p&gt;If you're adopting microservices architecture, you don't want a lengthy and costly release train where each team needs to wait their turn. You also don't want the release of one service to impact or be impacted by the release of another. You need to employ continuous integration and continuous deployment pipelines for your microservices. You can use CI/CD platforms, such as &lt;a href="https://www.jenkins.io/" rel="noopener noreferrer"&gt;Jenkins&lt;/a&gt; and &lt;a href="https://aws.amazon.com/codepipeline/" rel="noopener noreferrer"&gt;AWS CodePipeline&lt;/a&gt;, that provide easy to set up automated but high-velocity releases for your microservices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Application Performance Monitoring (APM) tools
&lt;/h3&gt;

&lt;p&gt;Your microservice is up and running after you design, implement, test, and deploy it, but you're not done yet. You must monitor system performance in order to improve user retention and rid your systems of faults and bottlenecks. Application performance monitoring solutions, such as &lt;a href="https://aws.amazon.com/cloudwatch/" rel="noopener noreferrer"&gt;AWS Cloudwatch&lt;/a&gt;, &lt;a href="https://www.elastic.co/kibana/" rel="noopener noreferrer"&gt;Kibana&lt;/a&gt;, allow you to effortlessly monitor all of your microservices, as well as increase your mean-time-to-repair (mttr) by detecting problems sooner.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloud providers
&lt;/h3&gt;

&lt;p&gt;Managing multiple microservice can be very challenging, you need a lot of containers, API management tools, host multiple databases, CI/CDs, Application performance monitoring tools, etc. But no worry, most cloud service providers like &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;, &lt;a href="https://azure.microsoft.com/" rel="noopener noreferrer"&gt;Azure&lt;/a&gt;, &lt;a href="https://www.ibm.com/cloud" rel="noopener noreferrer"&gt;IBM&lt;/a&gt;, etc. provide all of this on their platform, which eventually makes managing microservices lot simpler.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common patterns used to build microservices
&lt;/h2&gt;

&lt;p&gt;There are plenty of &lt;a href="https://microservices.io/patterns/microservices.html" rel="noopener noreferrer"&gt;design patterns&lt;/a&gt; available for building microservices, each of them with different priorities and solving different problems. Here are some of the most popular patterns for building microservices:&lt;/p&gt;

&lt;h3&gt;
  
  
  Database architecture
&lt;/h3&gt;

&lt;p&gt;Different services may require different data storage techniques, therefore creating a separate database for each service is a realistic solution that will improve scalability. However, running searches that connect data from several servers becomes quite complex.&lt;/p&gt;

&lt;p&gt;Creating boundaries that ensure modularity is a smart notion. As a result, we may keep the data of a microservice private to that service, but we must make it available to other services via APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  API gateways
&lt;/h3&gt;

&lt;p&gt;Making microservices accessible to client applications is a challenging task in itself. You don't want to expose all of the services to all sorts of customers, and some services even implement API protocols that aren't web-friendly. There are many service instances, and their location(host+port) varies dynamically.&lt;/p&gt;

&lt;p&gt;A single access point for all clients, such as an API gateway, is a viable option in this case. This API gateway checks client requests before routing them to the appropriate microservice. It can send requests to a single server or several servers, depending on the requirements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FmpBD48D.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FmpBD48D.png" alt="Image"&gt;&lt;/a&gt; credits: Foundersguide&lt;/p&gt;

&lt;h3&gt;
  
  
  Access tokens
&lt;/h3&gt;

&lt;p&gt;Consider the following scenario: you've implemented microservice architecture and implemented an API gateway as the entry point for all client requests. Requests are directed from here to various services based on their requirements, but how do you convey the requester's authenticity to the service that executes the request?&lt;/p&gt;

&lt;p&gt;As a result, the API gateway passes an access token (e.g. JSON Web Token) along with the request, which securely identifies the requestor in each request to the services. The access token can be included in requests to other services by a service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Log aggregation
&lt;/h3&gt;

&lt;p&gt;Requests commonly span various service instances in a microservices architecture. Each service instance saves logs in a defined format to a file. Errors, warnings, information, and debug messages are all stored inside this log file. Debugging an error, on the other hand, might be time-consuming if you have to go through all of the services' log files.&lt;/p&gt;

&lt;p&gt;As a result, having a centralized logging server that collects logs from each service instance is preferable. Different logs may be searched, analyzed, and even alarms can be created by users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Health check APIs
&lt;/h3&gt;

&lt;p&gt;Even if a service instance is unable to handle requests, it may continue to run. It might, for example, it has run out of database connections. The monitoring system should raise an alert system if this happens, and requests should not be sent to the failed service instance. So it is very crucial to identify whether a running service instance can handle a request of not.&lt;/p&gt;

&lt;p&gt;As a result, a service's health check API endpoint, like '\health', that returns the state of the service should be included. This API endpoint handler checks a variety of things, including the status of the service instance's connections to infrastructure services, the state of the host, and application-specific logic.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can learn more patterns for building microservices from &lt;a href="https://microservices.io/patterns/microservices.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Phew!
&lt;/h2&gt;

&lt;p&gt;Looking back, you began with learning about various application system designs, followed by many famous microservices architecture use cases, and then, the benefits and drawbacks of adopting a microservices architecture. Furthermore, you learned about numerous microservices tools and technologies for building microservices, as well as some typical patterns for making them efficient.&lt;/p&gt;

&lt;p&gt;Hope you found the article useful. Thanks for reading. Happy coding.&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>webdev</category>
      <category>devjournal</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Push vs Pull API Architecture</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Tue, 02 Aug 2022 06:05:52 +0000</pubDate>
      <link>https://dev.to/anubhavitis/push-vs-pull-api-architecture-1djo</link>
      <guid>https://dev.to/anubhavitis/push-vs-pull-api-architecture-1djo</guid>
      <description>&lt;p&gt;The number of internet users has increased massively in the past few years, and handling this enormous amount of traffic is a big challenge for application developers. Choosing an appropriate architecture for communication between the server and clients plays a significant role in ensuring that traffic is kept at a manageable level.&lt;/p&gt;

&lt;p&gt;In this article, you’re going to learn about the push and pull architecture of network communications, and how push architecture can limit the load on your application server, increasing performance.&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture of Network Communications
&lt;/h2&gt;

&lt;p&gt;There are two primary approaches to network communications—push and pull.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pull:&lt;/strong&gt; Often referred to as &lt;a href="https://ably.com/topic/long-polling" rel="noopener noreferrer"&gt;polling&lt;/a&gt;, it’s especially common on the internet. A client, such as: a user, web browser, or application, etc. requests information and the server responds with the information requested. It’s like looking up the score of yesterday's football game: the information is static, and there's no need for frequent—or any—updates. The client requests the information, the server provides it, and the exchange is over.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Push:&lt;/strong&gt; This is an architecture where data is pushed upstream over a connection as soon as it becomes available. One type of push-based transport is called a &lt;em&gt;websocket&lt;/em&gt;, which is a persistent, bidirectional connection through which both the client and the server can push data. It's one of the foundations of the real-time web, and is the technology that underpins many popular chat and other real-time platforms. Other common places people encounter push-style communication is on their phones, where special offers, notifications, and score updates are often delivered directly to their devices.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmppwbyxx3eq3sqrezifd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmppwbyxx3eq3sqrezifd.gif" alt="Confused Gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s important to understand the difference between push and pull APIs so that you can select the right architecture for your service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pull API Architecture
&lt;/h2&gt;

&lt;p&gt;If your client app needs to find out if there is any new information on the server side, the easiest—if not always the best—way to accomplish this is to call and ask, which is basically how pull APIs work. They are a type of network communication where the client application initiates the communication by requesting updates. The server receives the request, verifies it, processes it, and sends an appropriate response back to the client.&lt;/p&gt;

&lt;p&gt;This whole process of polling updates usually takes hundreds of milliseconds. If there are many requests, it can slow down or even overload your server layer, resulting in a poor user experience, customer complaints, and even economic losses. Therefore, to control traffic, many companies often use rate limits to limit how often a client can ask for the same information.&lt;/p&gt;

&lt;p&gt;While some of the drawbacks of pull architecture can be mitigated by a system that can distribute processing, even this quickly becomes a very expensive, resource-intensive option. If you need the ability to communicate frequent updates, push architecture is likely a better choice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7a9mozb7gq739ovx60f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7a9mozb7gq739ovx60f0.png" alt="Pull architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Push API architecture
&lt;/h2&gt;

&lt;p&gt;The strongest use case for push APIs are for instances in which you have time-sensitive data that changes often, and clients need to be updated as soon as that data changes. &lt;/p&gt;

&lt;p&gt;Push APIs allow the server to send updates to the client whenever new data becomes available, without a need for the client to explicitly request it. When the server receives new information, it pushes the data to the client application, no request needed. This makes it a more efficient communication standard for data that stays changes often.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9s02fp3rv6hfld8ve6s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv9s02fp3rv6hfld8ve6s.png" alt="Push Architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pull vs Push APIs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In a pull API, the client requests the information. In a push API, the server sends the information as it becomes available.&lt;/li&gt;
&lt;li&gt;Pull architecture is request driven: the client sends the request, and the server responds accordingly. Push architecture is event driven: the server pushes data to clients as updates become available.&lt;/li&gt;
&lt;li&gt;In a push API, the server needs to store client details to reach clients directly. With pull, the server doesn’t need to store these details, because they’re encoded in the request.&lt;/li&gt;
&lt;li&gt;Push APIs are significantly faster than pull APIs. In a pull API, the server must receive and verify the request, then process information to form a response that’s sent to the client. In a push API, the server immediately processes information and sends it to clients as soon as it's available.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2&gt;
  
  
  Why Push APIs?
&lt;/h2&gt;

&lt;p&gt;Push APIs are widely used to minimize server load in apps with large user bases and frequent data exchanges or real-time data. Instead of users making frequent requests to stay updated with the newest information, servers instantly push data as new information is obtained. Push APIs are particularly useful for enhancing system efficiency by utilizing fewer resources, resulting in a more stable and cost-effective system.&lt;/p&gt;

&lt;p&gt;Users receive around &lt;a href="https://www.businessofapps.com/marketplace/push-notifications/research/push-notifications-statistics/" rel="noopener noreferrer"&gt;forty-five notifications&lt;/a&gt; every single day. Imagine the load that places on a system with thousands or even millions of users. Push APIs make this level of traffic much more manageable.&lt;/p&gt;

&lt;p&gt;Push architecture also enables you to trigger parallel workflows in your application system. You can simply create a message with appropriate data for the workflow and push it to the parallel worker to process it or send it to the queue. A similar workflow can be performed using a pull architecture, but repeatedly requesting for messages to be placed in a queue can be time-consuming and difficult to implement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwaos07zn6ktoht536q6u.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwaos07zn6ktoht536q6u.gif" alt="Where do I begin"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases for Push APIs
&lt;/h2&gt;

&lt;p&gt;Both architecture styles have use cases where they shine. Understanding these use cases will help you understand which API architecture is right for your application, and how it will affect your overall system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delivering System Updates
&lt;/h3&gt;

&lt;p&gt;Pull APIs can be an expensive and risky choice here. Let’s say you have a thousand users, and they request updates every five minutes. If that’s the case, you’re looking at around two hundred thousand requests a day, just for updates. This puts a huge, unnecessary burden on the system. This is especially true if your system isn’t updated frequently, since most of the time, the client will request information, and receive “updated” information in which nothing has changed.&lt;/p&gt;

&lt;p&gt;Push APIs are an excellent option here, since they can eliminate the constant update requests to the server. This reduces the server load, and creates room for other processes in your application server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Systems With Complex Routing
&lt;/h3&gt;

&lt;p&gt;If your application system requires complex routing across numerous servers, the communication architecture you choose can have a significant impact on both the system and the implementation process.&lt;/p&gt;

&lt;p&gt;With push architecture, servers can simply push messages and client details to the queue together, making push architecture a viable option in a complex system. In a pull architecture, servers have to go through complex logic to check and pull a message out of another server and into a queue. Not only is this difficult to implement, but it’s also expensive and time-consuming.&lt;/p&gt;

&lt;p&gt;There are many other common use cases where Push APIs are used as a standard approach.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Event triggers:&lt;/strong&gt; A new parallel workflow is initiated with an event trigger.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Promotional marketing:&lt;/strong&gt; Push notifications are sent to users to notify them about discounts, sales, and new offers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geographic location tagging:&lt;/strong&gt; Location and other geographic data are collected by remote devices, such as your cell phone, and sent to servers using push architecture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notifications and reminders:&lt;/strong&gt; Social media notifications, weather alerts, and top news articles that are sent to your device are made with push architectures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Push APIs In Advanced Network Architectures
&lt;/h3&gt;

&lt;p&gt;Push APIs are a common feature of advanced network architectures, including the following.&lt;/p&gt;

&lt;h4&gt;
  
  
  Event driven
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://ably.com/blog/introduction-event-driven-architecture/" rel="noopener noreferrer"&gt;Event-driven&lt;/a&gt; architecture is common in microservices-based systems. It utilises events to trigger communication and actions across different services.&lt;/p&gt;

&lt;p&gt;Producers, brokers, and consumers are the three key components of this design. The publishers publish an event, which the brokers then filter and push to the consumer micro-services. This architecture uses push APIs to push events from publishers to brokers, and then from brokers to consumers, triggering appropriate services.&lt;/p&gt;

&lt;h4&gt;
  
  
  Pub/Sub
&lt;/h4&gt;

&lt;p&gt;For asynchronous messaging, the &lt;a href="https://ably.com/blog/pub-sub-pattern-examples" rel="noopener noreferrer"&gt;pub/sub&lt;/a&gt; architecture is very popular. Pub/sub is a specific type of event-driven architecture that’s more scalable than other messaging architectures.&lt;/p&gt;

&lt;p&gt;A publisher publishes information to a broker, and clients receive that information from the broker based on their subscriptions. Push APIs are used by the publisher to send information to the broker, who then sends the information to its subscribers.&lt;/p&gt;

&lt;h4&gt;
  
  
  WebSockets
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://ably.com/blog/introducing-the-websocket-handbook" rel="noopener noreferrer"&gt;WebSockets&lt;/a&gt; establishes a long-lived, socket-like connection between the server and the clients, enabling them to exchange data at any moment. There are no requests or responses; messages are just pushed from one end to the other, and push APIs are at the heart of the WebSockets architecture.&lt;/p&gt;



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

&lt;p&gt;System architecture is rarely exclusively push or pull, but rather a combination of the two. All application services have different use cases, and you must choose an appropriate architecture for your expected use case to maximise your system’s potential.&lt;/p&gt;

&lt;p&gt;Thanks for reading. Have coding.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devjournal</category>
      <category>api</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Why Decentralised Web is a necessity?</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Tue, 29 Jun 2021 06:28:19 +0000</pubDate>
      <link>https://dev.to/anubhavitis/why-decentralised-web-is-a-necessity-c7o</link>
      <guid>https://dev.to/anubhavitis/why-decentralised-web-is-a-necessity-c7o</guid>
      <description>&lt;p&gt;When web first came into existence in 1989, it was decentralised. Anyone could publish their content on the internet, and users could access that content without any third party services. Communication was easy, secure and peer-to-peer.&lt;/p&gt;

&lt;p&gt;However, with the introduction of &lt;strong&gt;web 2.0&lt;/strong&gt; in the early 2000s, people began to communicate through centralised services provided by several tech giants.&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Centralisation with web 2.0
&lt;/h2&gt;

&lt;p&gt;Current internet architecture is called to be centralised, lead by companies like Facebook, Google, Amazon, etc. Facebook, for example, now boasts &lt;strong&gt;2 Billion&lt;/strong&gt; monthly active users (more than China's whole population). Google is another good example; it answers &lt;strong&gt;3.5 Billion&lt;/strong&gt; requests per day.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmok9l3xkn42mj25i14lu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmok9l3xkn42mj25i14lu.png" alt="https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_b8ddd6dc-a25a-43bb-9c5e-ae5e46f47bc2_1158x1732"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The good:
&lt;/h3&gt;

&lt;p&gt;These companies became massively dominant in their domain by two methods, that have also become the heart and soul of web 2.0&lt;br&gt;
1.) Provide excellent services&lt;br&gt;
2.) Free services for everybody&lt;/p&gt;

&lt;p&gt;You don't have to sift through hundreds of websites to find information; instead you can utilise Google's free, fast-searching capabilities. You don't have to construct your communication channel or deal with other hassles if you want to connect and speak with others; you can do so using Facebook's services, which are also free.&lt;/p&gt;

&lt;p&gt;The involvement of these third-party services has provided an exceptional user experience and most importantly at zero expense.&lt;/p&gt;

&lt;h3&gt;
  
  
  The bad:
&lt;/h3&gt;

&lt;p&gt;Every internet company has its own data center, where all the user's data and their monitored interactions are stored. This infrastructural centralisation raises security concerns, by giving clear target points for hackers and fraudsters.&lt;/p&gt;

&lt;p&gt;In early 2013, Adobe originally &lt;a href="https://www.bbc.com/news/technology-24740873" rel="noopener noreferrer"&gt;reported&lt;/a&gt; that hackers had stolen nearly 38 million encrypted customer credit card records, plus login data for an undetermined number of user accounts. In &lt;a href="https://www.securedata.com/blog/dubsmash-accounts-hacked#:~:text=The%20company%20reported%20Monday%2C%20Feb,numbers%2C%20names%2C%20and%20more" rel="noopener noreferrer"&gt;December 2018&lt;/a&gt;, Dubsmash suffered an attack on 162 million  usernames, PBKDF2 password hashes, and other personal data, all of which was then put up for sale on the dark web market. In May 2019, Canva &lt;a href="https://codeburst.io/inside-canvas-security-breach-that-affected-139-million-user-accounts-78467e315681" rel="noopener noreferrer"&gt;suffered an attack&lt;/a&gt; that exposed details of 137 million users.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Read more &lt;a href="https://www.csoonline.com/article/2130877/the-biggest-data-breaches-of-the-21st-century.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Ugly:
&lt;/h3&gt;

&lt;p&gt;Tech monoliths like Google and Facebook have billions of users. These users are largely unaware of what goes on behind the scenes at these companies. This &lt;strong&gt;Free world&lt;/strong&gt; is a &lt;strong&gt;lie&lt;/strong&gt;, users pay not with their money but with their attention. These tech giants are reaching past your wallets, spurning your money, to seize your time, which is actually &lt;strong&gt;your life&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpzq08vfgxb3fgewpes6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpzq08vfgxb3fgewpes6.png" alt="1_bFQFs76Q97izUTKS0osYcQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Companies such as Facebook and Google dominate this user attention so massively that they are called the gatekeepers of 'information presented to users'. All major internet companies have a record of giving away user information to the government and other agencies without acquiring their consent.&lt;/p&gt;

&lt;p&gt;The most well-known situation is the &lt;a href="https://en.wikipedia.org/wiki/Facebook%E2%80%93Cambridge_Analytica_data_scandal" rel="noopener noreferrer"&gt;Facebook–Cambridge Analytica data scandal&lt;/a&gt;. We know about these companies' dark secrets thanks to &lt;strong&gt;whistle-blowers&lt;/strong&gt; like &lt;a href="https://www.edwardsnowden.com/" rel="noopener noreferrer"&gt;Edward Snowden&lt;/a&gt;, &lt;a href="https://www.vox.com/the-goods/2019/4/25/18515981/google-tristan-harris-attention-economy-silicon-valley" rel="noopener noreferrer"&gt;Tristan Harris&lt;/a&gt;, and others.&lt;/p&gt;



&lt;h2&gt;
  
  
  Decentralised Web (D-Web)
&lt;/h2&gt;

&lt;p&gt;Since the advent of BlockChain networks, like &lt;a href="https://bitcoin.org/" rel="noopener noreferrer"&gt;Bitcoin&lt;/a&gt; by Satoshi Nakamoto, and &lt;a href="https://ethereum.org/" rel="noopener noreferrer"&gt;Ethereum&lt;/a&gt; by Vitalik Buterin, etc. A new network system is taking birth whose most powerful architectural imperative is &lt;strong&gt;security&lt;/strong&gt;, a system so secure in it's root that it's also called &lt;strong&gt;Cryptocosm&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85lhm1o1upuwswalioie.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85lhm1o1upuwswalioie.jpeg" alt="1_VQvWb4IbGrPfCiu7nQeU6Q"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  How does it work?
&lt;/h3&gt;

&lt;p&gt;A D-Web removes centralised data hosting services, using instead a peer-to-peer infrastructure. Not only will this remove any services from a third party that tracks your data, it will also secure and smooth your transaction. As a result, no single entity will be able to control or manipulate the network of systems on their will.&lt;/p&gt;

&lt;p&gt;D-Web is expected to bring 3 major changes to global internet architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;End of Free World&lt;/strong&gt;: Money will become a native feature of the Internet. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distributed Information&lt;/strong&gt;: Decentralised applications offering users new capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Peer-to-Peer interaction&lt;/strong&gt;: No involvement of third parties, users will have more control over their digital identities and data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1l07hg00mnqzvr9bspz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1l07hg00mnqzvr9bspz.gif" alt="web30decentralizedweb-1024x576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of D-Web
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Ads&lt;/strong&gt; - Since Dweb is driven through money, there is nothing free of charge. We will not require an existing economic model where marketing and data sharing drive profitability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No dependence on central authority&lt;/strong&gt;: Remember how many times your work got stuck just because Google's server was down. There will be no such circumstances in Web3.0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No central censorship&lt;/strong&gt;: Government or any other single organisation will have no censorship over what you see or use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster and Safer&lt;/strong&gt;: Since there is no third party involved, transactions tend to be faster. Also no one is tracking your data, so you have complete control over your personals.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When is this happening?
&lt;/h3&gt;

&lt;p&gt;To be fair, it's actually happening. Thousands of companies are investing billions in developing these decentralised networks. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe12yd0bvqctfiw9ulfe8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe12yd0bvqctfiw9ulfe8.png" alt="1_AijBTLBMdE27iMOU7iVlnQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me give some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://brave.com/" rel="noopener noreferrer"&gt;Brave Browser&lt;/a&gt;: It is blockchain based browser, co founded by Brendan Eich, creator of JavaScript. I have been using it for about an year now, and I absolutely love it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://d.tube/" rel="noopener noreferrer"&gt;DTube&lt;/a&gt;: A blockchain based alternative of Youtube, it has been getting lot of sensation lately. It's smooth and interactive and has potential to go further heights in near future.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://eossanguo.one/#/home" rel="noopener noreferrer"&gt;EOS Dynasty&lt;/a&gt;: It is Blockchain based gaming platform, which has nearly 12,000 unique daily users, claiming to be the first role-playing, player-versus-player (PvP) game based on blockchain. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://makerdao.com/en/" rel="noopener noreferrer"&gt;MakerDAO&lt;/a&gt;: A decentralized credit service that runs on the Ethereum blockchain platform, MakerDAO supports Dai, a stablecoin whose value is pegged to the U.S. dollar.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Well, that's all for this article. I hope I did spark a little interest in you towards decentralisation. I believe this is the biggest thing happening in tech industry that will drastically change the way we use internet in coming years. &lt;/p&gt;

&lt;p&gt;You can read more about this at: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274" rel="noopener noreferrer"&gt;The Meaning of Decentralization&lt;/a&gt; by Vitalic Buterin&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.coinbase.com/understanding-web-3-a-user-controlled-internet-a39c21cf83f3" rel="noopener noreferrer"&gt;Understanding Web 3 — A User Controlled Internet&lt;/a&gt; by Emre Tekisalp&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/pragativerma18/evolution-of-web-42eh"&gt;Evolution of Web&lt;/a&gt;, by Pragati Verma&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What do you think about decentralisation? Is it good thing or bad? Let's hear your thoughts in the comment section.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thanks for reading. Have a nice day.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>blockchain</category>
      <category>webdev</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Django, Null=True or Blank=True or both</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Fri, 25 Jun 2021 06:00:22 +0000</pubDate>
      <link>https://dev.to/anubhavitis/django-null-true-or-blank-true-or-both-30ed</link>
      <guid>https://dev.to/anubhavitis/django-null-true-or-blank-true-or-both-30ed</guid>
      <description>&lt;p&gt;When we add a database field to Django, we have several options for defining the modal field. They usually have default values that we can override according to our needs.&lt;/p&gt;

&lt;p&gt;To use modal fields effectively, one must have a thorough understanding of their definitions.&lt;/p&gt;



&lt;h2&gt;
  
  
  Null
&lt;/h2&gt;

&lt;p&gt;Every column in the database is defined to hold certain attributes. Sometimes we want to keep our columns optional, thus hold a NULL value, and we set these permissions as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;NewField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;charField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# This sets the NewField to be an optional field in DB
&lt;/span&gt;
&lt;span class="n"&gt;NewField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;charField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# This sets the NewField to be a mandatory field in DB
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  Blank
&lt;/h2&gt;

&lt;p&gt;Every Django model field is also defined to hold certain attributes. Sometimes we want to keep our fields blank with no form value, and we set these permissions as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;NewField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;charField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# This sets the NewField to be allowed to stay blank
&lt;/span&gt;
&lt;span class="n"&gt;NewField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;charField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# This sets the NewField to not be allowed to stay blank
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  Null and Blank
&lt;/h2&gt;

&lt;p&gt;By now, it should be clear that &lt;strong&gt;Null&lt;/strong&gt; affects the database table definition and &lt;strong&gt;blank&lt;/strong&gt; affects model validation. There are four ways to use these attributes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# 1. Requires both
&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;charField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 2. Requires DB value
&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;charField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 3. Requires modal value
&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;charField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 4. Requires none
&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;charField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's discuss each distinctively:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.) Null=False, Blank=False&lt;/strong&gt;&lt;br&gt;
This is the default condition for modal fields. It means the value is required both in the DB and in models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.) Null=False, Blank=True&lt;/strong&gt;&lt;br&gt;
This is a condition where forms don't require a value, but the field does.&lt;/p&gt;

&lt;p&gt;Let's take an example: If your model has a field whose value is being calculated from other models in the field. Then you would want to keep 'Black=True' to not accept values from the user, and 'Null=False' to enforce that a value is always provided.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.) Null=True, Black=False&lt;/strong&gt;&lt;br&gt;
This is a condition where form requires a value, but DB doesn't. This is not a very commonly used configuration, I haven't seen one yet. (If you happen to know any, put them down in the comments.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.) Null=True, Black=True&lt;/strong&gt;&lt;br&gt;
This is a condition, where form doesn't require a value, and DB doesn't require a value either. This is pretty self explanatory since the former is reflected with the latter.&lt;/p&gt;




&lt;p&gt;You might now have a good idea of what these two attributes mean, and how they are to be used together.&lt;br&gt;
You can read more about them &lt;a href="https://stackoverflow.com/questions/8609192/what-is-the-difference-between-null-true-and-blank-true-in-django"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Have a good day. Happy Coding.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>devjournal</category>
      <category>beginners</category>
      <category>django</category>
    </item>
    <item>
      <title>Why we should always use ORM?</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Sun, 20 Jun 2021 12:32:23 +0000</pubDate>
      <link>https://dev.to/anubhavitis/why-we-should-always-use-django-orm-2l6m</link>
      <guid>https://dev.to/anubhavitis/why-we-should-always-use-django-orm-2l6m</guid>
      <description>&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1405771005126008833-786" src="https://platform.twitter.com/embed/Tweet.html?id=1405771005126008833"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1405771005126008833-786');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1405771005126008833&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Interacting with the database is a key component of an application and the manner that we do it makes a big impact in the process of development and user experience.&lt;/p&gt;

&lt;p&gt;There are several techniques, one of which is ORM. Let's talk in depth about it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: I'll be using Django as a reference, but the same principles apply almost everywhere.&lt;/p&gt;



&lt;h2&gt;
  
  
  What is ORM ?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg32k4iv3dic5xo2ygioe.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg32k4iv3dic5xo2ygioe.jpeg" alt="TjJok2RgC"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;ORM is an acronym that stands for Object Relational Mapping. An object is what you use in your programming language, a relation is your database, and mapping is the link between the two.&lt;/p&gt;

&lt;p&gt;ORM is a technique that lets you query and manipulates data from a database using an object-oriented paradigm. It &lt;strong&gt;encapsulates&lt;/strong&gt; the code needed to communicate with the database, so you don't use SQL anymore; you interact directly with an object in the same language you're using.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Read more at &lt;a href="https://stackoverflow.com/a/1279678/5830065" rel="noopener noreferrer"&gt;What is an ORM, how does it work &lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


 
&lt;h2&gt;
  
  
  ORM Lazy-Loading
&lt;/h2&gt;

&lt;p&gt;In ORM, Querysets are known to be lazily loaded in order to load only what is required rather than the entire database.&lt;/p&gt;

&lt;p&gt;Lazy loading means that until you perform certain actions on the queryset, such as iterating over it, the corresponding DB query won't be made.&lt;/p&gt;

&lt;p&gt;For. e.g&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# Query hasn't been executed yet
&lt;/span&gt;
&lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;age__lt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Query still hasn't been executed
&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Now query has been excecuted
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  ORM Caching
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa6y520cxqvnucoayt2g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa6y520cxqvnucoayt2g.jpg" alt="2dae2d40-0d0d-4fef-b6dd-23bcd4e3a988"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Interacting with large databases is a time consuming task, that's why Querysets are cached. The primary motive for ORM caching is to increase performance through localised data access as an alternative to making a database round trip to retrieve it.&lt;/p&gt;

&lt;p&gt;For e.g. (Continued from last example)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;# Query hasn't been executed yet
&lt;/span&gt;
&lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;age__lt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Query still hasn't been executed
&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Now query has been excecuted
&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Query hasn't been executed this time, because of caching.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Read more at &lt;a href="https://www.codementor.io/@pritishc/django-optimization-or-how-we-avoided-memory-mishaps-yh6fwfxet" rel="noopener noreferrer"&gt;Django Optimization: Or how we avoided memory mishaps&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  Pros of using ORM
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9rphn48dskna0woixdt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9rphn48dskna0woixdt.png" alt="Today's developers (2)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Production&lt;/strong&gt;: You don't have to be an expert in SQL queries, since you don't have to write SQL. Also, a lot of stuff is done automatically, hence Your code becomes short, clean, and easy to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: it is generally available in the language of your choice, and lets you use OOPs goodness like inheritance very easily.&lt;/p&gt;



&lt;h3&gt;
  
  
  Cons of using ORM
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ORM has tendency to slow down a little, as compared to direct communication with SQL.&lt;/li&gt;
&lt;li&gt;Developer has to go through ORM library, and understand it's functions and utilities so as to be able to use it efficiently.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;To summarise, I believe in most of the use cases benefits of using ORM easily exceeds drawbacks. I've been using ORM for a while now, and it's significantly improved my development experience.&lt;/p&gt;

&lt;p&gt;What do you think? Put down in the comments. As always suggestions are always welcome.&lt;/p&gt;

&lt;p&gt;Find me on: &lt;a href="https://twitter.com/anubhavitis" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; | &lt;a href="https://github.com/anubhavitis" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://linkedin.com/in/anubhavitis" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Happy Coding.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>beginners</category>
      <category>database</category>
      <category>productivity</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Getting started with Asynchronous programming</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Thu, 10 Jun 2021 06:54:56 +0000</pubDate>
      <link>https://dev.to/anubhavitis/getting-started-with-asynchronous-programming-4jd2</link>
      <guid>https://dev.to/anubhavitis/getting-started-with-asynchronous-programming-4jd2</guid>
      <description>&lt;p&gt;Generally, when we code an application, a chunk of code runs at a time. So if our code contains a certain number of tasks, then each of them is compiled one at a time. This form of programming is called &lt;strong&gt;Synchronous programming&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But, don't you think, most of the computer systems are often equipped with multiple processors that can run several operations together. So, what's the point of executing one task at a time?&lt;/p&gt;

&lt;h2&gt;
  
  
  Asynchronous Programming
&lt;/h2&gt;

&lt;p&gt;Modern software development revolves around doing multiple tasks simultaneously, making use of maximum computer potential to save as much time as we can. This form of programming is referred to as &lt;strong&gt;Asynchronous programming&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnnxmkhuba77bubn3z8n.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnnxmkhuba77bubn3z8n.gif" alt="unnamed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How do we do that?
&lt;/h3&gt;

&lt;p&gt;In asynchronous programming, a program shares its processing to multiple &lt;strong&gt;threads&lt;/strong&gt;. A thread is a single process that a program can use to complete tasks. Each thread can only do a single task at once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// single thread application.&lt;/span&gt;
&lt;span class="nx"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So if we use a double thread for the above program, then we can decrease processing time to almost half.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Multi threaded application.&lt;/span&gt;
&lt;span class="nx"&gt;Thread&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;END&lt;/span&gt;
&lt;span class="nx"&gt;Thread&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most of the programming languages such as Python, JavaScript are old and are single-threaded built to work synchronously. Later with time, they got tools to help with such problems and send some processing to different threads.&lt;/p&gt;

&lt;p&gt;New programming languages such as GO, Rust, etc. use multi-threading by default.&lt;/p&gt;



&lt;h2&gt;
  
  
  Asynchronous web applications
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Over 50% of mobile users abandons websites that take longer than three seconds to load." - Research by Google&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's discuss an application of asynchronous programming in a web apps through a general example. Consider you have a mailing application and you're task is to send 5 emails. &lt;/p&gt;

&lt;p&gt;Assuming one mail takes 2sec to process, then this task is going to cost 10sec in total. This is not good for users, most of the users are not going to wait for 10sec for completion of tasks.&lt;/p&gt;

&lt;p&gt;what happens if we try to do this asynchronously?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ri5j7yy73bqwypjr6yh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ri5j7yy73bqwypjr6yh.png" alt="Today's developers (2)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am sharing my &lt;strong&gt;Django&lt;/strong&gt; based codebase, which is using the &lt;a href="https://docs.celeryproject.org/en/stable/index.html" rel="noopener noreferrer"&gt;Django-celery&lt;/a&gt; package to complete tasks in different threads.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: If you're not familiar with python and Django, no worries, just take a look at the codebase to know what's happening and you can apply similar functionality in your applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you code this task synchronously then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# proj/urls.py
&lt;/span&gt;&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;#proj/views.py
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;curr_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Process initiated at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;curr_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 1st mail
&lt;/span&gt;    &lt;span class="nf"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 2nd mail
&lt;/span&gt;    &lt;span class="nf"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 3rd mail
&lt;/span&gt;    &lt;span class="nf"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 4th mail
&lt;/span&gt;    &lt;span class="nf"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 5th mail
&lt;/span&gt;
    &lt;span class="n"&gt;done_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Process completed at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;done_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;total_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;done_time&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;curr_time&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Total time for sending 5 mails:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;HttpResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mails, sent successfully.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which returns output as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Process initiated at 2021-06-09 09:01:58.158870
Process completed at 2021-06-09 09:02:08.179977
Total time for sending 5 mails: 0:00:10.021107
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Notice how our function took 10.021107s to execute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now part of our code that's consuming most of the time is send_mail(). If you think about it, we can create a separate thread for this process, and let it run. This was, our main thread would execute instantly. This will let the user know that his mails are sending in process, and he can continue with other works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8emqdewzyvpz2gr6nz2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8emqdewzyvpz2gr6nz2m.png" alt="Today's developers (3)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's edit our index function and to send these mails asynchronously by using &lt;a href="https://docs.celeryproject.org/en/stable/index.html" rel="noopener noreferrer"&gt;celery&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, refactored function is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# proj/urls.py
&lt;/span&gt;&lt;span class="n"&gt;urlpatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;#proj/views.py
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;curr_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Process initiated at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;curr_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 1st mail with celery
&lt;/span&gt;    &lt;span class="n"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 2nd mail with celery
&lt;/span&gt;    &lt;span class="n"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 3rd mail with celery
&lt;/span&gt;    &lt;span class="n"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 4th mail with celery
&lt;/span&gt;    &lt;span class="n"&gt;send_mail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;    &lt;span class="c1"&gt;# Send 5th mail with celery
&lt;/span&gt;
    &lt;span class="n"&gt;done_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Process initiated at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;done_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;total_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;done_time&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;curr_time&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Total time for sending 5 mails:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total_time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;HttpResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mails, sent successfully.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which returns output as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Process initiated at 2021-06-09 09:09:19.496051
Process initiated at 2021-06-09 09:09:19.549268
Total time for sending 5 mails: 0:00:00.053217
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Notice, this time our function took only 0.053217s to execute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjy9hprul89ytw910j3t.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjy9hprul89ytw910j3t.gif" alt="giphy (4)"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This is how modern web applications are developed to handle time taking tasks on different threads, and process the main thread as fast as possible.&lt;/p&gt;




&lt;p&gt;By now, I am hoping you have good understanding of Asynchronous programming and its applications. If you like the article, share it among your peers.&lt;/p&gt;

&lt;p&gt;Did I miss anything? Put down in the comments. As always suggestions are always welcome.&lt;/p&gt;

&lt;p&gt;Find me on: &lt;a href="https://twitter.com/anubhavitis" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; | &lt;a href="https://github.com/anubhavitis" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://linkedin.com/in/anubhavitis" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Happy Coding.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>Guide to effective coding with Codeforces</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Thu, 03 Jun 2021 10:56:09 +0000</pubDate>
      <link>https://dev.to/anubhavitis/guide-to-effective-coding-with-codeforces-3if4</link>
      <guid>https://dev.to/anubhavitis/guide-to-effective-coding-with-codeforces-3if4</guid>
      <description>&lt;p&gt;Codeforces is one of the most popular platforms for practising competitive programming, world’s top programmers participate in contests held here. &lt;/p&gt;

&lt;p&gt;I have been participating on codeforces for about two years now, and I can surely say that it has given me the best learning experience and lots of fun.&lt;/p&gt;

&lt;p&gt;Writing from experience, beginners go through lot of trouble to understand how to practice on Codeforces and excel in competitive programming. Today, I am going to share a quick guide to the website’s UI, and strategies to practice CP.&lt;/p&gt;



&lt;h1&gt;
  
  
  Home tab
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Homepage of CF, contains details of new challenges, their tutorials, some good recent blogs.&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fmc4sbgtqdwcjg1khng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fmc4sbgtqdwcjg1khng.png" alt="Screenshot from 2021-06-03 15-35-36"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the right division of this page, you’ll see a &lt;strong&gt;countdown&lt;/strong&gt; to the next challenge contest with a link to &lt;strong&gt;register&lt;/strong&gt; for the challenge. You can't participate in a challenge without participation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9aqo1lk3f7sydxlslym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9aqo1lk3f7sydxlslym.png" alt="1_EvztGS6Qxyj9ksBL2My_qw"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codeforces Blogs:&lt;/strong&gt; This is one of the most essential parts of Codeforces, personally I have learned a lot of things from user’s blogs. Almost all professional programmer writes blog on codeforces based on their experience, they share their tricks and sometimes you might even find out really good algorithms that are hardly available on any other websites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For eg.&lt;/strong&gt; once I got an an error called “IDLENESS LIMIT ERROR”, which I had never heard of. I searched it over different websites but found no solution, but then when I tried to find it on codeforces blogs, I found the solution to the error within a few minutes.&lt;/p&gt;

&lt;p&gt;There are other interesting stuff on this page but for a beginner, I’ll say, that’s all for the homepage you need to know.&lt;/p&gt;

&lt;h1&gt;
  
  
  Contests
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;This tab offers you details of upcoming contests and previously held contests.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmj3h7h4meqqho9nl7o41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmj3h7h4meqqho9nl7o41.png" alt="1_83neuOlPflQCrXM_zRNjzA"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The above image is an example of how contents are displayed, let’s break it down.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enter: When you enter any past contest, you get to access all questions as in practice sessions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Virtual Participation: This is like a virtual contest, in case you missed any contest or want to participate again. Your ratings won’t be affected by this participation, but you do get to see your rank in the rank-list generated in the live contest.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Final Standing: It’s the final rank-list of all the participants of the contest, below which shows how many questions of that contest you solved. ( Reference image shows “5 out of 9” because that’s my data.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are some other sections as well, but, this is all a beginner should be concerned about.&lt;/p&gt;

&lt;h1&gt;
  
  
  Problemset
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;A heavenly tab, for practising thousands of questions from various topics.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favhagvtgso0dhz9shiha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favhagvtgso0dhz9shiha.png" alt="1_tU7_9RcViaZUDgk8iswfvg"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This is the tab that you are going to use most, and yeah, I have tried my best to explain it all.&lt;/p&gt;

&lt;p&gt;The above image is an example of how the problems list is displayed, let’s break it down.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Question code:&lt;/strong&gt; Like you see in image “1320 A” or “1313C1” these are question codes. Sometimes editorials use question code only instead of full names, so don’t panic over there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; Obviously question name is pretty clear to you, but look, on the right side of this column, there is a grey text that tells topics tags of questions. These tags sometimes serve as a hint to the solution so if you don’t wanna see them, you may turn that off from setting in the right division.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Column 3:&lt;/strong&gt; This column gives you an option to mark that question for any future reference. This column also tells which questions are solved, solved ones are colored and unsolved are left blank.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Column 4:&lt;/strong&gt; It tells you about the level of the question in the form of rating, greater the rating, harder the problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Column 5:&lt;/strong&gt; It’s a list of all solutions submitted for that solution. Also, if you click on the head of this column, questions get sorted based on submission.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdt4qo3mmpgxvb0wfvva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdt4qo3mmpgxvb0wfvva.png" alt="1_wfDacfcPQ2GHCtVI4gtagA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next is Filter Section, it is an important section in the right division of the page. Here you can filter the question list based on your choice.&lt;/p&gt;

&lt;p&gt;For example, I have given difficulty from 1100–1200 and added basic question tags, which I personally believe every beginner should follow.&lt;/p&gt;

&lt;h1&gt;
  
  
  User’s profile
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;When you click on someone’s username then you are directed to their profile.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A user profile tells everything about a user’s life on CodeForces. Everything is open; details of all their contests, links to all their blogs, a little about their institution and where they belong to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv6fvwvr68tlzy0ghgr3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv6fvwvr68tlzy0ghgr3.png" alt="1_z2g5bBaBfVWstz3VZJNG_A"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Obviously, most of this is pretty clear, I won’t go on every detail, but of course the useful ones.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Add Friend:&lt;/strong&gt; Right next to the username, you see a star, that’s an option to add someone as a friend. By adding them as a friend, you can see your friends in rank-list of every contest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send message:&lt;/strong&gt; This is really a useful option, you can drop a private message to a user and have a conversation regarding any question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rating names:&lt;/strong&gt; This might be a little new for beginners, but on CF, coder’s profile is clubbed based on their rating. Like for tourist it’s Legendary Grandmaster, which is super hard to achieve.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How to practice efficiently?
&lt;/h1&gt;

&lt;p&gt;Problemset tab is dedicated for practice purpose, but there are different strategies to use this set of problems for efficient growth. I am going to share strategy that I have been using for about a year now, and it has worked wonders for me.&lt;/p&gt;

&lt;p&gt;These are some of the basic topics that are building blocks of a competitive programmer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Greedy&lt;/li&gt;
&lt;li&gt;Brute Force&lt;/li&gt;
&lt;li&gt;Sorting&lt;/li&gt;
&lt;li&gt;Binary Search&lt;/li&gt;
&lt;li&gt;Two pointer&lt;/li&gt;
&lt;li&gt;Maths&lt;/li&gt;
&lt;li&gt;Combinatorics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I do is, I choose any two of them, based on my skill-set and filter out questions based on these topics. To filter out questions, you can use filter section (explained in Problemset section), and give appropriate rating interval and start practising these questions.&lt;/p&gt;

&lt;p&gt;Based on my experience, I’ll suggest to try Greedy+ Implementation in rating interval of 1000–1200, for absolute beginners.&lt;/p&gt;

&lt;h1&gt;
  
  
  Other special tools for Codeforces
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;These tools will help you to grow faster&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsmeudnutzgv0ia7tulh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsmeudnutzgv0ia7tulh.png" alt="1_tjXAP34w9jTU7aMe_ZiHXg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Codeforces Visualizer:&lt;/strong&gt; It’s an open hosted visualizer for codeforces accounts that tells you complete details of a user on codeforces, such as: his rating change, no. of questions attempted by user, topics wise distribution of user’s practice, etc. Like to visualizer is &lt;a href="https://cfviz.netlify.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rating predictor:&lt;/strong&gt; It’s a browser extension, available for most of the popular browser, it predicts rating changes live at the contest. It’s not 100% correct, but mostly accurate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;StopStalk:&lt;/strong&gt; It’s another platform like codeforces visualizer, but the difference is that it creates leader-board for your friends in your institution and you can see each and every thing they are doing on different programming websites such as: Codeforces, Codechef, UVa, etc. Link to stopstalk is &lt;a href="https://www.stopstalk.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;As for the beginner, now you can easily find your way with CF’s UI, if you have any doubts put that down in the comment section, I’ll respond to it as soon as I see it.&lt;/p&gt;

&lt;p&gt;If you are an absolute beginner and you want to get detailed insights of how to get into programming, then check out my other article where I have covered everything with beginners perspective, &lt;a href="https://blog.usejournal.com/programming-begineers-guide-db6dae418ba7" rel="noopener noreferrer"&gt;here is link&lt;/a&gt; to it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Stay healthy, Keep learning, Keep coding!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>productivity</category>
    </item>
    <item>
      <title>5 most underrated skills of a top developer</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Wed, 26 May 2021 10:01:32 +0000</pubDate>
      <link>https://dev.to/anubhavitis/5-most-underrated-skills-of-a-top-developer-bin</link>
      <guid>https://dev.to/anubhavitis/5-most-underrated-skills-of-a-top-developer-bin</guid>
      <description>&lt;p&gt;You all might have stumbled upon blogs like &lt;strong&gt;"Best books you should read to become a top developer"&lt;/strong&gt;, &lt;strong&gt;"Best frameworks you should learn to become a successful developer"&lt;/strong&gt;, etc. We all aspire to be ninja developers, and so, we try to gain more and more understanding of technical concepts.&lt;/p&gt;

&lt;p&gt;Today, I am going to take you through some of the most basic, yet important skills, that bring a very significant impact upon a developer's life. &lt;/p&gt;



&lt;h2&gt;
  
  
  #1 Touch typing
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl59adp4wrtfhig53s4ld.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl59adp4wrtfhig53s4ld.gif" alt="giphy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have 10 fingers, and the standard Qwerty keyboard is beautifully designed to use each of our fingers all together, without even looking at the keyboard.&lt;/p&gt;

&lt;p&gt;Still, I've seen plenty of developers who type with 2-3 fingers only. Most of the time they spend is looking at the keyboard and then checking on the screen if they typed correctly.&lt;/p&gt;

&lt;p&gt;We got to learn to use the keyboard, before using a keyboard. Touch typing is one of the best productivity hacks for developers, you save a lot of time and energy.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Wanna learn touch typing? Checkout &lt;a href="https://www.keybr.com/" rel="noopener noreferrer"&gt;KeyBr&lt;/a&gt;, &lt;a href="https://10fastfingers.com/typing-test/english" rel="noopener noreferrer"&gt;10FastFingers&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  #2 Documentation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzncw6ats1ecw6zug6tk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzncw6ats1ecw6zug6tk.png" alt="me-when-looking-at-the-code-i-wrote-two-weeks-43114931"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documenting a project is something that we all know is a good practice, but the least of us care to follow. Good documentation is one of the most important part of the Open Source world, includes information for contributors, applied coding conventions, file organizations, comments, naming conventions, programming practices, etc.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Workers spend about 2.5 hours per day, or roughly 30% of the workday, searching for information." &lt;br&gt;
&lt;a href="https://blog.xenit.eu/blog/do-workers-still-waste-time-searching-for-information" rel="noopener noreferrer"&gt;Xenit&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you write clear and accurate documentation of your projects, not only it gives an easy way to others when they look at your code, it also works as an easy checkpoint for you while revisiting code after a week/month/year. It might be tiring at the beginning but very effective in the long run.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Check this: &lt;a href="https://guides.lib.berkeley.edu/how-to-write-good-documentation" rel="noopener noreferrer"&gt;How to write a good documentation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  #3 Data Structures and Algorithms
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mlyqjzsqm09c9qqhjy2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mlyqjzsqm09c9qqhjy2.png" alt="Today's developers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're living in a world where data is more costly than oil/gold. More and more data is getting stored, processed, and slowing down the processing time of the systems, which costs tech companies a fortune. Effective and efficient use of these data is a challenge, and that's where DSA plays a very significant role.&lt;/p&gt;

&lt;p&gt;Under the cloak of all your SQL and Linux commands are algorithms and data structures. Google manages to search plenty of information in a fraction of seconds, all thanks to its &lt;a href="https://en.wikipedia.org/wiki/PageRank" rel="noopener noreferrer"&gt;Page Rank algorithm&lt;/a&gt;. Spotify, compared to it's competitors, consumes least data and gives the best personalized music experience, thanks to its &lt;a href="https://onezero.medium.com/how-spotifys-algorithm-knows-exactly-what-you-want-to-listen-to-4b6991462c5c" rel="noopener noreferrer"&gt;BaRT algorithm&lt;/a&gt; that analyzes every piece of audio to give you the one that Spotify is confident you’ll like.&lt;/p&gt;

&lt;p&gt;Real-world problems that take months can be solved in minutes using the knowledge of DSA. Understanding of data structures and algorithms may not seem relevant in the development of small scale applications, but makes an exceptional difference in large scale applications.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For more interest, check this: &lt;a href="https://medium.com/coderbyte/how-to-get-good-at-algorithms-data-structures-d33d5163353f" rel="noopener noreferrer"&gt;Improving your Algorithms &amp;amp; Data Structure Skills&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  #4 Coding standards
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpk33b0twlwt1l8eulo1k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpk33b0twlwt1l8eulo1k.png" alt="hqIXH"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Following standard coding practices have a very positive impact on the software and growth of the organization, it decreases security concerns and enhances performance very significantly. &lt;/p&gt;

&lt;p&gt;Series of procedures are explicitly defined of each programming language, they can be for various aspects of the program written in that language and are considered as essential attributes of software development.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1048257153205600256-112" src="https://platform.twitter.com/embed/Tweet.html?id=1048257153205600256"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1048257153205600256-112');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1048257153205600256&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;To structure a smoother process of maintaining the code and providing readability to the code, coding standards, and code quality are essential to be managed by every developer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Read more: &lt;a href="https://www.multidots.com/importance-of-code-quality-and-coding-standard-in-software-development/" rel="noopener noreferrer"&gt;Importance of Code Quality and Coding Standard in Software Development&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h2&gt;
  
  
  #5 Communication &amp;amp; Collaboration
&lt;/h2&gt;

&lt;p&gt;Communication skills are equally as important as technical skills. It's said that failures in software teams result more often from communication issues than from technical problems. Just like every other aspect of life, communication and collaboration play a very crucial role in software development. Being a talented developer won't bring the desired results if there isn't a successful collaboration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4b4t32z55pda67s6dc5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4b4t32z55pda67s6dc5.png" alt="my-model-for-business-is-the-beatles"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;There are many success stories that I can talk about where effective collaboration led to a smart product. E.g. Twitter, Jack Dorsey was paired up with Biz Stone during a hackathon. He and Biz came up with the idea of Twitter, which today has 150M+ active users worldwide. &lt;/p&gt;

&lt;p&gt;How to connect with fellow developers, and build up strong connections, asking for help, pointing bugs, and all together staying humble and polite is an art that every developer should master.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Learn more at &lt;a href="https://www.linkedin.com/pulse/communication-key-software-engineering-donnie-flood/" rel="noopener noreferrer"&gt;Communication is Key to Software Engineering&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;These were the 5 most underrated skills of a top developer, in my opinion at least.&lt;/p&gt;

&lt;p&gt;What do you think? Did I miss any? Put it down in the comments.&lt;/p&gt;




&lt;p&gt;Find me on: &lt;a href="https://twitter.com/anubhavitis" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; | &lt;a href="https://github.com/anubhavitis" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://linkedin.com/in/anubhavitis" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Happy Coding!
&lt;/h4&gt;

</description>
      <category>computerscience</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My Experience with Crio: Winter of Doing</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Thu, 28 Jan 2021 09:20:14 +0000</pubDate>
      <link>https://dev.to/anubhavitis/my-experience-with-crio-winter-of-doing-55ic</link>
      <guid>https://dev.to/anubhavitis/my-experience-with-crio-winter-of-doing-55ic</guid>
      <description>&lt;p&gt;&lt;a href="https://crio.do" rel="noopener noreferrer"&gt;Crio.do&lt;/a&gt; is a platform that empowers developers to crack real-world industry problems with a moto &lt;strong&gt;Learn by Doing&lt;/strong&gt;. Crio’s mission is to empower developers with excellent applied-learning opportunities at scale and construct the country’s product development talent.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Read more at: &lt;a href="https://yourstory.com/companies/criodo" rel="noopener noreferrer"&gt;Crio.Do, by YourStory&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Crio launched an initiative called &lt;strong&gt;Crio: Winter of Doing&lt;/strong&gt;, considered to be India's largest tech externship program for developers. I got to know about this program through my college seniors, I applied for this program, and fortunately, I received an invitation for stage 1.&lt;/p&gt;

&lt;p&gt;I have completed Stage 1 of this program, and in this article, I'll be sharing my adventurous journey with Crio.&lt;/p&gt;



&lt;h1&gt;
  
  
  Learning Bytes
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F106111171-bae99100-6171-11eb-82e4-15da104d5a1e.png" class="article-body-image-wrapper"&gt;&lt;img alt="Header2" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F106111171-bae99100-6171-11eb-82e4-15da104d5a1e.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CWOD's stage 1 was a complete package of an enormous learning experience. It consisted of 8 modules with hands-on experience, and a participant must complete these modules properly to get qualified for Stage 2.&lt;/p&gt;

&lt;p&gt;CWOD referred to these modules as Bytes. These bytes were important basic concepts of software development that every software developer must be equipped with. The list of these bytes are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;

&lt;h4&gt; HTTP &lt;/h4&gt; Objective of this module was to get a clear understanding of how HTTP works and use tools like cURL &amp;amp; Postman to perform HTTP requests and analyze responses. 

&lt;p&gt;I have shared my notes of this module in an article: &lt;a href="https://dev.to/anubhavitis/http-fundamentals-5831"&gt;Link&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;

&lt;h4&gt; REST &lt;/h4&gt; Objective of this module was to understand what REST APIs are, and how to make REST API calls. I have already been working with rest API's for a long time, still, this module was a good learning experience for me.

&lt;p&gt;I have shared my notes of this module with some extra research: &lt;a href="https://dev.to/anubhavitis/apis-for-beginners-34ie"&gt;Link&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;

&lt;h4&gt; Linux Basics 1 &lt;/h4&gt; This was the most interesting module of this stage, I always preferred Linux for my computer, and I had a basic understanding of how Linux works. After this module, I love Linux more.&lt;/li&gt;
&lt;li&gt;

&lt;h4&gt; Deploy app server in AWS &lt;/h4&gt; Objective of this module was to help participants to launch their first virtual server in AWS, deploy the app backend server, and connect the mobile app to the app backend server. I must say, with 0 experience this module was most challenging for me.

&lt;p&gt;More the challenge, better the learning experience.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt; Git Basics &lt;/h4&gt;

&lt;p&gt;It's tough to imagine software development without version control systems. Git Basics bytes was a complete learning path for beginners to get proficient with git and GitHub. Its hands-on experience equipped with GitLab and Gitpod made the whole process very smooth.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt; HTML and CSS &lt;/h4&gt;

&lt;p&gt;HTML and CSS are the fundamentals of frontend development. The objective of this module was to get started using HTML for web pages, using CSS to style web pages, and create finally create the first static website.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;

&lt;h4&gt; QPrep JavaScript &lt;/h4&gt; JavaScript is one of the most famous languages among developers. In this module, we learned Javascript ES6 features, and we practiced them by solving several problems. For every problem, we had to construct a solution coded in JavaScript on Crio's editor.&lt;/li&gt;
&lt;li&gt;

&lt;h4&gt; QProfile &lt;/h4&gt; The final byte, and the most amazing one as well. This module was all about implementing what we learned in previous bytes. Here we were supposed to construct a portfolio website fetching details from our GitHub through APIs and host it on &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; &amp;amp; &lt;a href="https://heroku.com" rel="noopener noreferrer"&gt;Heroku&lt;/a&gt;. We were equipped with materials and the format of the profile.

&lt;p&gt;Check out my Q profile, &lt;a href="https://anubhavitis.netlify.app/" rel="noopener noreferrer"&gt;Anubhav Singhal's Qprofile&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;h1&gt;
  
  
  Other activities
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F106111511-187ddd80-6172-11eb-93cf-be1f8e3848f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F106111511-187ddd80-6172-11eb-93cf-be1f8e3848f0.png" alt="Crio2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stage 1 was a lot of fun, we had a lot of learning experiences and we had few fun activities as well. Some of them are listed below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;

&lt;h4&gt; Speaker Sessions&lt;/h4&gt; Crio team onboarded some of the great influencers from the tech industry such as Binny Bansal (Co-founder of Flipkart), Vivek Ravishankar (Co-founder of Hackerrank), etc. It was great hearing from such eminent personalities and learn about their experience.&lt;/li&gt;
&lt;li&gt;

&lt;h4&gt; Meme war&lt;/h4&gt;One of the slack channels was filled with memes made by thousands of developers from various parts of the country. It was great to see how hilarious they were.
I didn't make any meme but surely enjoyed a lot.&lt;/li&gt;
&lt;li&gt;

&lt;h4&gt; Sherlock&lt;/h4&gt; A puzzle game, with interesting problems about the internet and it's working. I did participate in this, and I wish it had more level to solve, cause I had a lot of fun doing it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were more activities since they weren't mandatory, I only participated in these two as per my convenience.&lt;/p&gt;



&lt;h1&gt;
  
  
  Badge and Achievements
&lt;/h1&gt;

&lt;p&gt;I received two batches,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Disciplined Rooster&lt;/strong&gt; for showing up every day, and,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unstoppable Bull&lt;/strong&gt; for completing all tasks with excellence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F106109520-a3a9a400-616f-11eb-8c1f-35923eebb417.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F106109520-a3a9a400-616f-11eb-8c1f-35923eebb417.png" alt="Certificate"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I wasn't sure while applying to this, but it really worked out to be great.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I connected with some good devs across the country, who helped me whenever I was stuck somewhere.&lt;/li&gt;
&lt;li&gt;I polished my existing skill-set, and ofcourse acquired new skills as well.&lt;/li&gt;
&lt;li&gt;I always wanted to have a portfolio website, now I have one: &lt;a href="https://anubhavitis.netlify.app/" rel="noopener noreferrer"&gt;Anubhav Singhal's Qprofile&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Community on the slack channel was just amazing.&lt;/li&gt;
&lt;li&gt;The best start to 2021 for sure.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thanks for reading, I hope my insights were helpful to you.&lt;br&gt;
Find me on various platforms: &lt;a href="https://linkedin.com/in/anubhavitis" rel="noopener noreferrer"&gt; LinkedIn &lt;/a&gt;|&lt;a href="https://twitter.com/anubhavitis" rel="noopener noreferrer"&gt; Twitter &lt;/a&gt;|&lt;a href="https://github.com/anubhavitis" rel="noopener noreferrer"&gt; GitHub &lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Happy Coding&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>github</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Cloud Computing: Beginners guide</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Mon, 25 Jan 2021 06:14:48 +0000</pubDate>
      <link>https://dev.to/anubhavitis/cloud-computing-beginners-guide-lj7</link>
      <guid>https://dev.to/anubhavitis/cloud-computing-beginners-guide-lj7</guid>
      <description>&lt;p&gt;We all have been witnessing this buzz about cloud services, tech giants such as Google, Amazon, Microsoft, etc. releasing their cloud service platform such as &lt;a href="https://cloud.google.com/" rel="noopener noreferrer"&gt;GCP&lt;/a&gt;, &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt;, &lt;a href="https://azure.microsoft.com/en-in/" rel="noopener noreferrer"&gt;Azure&lt;/a&gt;, etc. Every major company is hiring cloud developers. &lt;/p&gt;

&lt;p&gt;In this article, I'll be covering some basic understanding of cloud computing, how it is changing the tech industry, and why every developer should (must) be skilled with it.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1473308822086-710304d7d30c%3Fixlib%3Drb-1.2.1%26ixid%3DMXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%253D%26auto%3Dformat%26fit%3Dcrop%26w%3D1489%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1473308822086-710304d7d30c%3Fixlib%3Drb-1.2.1%26ixid%3DMXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%253D%26auto%3Dformat%26fit%3Dcrop%26w%3D1489%26q%3D80" alt="LightBulb"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  If you need light in your room, what are you going to do?
&lt;/h2&gt;

&lt;p&gt;Simple, just switch on the lights. In the worst case, you're going to take an electricity connection, install the bulb and never worry about it again. What you're not going to do is, produce electricity, pass it from different stations to your room, manufacture a bulb, etc.&lt;/p&gt;

&lt;p&gt;We don't care about the production, delivery, or maintenance of the power, we just pay for those services and let the service provider handle this professionally. This is something that cloud computing does for software developers.&lt;/p&gt;



&lt;h1&gt;
  
  
  Cloud Computing
&lt;/h1&gt;

&lt;p&gt;The concept of cloud computing is very much similar to the example we discussed earlier. Cloud computing is the on-demand availability of computer system resources, especially data storage and computing power, without direct active management by the user.&lt;/p&gt;

&lt;p&gt;Computing services are delivered through the internet, instead of maintaining CPUs and storage in your data center, you rent them for the time that you need, and maintenance is on the cloud service providers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1586772002130-b0f3daa6288b%3Fixlib%3Drb-1.2.1%26ixid%3DMXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%253D%26auto%3Dformat%26fit%3Dcrop%26w%3D1350%26q%3D80" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1586772002130-b0f3daa6288b%3Fixlib%3Drb-1.2.1%26ixid%3DMXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%253D%26auto%3Dformat%26fit%3Dcrop%26w%3D1350%26q%3D80" alt="servers"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h1&gt;
  
  
  Benefits of Cloud Computing
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Global reach&lt;/strong&gt;: Available in numerous locations, which gives you fast online reach to everyone in the world.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Add/Remove extra CPUs, Memory, Server, etc. as per your need, whenever you want.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elasticity&lt;/strong&gt;: Service providers automatically use extra resources when needed, or remove extra resources when not needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcloudkul.com%2Fblog%2Fwp-content%2Fuploads%2F2015%2F11%2Fgraph.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcloudkul.com%2Fblog%2Fwp-content%2Fuploads%2F2015%2F11%2Fgraph.jpg" alt="CloudKul"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pay as you use&lt;/strong&gt;: Pay only for what you use, and how long you use, with zero maintenance cost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Updates&lt;/strong&gt;: Since everything is maintained by a cloud service provider, so if any new tech is available, the service provider gets it for you. If anything fails, the service provider fixes it for you.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsystechinfo.com%2Fwp-content%2Fuploads%2F2018%2F06%2Fchart-compressor.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsystechinfo.com%2Fwp-content%2Fuploads%2F2018%2F06%2Fchart-compressor.jpg" alt="Systechinfo"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h1&gt;
  
  
  Types of Cloud Computing
&lt;/h1&gt;

&lt;p&gt;Cloud computing types are based on service deployment models which let you choose the level of control over your information and types of services you need to provide. These are generally in three types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Iaas:&lt;/strong&gt; Infrastructure as a Service, requires the most user management of all the cloud services. The user is responsible for managing the operating systems, data, and applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paas:&lt;/strong&gt; Platform as a Service, requires less user management. The cloud provider manages the operating systems, and the user is responsible for the applications and data they run and store.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Saas:&lt;/strong&gt; Software as a Service, requires the least amount of management. The cloud provider is responsible for managing everything, and the end-user just uses the software.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is an informative image that will help you to visualize difference between these three forms of cloud services, with your level of control.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1191%2F0%2A41Hh9XgGbfvB5JQG.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1191%2F0%2A41Hh9XgGbfvB5JQG.png" alt="Micro.medium.com"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are some of the basic examples of different cloud service providers with their different types of cloud services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2slcw3kip6qmk.cloudfront.net%2Fmarketing%2Fblog%2F2020Q2%2Fmicrosoft-teams-best-practices%2FIaaS-PaaS-SaaS-slanted-control.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2slcw3kip6qmk.cloudfront.net%2Fmarketing%2Fblog%2F2020Q2%2Fmicrosoft-teams-best-practices%2FIaaS-PaaS-SaaS-slanted-control.png" alt="LucidChart"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h1&gt;
  
  
  Future of Cloud Computing
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you are a software developer or aspired to be one, you surely would have understood how significant these cloud services are, for your career. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As per 2020, Annual cloud infrastructure has managed to produce revenue of &lt;strong&gt;$111 Billion&lt;/strong&gt;, where AWS itself contributes to 33% followed by Azure at 18% and GCP at 9%.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;According to an &lt;a href="https://www.roberthalf.com/blog/salaries-and-skills/the-13-highest-paying-it-jobs-in-2019" rel="noopener noreferrer"&gt;article&lt;/a&gt; at Robert Half, DevOps and Cloud development is one of the highest-paid IT jobs of 2021. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This was an introductory article on Cloud Computing. If you find this useful, follow me for series of articles on cloud services and software development.&lt;/p&gt;

&lt;p&gt;Find me on different platforms: &lt;a href="https://linkedin.com/in/anubhavitis" rel="noopener noreferrer"&gt; LinkedIn &lt;/a&gt;|&lt;a href="https://twitter.com/anubhavitis" rel="noopener noreferrer"&gt; Twitter &lt;/a&gt;|&lt;a href="https://github.com/anubhavitis" rel="noopener noreferrer"&gt; GitHub &lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Happy Coding&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>devjournal</category>
      <category>cloudskills</category>
    </item>
    <item>
      <title>What exactly is API?</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Wed, 13 Jan 2021 05:15:48 +0000</pubDate>
      <link>https://dev.to/anubhavitis/apis-for-beginners-34ie</link>
      <guid>https://dev.to/anubhavitis/apis-for-beginners-34ie</guid>
      <description>&lt;p&gt;APIs are one of the most significant parts of software development, every developer must be well versed with them. I have been working as a golang backend engineer for about a year now, have constructed plenty of APIs for various projects.&lt;/p&gt;

&lt;p&gt;Recently, I came through an interesting session on APIs at &lt;a href="https://www.crio.do/" rel="noopener noreferrer"&gt;Crio: Learn by Doing&lt;/a&gt; and am sharing its notes with DevCommunity. Let's get it started!&lt;/p&gt;



&lt;h1&gt;
  
  
  What is an API?
&lt;/h1&gt;

&lt;p&gt;API stands for &lt;strong&gt;Application Programming Interface&lt;/strong&gt;, is a set of functions that allows applications to access data and interact with external software components, operating systems, or microservices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104198884-ca1bcf80-544c-11eb-94d1-22548426ad4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104198884-ca1bcf80-544c-11eb-94d1-22548426ad4d.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In simple words, an API is like a waiter in a restaurant. You don’t go into a cafe and walk straight into the kitchen to tell the chef what you wanna eat. The waiter does that for you, and that’s exactly what an API is - with the client being you, the customer, and any resource that can send data, being the chef.&lt;/p&gt;



&lt;h1&gt;
  
  
  Benefits of using APIs
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: While using an API, client-side and server-side application works independently, and they communicate through API, so if anyone tries to hack into the client-side app, the server stays unaffected and secured.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: APIs allow content to be embedded from any site or application more easily. For e.g. an API written in GO can be used by Node.js/Django.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficiency&lt;/strong&gt;: When access is provided to an API, the content generated can be published automatically and is available for every channel. It allows it to be shared and distributed more easily.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Innovation&lt;/strong&gt;: With an API, an application layer can be created which can be used to distribute information and services to new audiences which can be personalized to create custom user experiences.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h1&gt;
  
  
  REST API
&lt;/h1&gt;

&lt;p&gt;REST stands for &lt;strong&gt;Representational State Transfer&lt;/strong&gt;, it is the most popular web API architecture. They follow a client-server model where one software program sends a request and the other response with some data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104197485-16fea680-544b-11eb-8aaa-d2bd74bf207a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104197485-16fea680-544b-11eb-8aaa-d2bd74bf207a.png"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;These APIs generally receive a response in &lt;strong&gt;JSON&lt;/strong&gt; format, it's a standard format that is easily "understandable" by applications and can be handled well in most languages. For e.g. Ruby app can easily use JSON response from Java sever.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104204412-431e2580-5453-11eb-9827-29a65aa6ff82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104204412-431e2580-5453-11eb-9827-29a65aa6ff82.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;JSON stand for &lt;strong&gt;JavaScript Object Notation&lt;/strong&gt;, it is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. Read more about it &lt;a href="https://www.json.org/json-en.html" rel="noopener noreferrer"&gt; here &lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There are several other forms of APIs (SOAP, XML-RPC, JSON-RPC, etc.), we'll limit our discussion to REST only. For more info, &lt;a href="https://stoplight.io/api-types/" rel="noopener noreferrer"&gt; Click here&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h1&gt;
  
  
  REST != HTTP
&lt;/h1&gt;

&lt;p&gt;A lot of people prefer to compare HTTP with REST. REST and HTTP are not same.&lt;/p&gt;

&lt;p&gt;In the REST architectural style, data and functionality are considered resources and are accessed using Uniform Resource Identifiers (URIs). The resources are acted upon by using a set of simple, well-defined operations. The clients and servers exchange representations of resources by using a standardized interface and protocol – typically HTTP.&lt;/p&gt;

&lt;p&gt;Resources are decoupled from their representation so that their content can be accessed in a variety of formats, such as HTML, XML, plain text, PDF, JPEG, JSON, and others. Metadata about the resource is available and used, for example, to control caching, detect transmission errors, negotiate the appropriate representation format, and perform authentication or access control. And most importantly, every interaction with a resource is stateless.&lt;/p&gt;



&lt;h1&gt;
  
  
  API Request &amp;amp; Response
&lt;/h1&gt;

&lt;p&gt;REST API request generally consists of Method, Body(auth and other parameters), and Host. Here is a sample request that I have been working on recently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104276950-e9a60d00-54cb-11eb-84d5-efc4b4202e2e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104276950-e9a60d00-54cb-11eb-84d5-efc4b4202e2e.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As stated earlier, REST API responses generally in JSON format. Here is a sample response to the above API requests. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: To get a similar response from the previous request, you'll have to add an API key: and API secret.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104276947-e874e000-54cb-11eb-8a62-d5f0614f236e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104276947-e874e000-54cb-11eb-8a62-d5f0614f236e.png"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;For more information, goto &lt;a href="https://restfulapi.net/" rel="noopener noreferrer"&gt; reastfulapi.net &lt;/a&gt;&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;I hope you have a good understanding of APIs now. If this article helped you, support it, and share it among your peers.&lt;/p&gt;

&lt;p&gt;Connect with me: &lt;a href="https://linkedin.com/in/anubhavitis" rel="noopener noreferrer"&gt; LinkedIn &lt;/a&gt;|&lt;a href="https://twitter.com/anubhavitis" rel="noopener noreferrer"&gt; Twitter &lt;/a&gt;|&lt;a href="https://github.com/anubhavitis" rel="noopener noreferrer"&gt; GitHub &lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Happy Coding!
&lt;/h4&gt;

</description>
      <category>webdev</category>
      <category>database</category>
      <category>computerscience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>HTTP Fundamentals</title>
      <dc:creator>Anubhav Singhal </dc:creator>
      <pubDate>Mon, 11 Jan 2021 07:46:13 +0000</pubDate>
      <link>https://dev.to/anubhavitis/http-fundamentals-5831</link>
      <guid>https://dev.to/anubhavitis/http-fundamentals-5831</guid>
      <description>&lt;p&gt;I have been working as a golang backend engineer for about a year now, have been playing with HTTP response and requests on daily basis. Understanding HTTP is the core of application development, and every developer should be crystal clear with them.&lt;/p&gt;

&lt;p&gt;Recently, I came through an interesting session on HTTP at &lt;a href="https://www.crio.do/" rel="noopener noreferrer"&gt;Crio: Learn by Doing&lt;/a&gt; and am sharing its notes with DevCommunity. Let's get it started!&lt;/p&gt;



&lt;h1&gt;
  
  
  What is HTTP?
&lt;/h1&gt;

&lt;p&gt;HTTP stands for &lt;strong&gt;HyperText Transfer Protocol&lt;/strong&gt;. It is, like the name suggests, a set of rules for querying the web.&lt;/p&gt;

&lt;p&gt;As we humans communicate with each other through a common language following a set of grammatical rules. On the web, clients and servers communicate through requests and responses, that follow a set of rules called HTTP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104128631-ca559580-538e-11eb-8c01-ea90185db2eb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104128631-ca559580-538e-11eb-8c01-ea90185db2eb.png"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The client makes an HTTP request that contains methods, headers, body, etc., and when the server receives that request, it responds to the client with an HTTP response that contains status, headers, body, etc.&lt;/p&gt;



&lt;h1&gt;
  
  
  HTTP Methods
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104128717-30dab380-538f-11eb-8a88-832f746f164c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104128717-30dab380-538f-11eb-8a88-832f746f164c.png"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Like our language has different kinds of statements(Interrogative, Informative, Imperative, etc.), there are several types of HTTP methods of clients requests with specific roles. Some of the most important methods are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GET&lt;/li&gt;
&lt;li&gt;POST&lt;/li&gt;
&lt;li&gt;PUT&lt;/li&gt;
&lt;li&gt;DELETE&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GET
&lt;/h3&gt;

&lt;p&gt;GET methods are the HTTP requests which a client makes to a server for getting resources from the server. For e.g., whenever you open Google in your browser, it makes a GET request to google's server.&lt;/p&gt;

&lt;h3&gt;
  
  
  POST
&lt;/h3&gt;

&lt;p&gt;POST methods are the HTTP requests which a client makes for sending new data to a server. For e.g. when you add a tweet, your application makes a POST request to twitter's server.&lt;/p&gt;

&lt;h3&gt;
  
  
  PUT
&lt;/h3&gt;

&lt;p&gt;PUT methods are almost like POST methods, instead of adding information to a server, they are intended to update existing information on the server. For e.g. when you change your profile pic on Twitter, your application makes a PUT request to the server.&lt;/p&gt;

&lt;h3&gt;
  
  
  DELETE
&lt;/h3&gt;

&lt;p&gt;DELETE methods are the HTTP requests which a client makes to delete the existing data from the server. For e.g. whenever you delete a tweet on Twitter, your application makes a DELETE request to the server.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There are more HTTP methods, but we'll limit our discussion till here only. Click &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods" rel="noopener noreferrer"&gt; here &lt;/a&gt; to learn more.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h1&gt;
  
  
  HTTP status codes
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104128716-2fa98680-538f-11eb-9bb6-2ee610f46f03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F26124625%2F104128716-2fa98680-538f-11eb-9bb6-2ee610f46f03.png"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;HTTP Status codes are part of the HTTP Response. It helps the client understand what happened to the request. It's a 3 digit numeric code(like 404, 502), which has an appropriate definition in HTTP bias, a reason phrase is also returned along with it. For eg. 404: Page not found!&lt;/p&gt;

&lt;p&gt;There are 5 types of HTTP status codes based on the starting digit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1xx: Information Responses&lt;/li&gt;
&lt;li&gt;2xx: Successful Responses&lt;/li&gt;
&lt;li&gt;3xx: Redirect Responses&lt;/li&gt;
&lt;li&gt;4xx: Client Errors&lt;/li&gt;
&lt;li&gt;5xx: Server Errors&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;check more about various status codes &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status" rel="noopener noreferrer"&gt; here &lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;



&lt;h1&gt;
  
  
  How to make an HTTP request?
&lt;/h1&gt;

&lt;p&gt;Instead of your browser, there are several other ways to make HTTP requests and accept responses from servers, these are incredibly useful for developers to test their applications before deploying. We'll look into 2 most popular way of making HTTP requests:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using CLI&lt;/li&gt;
&lt;li&gt;Using GUI&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Making HTTP requests with CLI
&lt;/h3&gt;

&lt;p&gt;cURL is like a web-browser, but for the command line. Use &lt;a href="https://curl.haxx.se/download.html" rel="noopener noreferrer"&gt; this link&lt;/a&gt; to download and install cURL in your machine. You can follow &lt;a href="https://www.geeksforgeeks.org/curl-command-in-linux-with-examples/" rel="noopener noreferrer"&gt; this tutorial &lt;/a&gt; to understand how to use cURL commands to make HTTP requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making HTTP requests with GUI
&lt;/h3&gt;

&lt;p&gt;There are various software that are available for making HTTP requests, either of them can be used. Postman is one of the most famous apps for it, you can install it on your machine using &lt;a href="https://www.postman.com/downloads/" rel="noopener noreferrer"&gt; this link&lt;/a&gt;.&lt;/p&gt;




&lt;br&gt;&lt;br&gt;
I hope you have a good understanding of HTTP basics now. If this article helped you, support it, and share it among your peers.&lt;br&gt;&lt;br&gt;
Connect with me: &lt;a href="https://linkedin.com/in/anubhavitis" rel="noopener noreferrer"&gt; LinkedIn &lt;/a&gt;|&lt;a href="https://twitter.com/anubhavitis" rel="noopener noreferrer"&gt; Twitter &lt;/a&gt;|&lt;a href="https://github.com/anubhavitis" rel="noopener noreferrer"&gt; GitHub &lt;/a&gt;

&lt;h4&gt;
  
  
  Happy Coding!
&lt;/h4&gt;

</description>
      <category>html</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
