<?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: Arun K C</title>
    <description>The latest articles on DEV Community by Arun K C (@arunkc).</description>
    <link>https://dev.to/arunkc</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%2F620242%2Fbb2f7337-1ad9-4772-93fa-699a25f933b3.jpeg</url>
      <title>DEV Community: Arun K C</title>
      <link>https://dev.to/arunkc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arunkc"/>
    <language>en</language>
    <item>
      <title>A Brief Introduction to Blockchain</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Sun, 13 Feb 2022 15:47:42 +0000</pubDate>
      <link>https://dev.to/arunkc/a-brief-introduction-to-blockchain-4h37</link>
      <guid>https://dev.to/arunkc/a-brief-introduction-to-blockchain-4h37</guid>
      <description>&lt;p&gt;Unless you have been living under a rock, you might have heard about &lt;em&gt;"Blockchain"&lt;/em&gt;. It's incredibly popular nowadays and the whole tech community is excited about it. Some are crazed over the concept, some ambivalent, and some oppose. Nevertheless to say the concept itself is revolutionary if it can be fast and efficient.&lt;/p&gt;

&lt;p&gt;Personally, I believe this is a groundbreaking technology and it can bring wonders to the Web we know as of now. It's still in its infancy stage though, anyway, we gotta start somewhere!&lt;/p&gt;

&lt;p&gt;Let's get into the article now.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it all started
&lt;/h2&gt;

&lt;p&gt;Surprisingly a blockchain-like idea was proposed long back in 1982 by a cryptographer named &lt;a href="https://en.wikipedia.org/wiki/David_Chaum"&gt;David Chaum&lt;/a&gt; in his dissertation "Computer Systems Established, Maintained, and Trusted by Mutually Suspicious Groups."&lt;/p&gt;

&lt;p&gt;Further work on a cryptographically secured chain of blocks was described in 1991 by Stuart Haber and W. Scott Stornetta. They wanted to implement a system wherein document timestamps could not be tampered with.&lt;/p&gt;

&lt;p&gt;The technology actually came into life when the first decentralized blockchain was conceptualized by a person (or group of people) known as Satoshi Nakamoto in 2008. It was non-other than the most famous cryptocurrency that we are all familiar with, Bitcoin. Slowly after that different chains were formed such as Ethereum, Polygon, Avalanche, etc.&lt;/p&gt;

&lt;p&gt;The use of a blockchain confirms that each unit of value was transferred only once, and the ingenious mechanisms put forth by Satoshi Nakamoto solved the long-standing decentralized &lt;a href="https://en.wikipedia.org/wiki/Double-spending"&gt;double-spending&lt;/a&gt; problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a blockchain?
&lt;/h2&gt;

&lt;p&gt;A blockchain is a distributed decentralized immutable ledger or database open to anyone. As the name indicates, the blockchain is a chain of blocks that contains information. It's a growing list of records, called blocks, that are linked together using cryptography. Each block contains a cryptographic hash of the previous data, a timestamp, and the information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ys0ylY2e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644762399838/zqLzBu_ey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ys0ylY2e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644762399838/zqLzBu_ey.png" alt="decentralized ledger" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The timestamp proves that the data existed when the block was published in order to get into its hash. As each block contains information about its previous block, they form a chain, with each additional block reinforcing the ones before it. Therefore, blockchains are resistant to modification of their data because once recorded, the data in any given block cannot be altered retroactively without altering all subsequent blocks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does a blockchain works?
&lt;/h2&gt;

&lt;p&gt;Imagine three friends Alice, Bob, and Jack meet up for dinner. After their dinner's done Jack pays the bill. And all of them decide to split the expense amongst each other. Let's assume both Alice and Bob have a balance of 3 bitcoins each and Jack have 7 bitcoins.&lt;/p&gt;

&lt;p&gt;First Alice sends 2 bitcoins to Jack. A record is created in the form of a block and the transaction details between them are permanently inscribed within the block. This transaction should be verified by the nodes through mathematical calculations and determines whether they are valid based on agreed-upon rules.&lt;/p&gt;

&lt;p&gt;A number of nodes(miners) will be competing with each other to verify the transaction. Once consensus has been achieved by the fastest node, the transaction is considered verified and the block is added to the blockchain. And thus Jack receives the 2 bitcoins. The same process is done when Bob sends 2 bitcoins to Jack. These blocks are chained together thus forming a ledger.&lt;/p&gt;

&lt;p&gt;So the steps are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New transactions are broadcast to all nodes.&lt;/li&gt;
&lt;li&gt;Each node collects new transactions into a block.&lt;/li&gt;
&lt;li&gt;Each node works on solving difficult consensus methods for its block.&lt;/li&gt;
&lt;li&gt;When a node solves the consensus method, it broadcasts the block to all nodes.&lt;/li&gt;
&lt;li&gt;Nodes accept the block only if all transactions in it are valid and not already spent.&lt;/li&gt;
&lt;li&gt;Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CL9toZ-r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644762446233/3Ueikh5tv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CL9toZ-r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644762446233/3Ueikh5tv.png" alt="bitcoin transaction" width="800" height="1251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Blocks
&lt;/h3&gt;

&lt;p&gt;A block in a blockchain consists of two main parts, the block header, and the block body&lt;/p&gt;

&lt;p&gt;The block header consists of&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hash of the previous block&lt;/li&gt;
&lt;li&gt;Root hash of the Merkle tree&lt;/li&gt;
&lt;li&gt;Timestamp&lt;/li&gt;
&lt;li&gt;The Nonce: It is the variable incremented by the proof of work. In this way, the miner guesses a valid hash, a hash that is smaller than the target.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The block body contains all transactions that are confirmed with the block.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a1edIXtm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644762576211/RaqVPxIy5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a1edIXtm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644762576211/RaqVPxIy5.png" alt="block structure" width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What is a Merkle tree?
&lt;/h4&gt;

&lt;p&gt;The Merkle Tree takes its name from the mathematician Ralph Merkle. The discovery was that much information can be represented in a single hash. For this, the data itself is first hashed. Then the hashes are hashed again and merged. Finally, the Merkle Tree is merged into a single hash. This last hash is also called the root hash / Merkle root, the root of the tree. It represents all the information of its “leaves” (individual transactions) and “branches” (hashes of the leaves) in a relatively short string.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2RQkv-CY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644762641091/tQt6KWgAA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2RQkv-CY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644762641091/tQt6KWgAA.png" alt="merkle tree" width="447" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Merkle Root summarizes all of the data in the related transactions and is stored in the block header (a block header is the unique identity of a particular block on a blockchain and is hashed by miners for rewards). It maintains the integrity of the data. If a single detail in any of the transactions or the order of the transactions changes, so does the Merkle Root. They are extremely robust and are at the heart of several peer-to-peer networks such as BitTorrent, Git, Bitcoin, Ethereum, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nodes
&lt;/h3&gt;

&lt;p&gt;A blockchain network is managed autonomously through a peer-to-peer distributed network of computer nodes. Nodes are nothing but computers that are designated to keep a copy of the distributed ledger and serve as communication points that execute various essential network functions.&lt;/p&gt;

&lt;p&gt;A blockchain node’s main purpose is to verify the validity of each succeeding batch of network transactions, called blocks. Each node has a unique identifier attached to its device that allows it to be distinguished from others in the network.&lt;/p&gt;

&lt;h3&gt;
  
  
  State management
&lt;/h3&gt;

&lt;p&gt;As you know everything has a starting point. The point where it originated. Likewise, blockchain also has an initial state called Genesis state. Bitcoins genesis state happened in 2009 when the network was launched publically. And for Ethereum, it was in 2015. Every transaction on a blockchain modifies the global state that is replicated across all nodes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x4vU_QdP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644756097694/TQwT5_WHh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x4vU_QdP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1644756097694/TQwT5_WHh.png" alt="genesis state" width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you know blocks are chained together in a cryptographically verifiable way so they are historically traceable. The current state of a blockchain can be recalculated at any point in time by starting from the genesis block and transitioning the state according to each block's information up until now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consensus methods
&lt;/h3&gt;

&lt;p&gt;Naturally, the first question that pops into your mind might be "What the heck is consensus?". Let me explain. Consensus is nothing but mutual agreement. Let's take an example. You are going out for a film with your friends. If you propose a film and all of your friends agree, then consensus is achieved.&lt;/p&gt;

&lt;p&gt;In regards to blockchain, the process is formalized, and reaching consensus means that at least 51% of the nodes on the network agree on the next global state of the network.&lt;/p&gt;

&lt;p&gt;Currently, there are two main consensus methods/protocols&lt;/p&gt;

&lt;h4&gt;
  
  
  Proof-of-Work (PoW)
&lt;/h4&gt;

&lt;p&gt;Both Bitcoin and Ethereum currently use proof-of-work (PoW) consensus protocol.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Block creation:&lt;/strong&gt; Proof-of-work is done by miners, who compete to create new blocks full of processed transactions. The winner shares the new block with the rest of the network and earns some freshly minted ETH. The race is won by whosever computer can solve a math puzzle fastest – this produces the cryptographic link between the current block and the block that went before. Solving this puzzle is the work in "proof-of-work"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security:&lt;/strong&gt; The network is kept secure by the fact that you'd need 51% of the network's computing power to defraud the chain. This would require such huge investments in equipment and energy. You're likely to spend more than you'd gain!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Proof-of-Stake (PoS)
&lt;/h4&gt;

&lt;p&gt;Ethereum is planning to switch to PoS soon. There are many other famous chains that are already using PoS such as Polygon, Avalanche, Polkadot, Solana, Tezos, etc.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Block creation:&lt;/strong&gt; Proof-of-stake is done by validators who have staked ETH to participate in the system. A validator is chosen at random to create new blocks, share them with the network and earn rewards. Instead of needing to do intense computational work, you simply need to have staked your ETH in the network. This is what incentivizes healthy network behavior.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security:&lt;/strong&gt; A proof-of-stake system is kept secure by the fact that you'd need 51% of the total staked ETH to defraud the chain. And that your stake is slashed for malicious behavior.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Decentralization
&lt;/h3&gt;

&lt;p&gt;By storing data in a peer-to-peer network of nodes, the blockchain is a decentralized network. This has significant benefits over the traditional approach of storing data in a centralized manner. There are significant examples of problems with centralization, some of them are :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data breaches in centralized systems expose a lot of data&lt;/li&gt;
&lt;li&gt;Centralized authorities can censor and shut down speech&lt;/li&gt;
&lt;li&gt;Reliance on a central authority means upstream problems affect downstream consumers (e.g. AWS going down means most of the internet goes down with it)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the other hand, decentralization brings about the opposite benefits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No censorship as there is no single authority or middleman that can censor you&lt;/li&gt;
&lt;li&gt;No downtime as the overall network is running across 1000's of nodes across the globe&lt;/li&gt;
&lt;li&gt;Highly attack resistant making it infeasible to manipulate or destroy data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Peer-to-peer network
&lt;/h3&gt;

&lt;p&gt;The underlying blockchain technology leverages the power of Peer-to-Peer (P2P) networks and provides a shared and trusted ledger of transactions. Peer-to-peer networks are defined as the group of devices that are connected together to create a network that is often known as peer to peer network(P2P) network.&lt;/p&gt;

&lt;p&gt;The network, once formed, can be used to share files and store them as well. In any of the peer-to-peer networks, all the nodes generally have equal power and can use the same tasks. So essentially this network is what blockchain is using. So yea, it's not a new concept and most of you might have already used it unknowingly. Don't be surprised, it's BitTorrent.(&lt;em&gt;Piracy!!! XD How many times have you used torrent?&lt;/em&gt; ) If you paid attention till this point, then it's not surprising to you because I already pointed it out in the Merkle tree section XD&lt;/p&gt;

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

&lt;p&gt;If you read till now, well done!! This really was a long article, if you sticked together with me till this point then you are awesome! Seems you are really interested in this technology.&lt;/p&gt;

&lt;p&gt;Now as this article came to an end you have a basic understanding of what a blockchain is, how it works, and it's core components.&lt;/p&gt;

&lt;p&gt;Let's summarize :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A blockchain is a distributed decentralized immutable public ledger or database&lt;/li&gt;
&lt;li&gt;It's a chain of blocks that contains information&lt;/li&gt;
&lt;li&gt;A block contains two main parts, a header, and a body&lt;/li&gt;
&lt;li&gt;Blockchain utilizes the Merkle tree as its data structure and it's a fundamental part of the blockchain&lt;/li&gt;
&lt;li&gt;Nodes are the verifiers of the blockchain and each of them has a unique identifier that fundamentally distinguishes them from other devices in the network&lt;/li&gt;
&lt;li&gt;In a blockchain, we are able to recalculate the current state with the information stored up in each block&lt;/li&gt;
&lt;li&gt;Consensus methods are used to achieve mutual agreement - Proof of Work and Proof of Stake are the most famous ones&lt;/li&gt;
&lt;li&gt;Blockchain is a peer to peer decentralized network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it for today folks!! Thanks for reading this long article. I hope it was a great read for you and you learned one or two from it. If you have any doubts or feedback shoot them away in the comments.&lt;/p&gt;

&lt;p&gt;If you found this article helpful, please like and hit the follow button on the top right corner. Subscribe to my newsletter if you don't wanna miss any content!&lt;/p&gt;

&lt;p&gt;Let's connect on &lt;a href="https://twitter.com/arunkc97"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Evolution of Web</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Fri, 04 Feb 2022 04:07:56 +0000</pubDate>
      <link>https://dev.to/arunkc/evolution-of-web-ja6</link>
      <guid>https://dev.to/arunkc/evolution-of-web-ja6</guid>
      <description>&lt;p&gt;Throughout the history of mankind, the Internet is without a say one of the best inventions and revolutions. Thankfully we have been in the right generation to see the drastic changes Internet have brought to our life.&lt;/p&gt;

&lt;p&gt;We have been accustomed to the Web so much so that we can't even think of a day without it. Nevertheless to say it's the best thing that ever happened to us. We are walking around with the world's largest library in our pockets (&lt;em&gt;even though most of us don't see that point XD&lt;/em&gt;).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Information is just a click away!!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This Web that we are so much into has gone through an intriguing evolutionary phase. Let's discuss these phases in today's article. Web from its inception to what we know it as now is an amazing journey.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DGMcqtCL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643806999025/35d4FBQBd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DGMcqtCL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643806999025/35d4FBQBd.png" alt="1_cddhiPgevwCMcoqbqy_dhQ.png" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inception - Where it all began
&lt;/h2&gt;

&lt;p&gt;In 1962 J. C. R. Licklider proposed the idea of a network of computers that could talk to one another. He is one of the first to foresee modern-style interactive computing (&lt;em&gt;such a visionary!!&lt;/em&gt;). He has been called "computing's Johnny Appleseed", for planting the seeds of computing in the digital age.&lt;/p&gt;

&lt;p&gt;In 1969 the first-ever message was sent from one computer to another over the ARPANET. Advanced Research Projects Agency Network (ARPANET), was the government's computer network at the time. Did you know that the first-ever message sent was "LOGIN"? And did you know that only the first two letters, "LO", of the message were successfully received by the other system? (&lt;em&gt;yea, sadly it crashed in between&lt;/em&gt;) It sounds funny now, but you gotta start somewhere XD.&lt;/p&gt;

&lt;p&gt;In 1971 Ray Tomlinson built the first-ever program to send mail back and forth between the users of ARPANET. This was eventually called Electronic mail or email for short. The &lt;code&gt;@&lt;/code&gt; symbol was used to tell a person's name and hostname apart. During the same year, Vint Cerf invented a way to let computers communicate with each other in a virtual environment. This invention was called Transmission Control Protocol or TCP for short. Shortly after that Internet Protocol (IP) was also introduced.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tKwxCFsn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643864319066/SfL23-XUS.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tKwxCFsn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643864319066/SfL23-XUS.jpeg" alt="picture showing the history of the internet" width="768" height="975"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Web 1.0
&lt;/h2&gt;

&lt;p&gt;It was back in the 1990s when it all began. In 1991 Tim Berners-Lee invented the World Wide Web (WWW). Yes!! It's the fucking Web. This changed everything. Internet was not just for scientists anymore. It was accessible for anyone. Anyone with an internet connection could access an abundance of information.&lt;/p&gt;

&lt;p&gt;This is the first phase of the Web usually referred to as &lt;strong&gt;read-only web&lt;/strong&gt;. Back then it was purely static content and the role of the user was limited to reading. There was no way for the user to communicate back to the content creators. No logins, no interaction with posts, no likes, no comments, nothing. Did you know at this period content creators could be counted on hand? The majority of the Internet users were consumers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Web 1.0 truly lifted the geographic restrictions on information sharing&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Web 1.0 can be characterized as a &lt;strong&gt;Content Delivery Network&lt;/strong&gt; (CDN) that allowed information to be displayed on websites. Web 1.0 allowed people to search for information and consume it. There was no interaction with or between users, and there was no user-generated content (&lt;em&gt;such peaceful times!&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cp0Yoezw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643813356539/6fSSYa0gS.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cp0Yoezw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643813356539/6fSSYa0gS.jpeg" alt="picture of the first-ever website" width="800" height="498"&gt;&lt;/a&gt;&lt;em&gt;This is what the first-ever website looked like.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Key features of the Web 1.0 period:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everything was static pages.&lt;/li&gt;
&lt;li&gt;Site content is served from the server file system.&lt;/li&gt;
&lt;li&gt;Pages were built using Server Side Includes or Common Gateway Interface (CGI).&lt;/li&gt;
&lt;li&gt;Frames and tables are used to position and align elements on a page (&lt;em&gt;surprised right?&lt;/em&gt; )&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Web 2.0
&lt;/h2&gt;

&lt;p&gt;Web 2.0 is the second phase in the development of the Internet. It was called as &lt;strong&gt;read-write web&lt;/strong&gt; and it was the stage when websites grew in terms of user interaction. Finally, the internet became a place where users could actually share their views, opinions, thoughts, and experiences. The users started to be the content creators and we no longer could count them with one hand.&lt;/p&gt;

&lt;p&gt;Web 2.0 allows users to interact and collaborate with each other through social media dialogue as creators of user-generated content. During Web 2.0, terms like blogs, social media, and video streaming gained popularity. It opened the doors for podcasts, blogging, tagging, curating with RSS, image sharing, video sharing, social networking, and whatnot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JrCIKzHz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643818079506/sZbdASnT25.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JrCIKzHz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643818079506/sZbdASnT25.jpeg" alt="evolution of web" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All the popular sites that you are familiar with, this is where they were born. Youtube, Google, Facebook, Wiki, Twitter, etc. The web technologies like HTML5, CSS3, and Javascript frameworks like ReactJs, AngularJs, VueJs, etc., enabled startups to innovate new ideas which enable users to contribute more to this Social Web. Web 2.0 brought a fundamental shift where people were allowed to share their perspectives, opinions, thoughts, and experiences via several online tools and platforms. It brought us the concept - ' &lt;strong&gt;Web as Platform&lt;/strong&gt;', where software applications are built upon the Web.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RwGNjLFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643818277809/Ykx3vHoH-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RwGNjLFO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643818277809/Ykx3vHoH-.png" alt="picture depicting the data created every minute" width="800" height="1376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every day, we create roughly 2.5 quintillion bytes of data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Web 2.0 has revolutionized the perception of the Internet in a short time. A prime example of the evolution of Web 2.0 is YouTube, which has relied and still relies on user content. It was the age of targeted advertising and lack of privacy for its users. To be fair, we willingly gave up our privacy for using some cool apps like Facebook and Twitter. Remember that check box you are checking every time creating an account? That's the privacy policies, I bet you haven't read any of that till now XD.&lt;/p&gt;

&lt;h2&gt;
  
  
  Web 3.0
&lt;/h2&gt;

&lt;p&gt;Web 3.0 is the third phase of the Internet also termed as &lt;strong&gt;executable web&lt;/strong&gt; or &lt;strong&gt;read- write-execute web&lt;/strong&gt;. It is an idea for a new iteration of the World Wide Web-based on the blockchain, which incorporates concepts including decentralization and token-based economics.&lt;/p&gt;

&lt;p&gt;The term "Web3" was coined by Polkadot founder and Ethereum co-founder Gavin Wood in 2014, referring to a "decentralized online ecosystem based on blockchain." In 2021, the idea of Web3 gained popularity. Particular interest spiked toward the end of 2021, largely due to interest from cryptocurrency enthusiasts and investments from high-profile technologists and companies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yyNV4Sl1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643825453572/s6QUHDOzu.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yyNV4Sl1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643825453572/s6QUHDOzu.jpeg" alt="a meme about web3" width="800" height="794"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The rise of technologies such as distributed ledgers and blockchain storage will enable data decentralization and the creation of a transparent and secure environment, overthrowing Web 2.0's centralization, surveillance, and exploitative advertising. Decentralized infrastructure and application platforms will take the place of centralized tech giants, allowing individuals to rightfully own their data.&lt;/p&gt;

&lt;p&gt;Yes, you heard that right, you will actually own your data!! Did you really think you owned your data till now? XD You were giving it away for free lol. One of the most significant implications of decentralization and blockchain technology is in the area of data ownership and compensation. As we move towards a mature and stable Web 3.0, the blockchain protocols will allow us to connect to an internet where we can own and be properly compensated for our time and data, outshining an exploitative and unjust web in which giant, centralized entities own and profit from it.&lt;/p&gt;

&lt;p&gt;Web 3.0 is already on move, don't misunderstand it's still in its early stages. There are a lot of entities coming up that live in this new decentralized web. Let's take &lt;a href="https://odysee.com/"&gt;Odysee&lt;/a&gt; for example. It is a blockchain alternative to YouTube where videos can be posted and the creators can get library tokens, which is basically a reward for enticing users to watch their videos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BFQlSdnp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643824832205/_WMNbcosX.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BFQlSdnp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643824832205/_WMNbcosX.jpeg" alt="web2 alternatives in web3" width="800" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Web 3.0, companies will be run by a decentralized group called &lt;strong&gt;DAO&lt;/strong&gt; which stands for &lt;strong&gt;Decentralized Autonomous Organization&lt;/strong&gt;. About DAO we can discuss that in a later article. However, in DAO's there is no central authority like CEOs or Presidents. Those with the most tokens get to vote on how the company changes. That means one controlling authority cannot shut it down.&lt;/p&gt;

&lt;p&gt;Lastly, one interesting thing about Web 3.0 is that your digital identity is not 100% connected to your real-world identity. This means I can view pages, download things, make purchases, and any other activity on the internet without being traced back to the real me. Sounds like a second life right? XD. Metaverse is coming buddy!! It reminds me of &lt;a href="https://www.imdb.com/title/tt1677720/"&gt;Ready Player One&lt;/a&gt; (&lt;em&gt;awesome movie btw XD&lt;/em&gt;)&lt;/p&gt;

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

&lt;p&gt;So now we have come to the end of this article. To summarize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the 1960s the seed to the era of the Internet was planted &lt;/li&gt;
&lt;li&gt;In the 1970s World Wide Web was born&lt;/li&gt;
&lt;li&gt;Web 1.0: The era of consumers and a teeny tiny bit of content creators &lt;/li&gt;
&lt;li&gt;Web 2.0: Users became the content creators, social media became the super cool kids thing, content sharing was easy, we lost our privacy willingly, unlimited amount of data got created.&lt;/li&gt;
&lt;li&gt;Web 3.0: It's the future!! A decentralized open web where users own their data, entities are run by decentralized groups, the token economy is the thing now, everyone's crazed over crypto and NFTs, developers are going on an amazing adventure discovering golds!!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are a lot of things in Web 3.0 like Crypto(&lt;em&gt;yea I know you are familiar with that XD&lt;/em&gt;), DAOs, NFTs, DeFi, Protocols, and whatnot. It's still an emerging space, a lot of things to explore, some of it might be bubbles but it will be the future.&lt;/p&gt;

&lt;h1&gt;
  
  
  WAGMI 🚀
&lt;/h1&gt;

&lt;p&gt;That's it for today folks!! Thanks for reading this long article. I hope it was a great read for you and you learned one or two from it. If you have any doubts ask them away in the comments. What will be Web3's future according to you? I would love to hear about your views on this.&lt;/p&gt;

&lt;p&gt;If you have any feedback please share it in the comment below. Also, if you find it helpful, please like and hit the follow button on the right top corner. Subscribe to my newsletter if you don't wanna miss any content.&lt;/p&gt;

&lt;p&gt;Let's be friends on &lt;a href="https://twitter.com/arunkc97"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>codenewbie</category>
      <category>webdev</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>IPFS - The superpower of Web 3.0</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Tue, 01 Feb 2022 07:55:45 +0000</pubDate>
      <link>https://dev.to/arunkc/ipfs-the-superpower-of-web-30-5911</link>
      <guid>https://dev.to/arunkc/ipfs-the-superpower-of-web-30-5911</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was originally published at &lt;a href="https://arunkc.hashnode.dev/ipfs-the-superpower-of-web-3" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you are paying attention to the tech field and business you might have heard about "Web3" a lot. It's a newly evolved version of the web that we all are familiar with. I myself am fascinated by the technology and the concept of decentralized and distributed internet.&lt;/p&gt;

&lt;p&gt;When you start exploring Web3, one of the first things you will hear about is IPFS. So what the hell is this IPFS? Hold your horse's buddy. Before getting into what IPFS is let's see how the current internet works and what the problem with it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Issues with the current Internet
&lt;/h2&gt;

&lt;p&gt;As of January 2021, there are 4.66 billion active internet users worldwide which roughly equals 60 percent of the global population! The current internet is a centralized system, which means each node in the network is connected to a central node that controls the entire system. All the information on the internet is centralized since all data is kept in large server farms controlled by specific entities such as companies. This means that these entities are prone to censorship and it also creates a single point of failure. Say the servers of Youtube go down, how will you access it? Doesn't that mean it's a single point of failure?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vbc6QJsQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643627884906/YNIfIzana.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vbc6QJsQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643627884906/YNIfIzana.jpeg" alt="shows evolution of web" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's not like the current internet has no benefits at all. The speed at which we are able to access information is the biggest advantage of the current internet. Accessing files, blogs, websites, or any other content is possible in a matter of seconds with a single click of a button.&lt;/p&gt;

&lt;h3&gt;
  
  
  Location-based addressing
&lt;/h3&gt;

&lt;p&gt;The internet is dominated by client-server relationships, which rely on the Internet Protocol suite. Of these, Hypertext Transfer Protocol (HTTP) is the basis for communication. Data is stored in centralized servers and accessed by location-based addressing. This makes it easier to distribute, manage, secure the data, and to scale the capacity of both servers and clients.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"IPFS aims to surpass HTTP in order to build a better web for all of us."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In location-based addressing, data is identified by where it is located rather than its content. This limitation means you have to go all the way to a specific location to access a piece of data, even if that same data is available somewhere closer. There is also no way of telling if the data has been altered since the client only needs to know where it is, not what it is.&lt;/p&gt;

&lt;p&gt;This means that when we ask our computers to fetch a file, we essentially provide the computer with the location where the content is, and in return, we are provided with that information. An example of a “location” in this context can be either an IP address or a domain. Say you googled for &lt;a href="https://en.wikipedia.org/wiki/Main%5C_Page" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Main\_Page&lt;/a&gt;, it's essentially the location where the data is stored.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ownership of data
&lt;/h3&gt;

&lt;p&gt;No one really cares about the monopolization of information by specific entities. But it does matter a lot. We really don't own our own data even though we should. Say you are browsing through Facebook or Instagram and liking and commenting on posts, you are inevitably creating data. Whether it’s your online activity, what you like and dislike, your buying habits, or a whole range of other sensitive information, it is almost worthless in isolation.&lt;/p&gt;

&lt;p&gt;The data value arises when organizations use advanced analytics programs to help inform business decisions. If your data can help companies save or make money, then suddenly it becomes important.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make no mistake, you are not the customer, you are the data generator.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3FhxW2WL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643635064250/KS04kd_XZ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3FhxW2WL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643635064250/KS04kd_XZ.jpeg" alt="privacy is a myth" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Facebook and Instagram are literally designed to promote endless scrolling so that you reveal your likes and dislikes. Your data is one of the most valuable resources on the planet.&lt;/p&gt;

&lt;p&gt;This is exactly the problem with the current web. Ownership of the data, its centralized. Everything changes if our internet was decentralized, where we own our data and actually get benefit from it.&lt;/p&gt;

&lt;p&gt;In a decentralized world, you would own your data as an asset. If the data economy wants to continue, they will need to meet your personal data valuation. Essentially, each individual will be in charge of data monetization for themselves.&lt;/p&gt;

&lt;p&gt;A decentralized solution to storing and accessing files comes in the form of the InterPlanetary File System or IPFS. To shift from the present version of the web to a distributed version of the web, we need IPFS. Essentially, the aim is to replace HTTP. Moreover, a decentralized network is a key prospect for the promise of Web3!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is IPFS (InterPlanetary File System)?
&lt;/h2&gt;

&lt;p&gt;Now back to our question, what the hell is this IPFS? IPFS, which stands for InterPlanetary File System, began development in 2015 by the company Protocol Labs. Back in its early days, the team working on IPFS was a small team of developers led by Juan Benet, CEO of the company. IPFS was initially designed to be a P2P (peer-to-peer)-based decentralized solution for storing and accessing files.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;IPFS is a distributed system for storing and accessing files, websites, applications, and data designed to make the web faster, safer, and more open&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fast forward to today, IPFS can be described as a decentralized protocol for storing content – including data, websites, files, and applications – as well as accessing this data in a decentralized way. IPFS eliminates the problems of censorship and a single point of failure. So, now you may ask how does this solution different from our current centralized Internet?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--04bRyfG2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643627988232/HuPC7QFrT.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--04bRyfG2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643627988232/HuPC7QFrT.png" alt="image of ipfs" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Content-based addressing
&lt;/h3&gt;

&lt;p&gt;As mentioned earlier, the current web retrieves data from a location that we mentioned. IPFS on the other hand utilizes content-based addressing. This essentially means the content is located based on the content itself rather than the location of the content.&lt;/p&gt;

&lt;p&gt;An HTTP request (location-based addressing) would look like &lt;code&gt;http://1.2.3.4/main/mypic.png&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;An IPFS request (content-based addressing) would look like &lt;code&gt;/ipfs/QxmT42vH7/main/mypic.png&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So instead of telling the computer where the content is located, IPFS lets us request the content based on the content itself. Amazing right? But there is one problem, the computer must know how to find a specific file.&lt;/p&gt;

&lt;p&gt;For content-based addressing to work, there must be a working system to uniquely identify the content. And that is done by assigning a unique ID to the content called a hash. Since each hash is entirely unique to the content it represents, it is possible for the computer to find the content based on the hash.&lt;/p&gt;

&lt;p&gt;A request to retrieve data from the web must provide the content identifier, from which the system can determine the physical location of the content and retrieve it. One thing to note here is that since the identifier is created based on the content, any change in content ideally changes the identifier itself, i.e the content address itself.&lt;/p&gt;

&lt;p&gt;Content-based addressing and utilizing hashes is not something that IPFS introduced, as other systems use the same methods.&lt;/p&gt;

&lt;h3&gt;
  
  
  The InterPlanetary Name System (IPNS)
&lt;/h3&gt;

&lt;p&gt;As we have discussed, IPFS uses content-based addressing. It creates an address of a file based on data contained within the file. If you were to share an IPFS address such as &lt;code&gt;/ipfs/QmbezGequPwcsWo8UL4wDF6a8hYwM1hmbzYv2mnKkEWaUp&lt;/code&gt; with someone, you would need to give the person a new link every time you update the content.&lt;/p&gt;

&lt;p&gt;The InterPlanetary Name System (IPNS) solves this issue by creating an address that can be updated.&lt;/p&gt;

&lt;p&gt;A name in IPNS is the hash of a public key. The owner of the public key can sign a piece of information containing the IPNS hash linking to the most recent version of the content. New records can be signed and published at any time.&lt;/p&gt;

&lt;p&gt;That means that if I shared the IPNS hash, I could direct users to the same website and it would still allow me to make updates.&lt;/p&gt;

&lt;p&gt;There is one drawback though, IPNS hashes are not human-readable as you can see. This issue is actually solved by ENS. &lt;a href="https://docs.ens.domains/" rel="noopener noreferrer"&gt;Ethereum Name Service (ENS)&lt;/a&gt;, is a protocol for human-readable crypto addresses and decentralized domain names. We can discuss more in a later article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Directed Acyclic Graphs (DAGs)
&lt;/h3&gt;

&lt;p&gt;Directed Acyclic Graphs (DAGs) are a form of data structure utilized by various distributed systems. IPFS specifically utilizes DAGs structures known as &lt;strong&gt;Merkle DAGs&lt;/strong&gt;. In this data structure, each node has a unique hash representing the content of that specific node. This means that identifying an object or a node by the value of that node’s hash is possible, which is what content-based addressing is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8SgndPeN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643643945149/8uF2VloE3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8SgndPeN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643643945149/8uF2VloE3.png" alt="merkle tree" width="447" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are different ways in which we can construct a Merkle DAG, but IPFS structure is optimized to follow a file system (as the name says!). This means that the system splits the content into different blocks for the IPFS protocol to create a DAG representation of the content. This structure forms a Merkle DAG graph since each file has a content ID, files in the same folder have their own content IDs and the folder itself has a content ID. So many content IDs, I know XD.&lt;/p&gt;

&lt;p&gt;Another beneficial effect of using this data structure is that similar files can share parts of the Merkle DAG. This means that if we update any project, only the updated files will receive a new content ID. This also means that the old and new versions can refer to the same blocks for all unaltered parts!&lt;/p&gt;

&lt;p&gt;IPFS is an interesting solution for storing files on the web and will most likely be an important protocol for Web3.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does IPFS store the data?
&lt;/h2&gt;

&lt;p&gt;Now we do have a basic understanding of what IPFS is and how content-based addressing comes into the picture. However, we still haven't learned how IPFS stores the data.&lt;/p&gt;

&lt;h3&gt;
  
  
  IPFS Objects
&lt;/h3&gt;

&lt;p&gt;When storing files in IPFS, the system creates an IPFS object. These objects can store up to 256KBs worth of data. They can also contain links to other IPFS objects. Now you may wonder how it stores larger files like an image or video.&lt;/p&gt;

&lt;p&gt;Those are actually split up into multiple IPFS objects of the size 256KB and afterward, the system will create another IPFS object that holds the links to all the pieces of the files. It's a straightforward simple yet powerful architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gcBjXJkG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643628070652/MD3BFS4G4.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gcBjXJkG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643628070652/MD3BFS4G4.jpeg" alt="shows how ipfs stores data" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Versioning in IPFS
&lt;/h3&gt;

&lt;p&gt;The IPFS objects are actually immutable objects. Then how do we change stuffs you ask? That's where versioning comes into the picture. IPFS supports the versioning of the files. If you happen to be working on a file, IPFS will create what they call a commit object for you.&lt;/p&gt;

&lt;p&gt;The commit object simply refers to the commit that came prior to that one and then links to the latest version of the file. All these different versions of a specific file are then available to the nodes of the system. IPFS will make sure that your files, plus their entire history is accessible to the other nodes in the network.&lt;/p&gt;

&lt;p&gt;Further information on how IPFS stores data can be found in the &lt;a href="https://docs.ipfs.io/" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt; on their website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there any catch?
&lt;/h3&gt;

&lt;p&gt;Yes, there is a catch. If the nodes that hold these pieces of files are offline then the file becomes unavailable and no one can grab a copy of it. It will be like BitTorrent swarms without seeders. There are actually two solutions to this problem, either we can incentivize the nodes or proactively distribute the files and makes sure there is a certain number of copies always available. This is exactly what &lt;a href="https://filecoin.io/" rel="noopener noreferrer"&gt;Filecoin&lt;/a&gt; intends to do. It is again a project of Protocol Labs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does IPFS locate the data?
&lt;/h2&gt;

&lt;p&gt;You may now wonder how the system locates the data. That is essentially solved by the &lt;strong&gt;Distributed Hash Tables&lt;/strong&gt;. A hash table is a data structure that stores information as key/value pairs. In distributed hash tables (DHT) the data is spread across a network of computers, and efficiently coordinated to enable efficient access and lookup between nodes.&lt;/p&gt;

&lt;p&gt;The main advantages of DHTs are decentralization, fault tolerance, and scalability. Nodes do not require central coordination, the system can function reliably even when nodes fail or leave the network, and DHTs can scale to accommodate millions of nodes. Together these features result in a system that is generally more resilient than client-server structures.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KOD7iOkd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643642294341/8Rts1C9Tn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KOD7iOkd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn.hashnode.com/res/hashnode/image/upload/v1643642294341/8Rts1C9Tn.png" alt="locating the data" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fact that the hash table is distributed means that it is split across all the nodes in the network. Then to locate the content you are after, you ask the peers in the system. IPFS has something they call the ”libp2p project”, which provides DHTs and enables the peers in the system to communicate with each other. Once the content is located, which happens by finding out which peers in the system host the blocks that make up a file, then the next step is to find out where these peers are located. This means that the system uses the DHT twice in the process of locating the desired content.&lt;/p&gt;

&lt;p&gt;As soon as the process of locating the content and the peers are done, an exchange needs to occur. When requesting or sending a block, IPFS uses something called Bitswap. This is what enables the peers in the network to connect with each other and to send the requested content. Once the content arrives, you are able to compare the content ID of the requested block and the one you have received to determine that it is the correct file.&lt;/p&gt;

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

&lt;p&gt;Now as this article came to an end now you have a basic understanding of what an IPFS is, what content-based addressing is, how it stores data and how it locates the data.&lt;/p&gt;

&lt;p&gt;Let's summarize :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IPFS is a distributed system for accessing and storing files. &lt;/li&gt;
&lt;li&gt;IPFS uses a content-based addressing system.&lt;/li&gt;
&lt;li&gt;IPFS uses a Merkle DAG that is optimized for representing directories and files&lt;/li&gt;
&lt;li&gt;IPFS have IPNS which acts as a DNS in a decentralized world.&lt;/li&gt;
&lt;li&gt;IPFS stores data as an immutable object called IPFS object and supports versioning of the files.&lt;/li&gt;
&lt;li&gt;IPFS locates the peer that hosts the data using Distributed hash tables (DHTs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IPFS is pretty cool, right?&lt;/p&gt;

&lt;p&gt;There are some advanced concepts in IPFS called Block exchanges, IPLD (Interplanetary Linked Data Project). We can discuss those in a later article.&lt;/p&gt;

&lt;p&gt;That's it for today folks!! Thanks for reading this long article. I hope it was a great read for you and you learned one or two from it. If you have any doubts ask them away in the comments.&lt;/p&gt;

&lt;p&gt;If you have any feedback please share it in the comment below. Also, if you find it helpful, please like and hit the follow button on the right top corner. Subscribe to my newsletter if you don't wanna miss any content.&lt;/p&gt;

&lt;p&gt;Let's be friends at &lt;a href="https://twitter.com/arunkc97" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>beginners</category>
      <category>web</category>
      <category>ipfs</category>
    </item>
    <item>
      <title>6 Useful Python Tricks</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Wed, 12 Jan 2022 17:25:40 +0000</pubDate>
      <link>https://dev.to/arunkc/6-useful-python-tricks-502o</link>
      <guid>https://dev.to/arunkc/6-useful-python-tricks-502o</guid>
      <description>&lt;p&gt;Hey folks 👋, welcome back to another post!!&lt;br&gt;
&lt;a href="https://i.giphy.com/media/XD9o33QG9BoMis7iM4/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/XD9o33QG9BoMis7iM4/giphy.gif" alt="welcome" width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me introduce myself to those who don't know me, I'm Arun, a Data Engineer and Web3 fanatic. And for the ones who know me, thank you so much for the support 🙌 and love 💜&lt;/p&gt;

&lt;p&gt;In this article, I will be sharing some of the tips and tricks I usually use while coding in Python. As a developer, we should be writing efficient code that's clean, easy to read and debug, and maintainable.&lt;/p&gt;

&lt;p&gt;The tricks that I will be sharing in this article will help you achieve the ultimate goal of writing clean and efficient code. So without any ado let's jump into it!!&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Executing string as a code
&lt;/h2&gt;

&lt;p&gt;exec() function is used for the dynamic execution of Python code. It can take a block of code containing Python statements like loops, class, function/method definitions and even try/except block. &lt;/p&gt;

&lt;p&gt;This function doesn’t return anything but you can reuse the variables used in the string as shown in the example below.&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;code_as_string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'''
a = 1
b = 2
return_value = a + b
'''&lt;/span&gt;

&lt;span class="k"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code_as_string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;return_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#using return_value variable that's defined inside the string
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Arguments Packing
&lt;/h2&gt;

&lt;p&gt;Argument unpacking is very commonly used in Python. You must have seen *args and **kwargs in some functions.&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
   &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
   &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="nb"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;#1
&lt;/span&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;#3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. F String
&lt;/h2&gt;

&lt;p&gt;It is a common practice to add variables inside strings. F strings are by far the coolest way of doing it. &lt;/p&gt;

&lt;p&gt;Let's first see how we will be performing the operation with the usual format function&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'Luffy'&lt;/span&gt;
&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'19'&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{} is {} years old"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&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="c1"&gt;# Luffy is 19 years old
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We specify the values that go inside the curly braces by using the format function. Now F string allow us to specify the variables inside the string itself. Cool isn't it?&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="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; years old"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Luffy is 19 years old
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Swapping variables
&lt;/h2&gt;

&lt;p&gt;Python have an easier way for swapping without using any temporary variable.&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;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 20, 10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Reversing a list
&lt;/h2&gt;

&lt;p&gt;We can easily reverse a list using reverse() function or slicing technique&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;list1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;list2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;list1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# [4, 3, 2, 1]
&lt;/span&gt;
&lt;span class="n"&gt;list3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;list2&lt;/span&gt;&lt;span class="p"&gt;[::&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;list3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# [8, 7, 6, 5]
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One thing to keep in mind is that reverse() will reverse the original list itself, unlike the slicing technique.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Using generator inside a function
&lt;/h2&gt;

&lt;p&gt;We can use generators directly inside a function to write shorter and cleaner code.&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="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="c1"&gt;# 45
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;So now we have covered 6 simple yet highly practical tricks that you can use. At a glance these are small changes, but small improvements added up always gives magical results. You will eventually be writing code that is more efficient, easier to read and debug, and more maintainable as you find more practical tricks like these. &lt;/p&gt;

&lt;p&gt;I hope you enjoyed this article. If you did show some love 💜 by liking 👍, and sharing 🔃 this article in your socials. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/1xucXbDnMIYkU/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/1xucXbDnMIYkU/giphy.gif" alt="bye bye" width="335" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will be back with more useful articles!! &lt;/p&gt;

&lt;p&gt;Do not hesitate to share your feedback. I am on Twitter &lt;a href="https://twitter.com/arunkc97"&gt;@arunkc97&lt;/a&gt; and LinkedIn &lt;a href="https://www.linkedin.com/in/arun-kc/"&gt;arun-kc&lt;/a&gt;. Give a follow and support!&lt;/p&gt;

&lt;h2&gt;
  
  
  💜 Thank you for reading 💜
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🌏 Like | Follow | Share 🌏
&lt;/h2&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>programming</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>My first Hacktoberfest !!✨</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Fri, 15 Oct 2021 15:59:39 +0000</pubDate>
      <link>https://dev.to/arunkc/my-first-hacktoberfest--5a43</link>
      <guid>https://dev.to/arunkc/my-first-hacktoberfest--5a43</guid>
      <description>&lt;p&gt;&lt;em&gt;"I don't think I can"&lt;/em&gt; to &lt;em&gt;"Wow!! This is pretty good!!"&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Now that was my experience in a one-liner!&lt;/p&gt;

&lt;p&gt;Hi folks, welcome back to another post. To the folks who's new to my posts, I'm Arun, a developer from India. &lt;/p&gt;

&lt;p&gt;So this is just a post on my experience of my first ever hacktoberfest!!&lt;/p&gt;

&lt;h3&gt;
  
  
  How was it??
&lt;/h3&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%2Fmedia1.giphy.com%2Fmedia%2FmXnO9IiWWarkI%2Fgiphy.gif%3Fcid%3D790b7611dba0b4b5805ba15bbc374a4f01777aa0f5e10d96%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%2Fmedia1.giphy.com%2Fmedia%2FmXnO9IiWWarkI%2Fgiphy.gif%3Fcid%3D790b7611dba0b4b5805ba15bbc374a4f01777aa0f5e10d96%26rid%3Dgiphy.gif%26ct%3Dg" alt="awesome"&gt;&lt;/a&gt;&lt;br&gt;
It was pretty awesome. At first it felt overwhelming. A variety of thoughts went through my mind at first like "Can I do it?", "Will I be able to really help?", "What if I make a mistake?" and all sort of questions like this popped up in my head. It was really scary. Since I was scared I knew that I should do it. &lt;br&gt;
&lt;a href="https://i.giphy.com/media/iKBAAfYNDu1dowhnEj/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/iKBAAfYNDu1dowhnEj/giphy.gif" alt="lets do it"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  How's the progress??
&lt;/h3&gt;

&lt;p&gt;Well.., my number of contributions will be a 2 digit number soon. My work life was a bit hectic these past few weeks. But still I knew I had to do this and squeezed out time for open source contributions. It was worth it!! Watching my PRs getting merged with the codebase, it felt so awesome.&lt;/p&gt;

&lt;p&gt;I was literally like this 🤭&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%2F68v92v82fh2886n5xez7.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%2F68v92v82fh2886n5xez7.gif" alt="awesome"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What were my contributions??
&lt;/h3&gt;

&lt;p&gt;I really didn't knew where to start. So like usual I just googled about Hacktoberfest and the projects participating in the events. Dev community really helped me on that. There were a lot of posts on this. So after reading through all of those I just went to Github and searched for some projects. Some of the projects I contributed are:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sourcegraph" rel="noopener noreferrer"&gt;
        sourcegraph
      &lt;/a&gt; / &lt;a href="https://github.com/sourcegraph/learn" rel="noopener noreferrer"&gt;
        learn
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Sourcegraph Learn: an educational hub to support all developers
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Sourcegraph Learn&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Sourcegraph Learn is Sourcegraph's open source and Creative Commons licensed developer education hub and learning center.&lt;/p&gt;
&lt;p&gt;Public URL: &lt;a href="https://learn.sourcegraph.com" rel="nofollow noopener noreferrer"&gt;https://learn.sourcegraph.com&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How the site is built&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;The website consists of static content generated using &lt;a href="https://nextjs.org" rel="nofollow noopener noreferrer"&gt;Next.js&lt;/a&gt; and hosted on &lt;a href="https://www.netlify.com/" rel="nofollow noopener noreferrer"&gt;Netlify&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The website code is written in TypeScript and React.&lt;/li&gt;
&lt;li&gt;The content is written in Markdown.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Deploy previews (staging branches)&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;When a pull request is created in this repository, Netlify will automatically build and deploy the branch. You can find the link to the deploy preview in the Checks section of the pull request.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;For developers&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;If you are actively developing Sourcegraph Learn or are looking to extend this repository, please see our &lt;a href="https://github.com/sourcegraph/learn/blob/main/docs/development.md" rel="noopener noreferrer"&gt;development documentation&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;For content writers&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;If you are actively contributing to Sourcegraph Learn as a technical writer or video creator, please see our &lt;a href="https://github.com/sourcegraph/learn/blob/main/docs/content.md" rel="noopener noreferrer"&gt;content documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See also our archived &lt;a href="https://github.com/sourcegraph/learn/blob/main/docs/hacktoberfest-2021.md" rel="noopener noreferrer"&gt;Hacktoberfest 2021 contributors' guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sourcegraph/learn" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;

&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/PrefectHQ" rel="noopener noreferrer"&gt;
        PrefectHQ
      &lt;/a&gt; / &lt;a href="https://github.com/PrefectHQ/prefect" rel="noopener noreferrer"&gt;
        prefect
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Prefect is a workflow orchestration framework for building resilient data pipelines in Python.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/3407835/262988097-c654cbc6-63e8-4ada-a92a-efd2f8f24b85.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg0ODcxNjMsIm5iZiI6MTcyODQ4Njg2MywicGF0aCI6Ii8zNDA3ODM1LzI2Mjk4ODA5Ny1jNjU0Y2JjNi02M2U4LTRhZGEtYTkyYS1lZmQyZjhmMjRiODUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MTAwOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDEwMDlUMTUxNDIzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YzdiZmU3MzA4ODQ3MGZjMTQzMDY0ZjMwYzAzNzk5ZWJmNDg3M2QwNzg1ZmUzYjYxNzYwY2M4MTFiNjRhNzdhZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.oYhiXM3p4dIlAHJlBYySLOSejoVNke76sikvsUQtPdA"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F3407835%2F262988097-c654cbc6-63e8-4ada-a92a-efd2f8f24b85.png%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg0ODcxNjMsIm5iZiI6MTcyODQ4Njg2MywicGF0aCI6Ii8zNDA3ODM1LzI2Mjk4ODA5Ny1jNjU0Y2JjNi02M2U4LTRhZGEtYTkyYS1lZmQyZjhmMjRiODUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MTAwOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDEwMDlUMTUxNDIzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YzdiZmU3MzA4ODQ3MGZjMTQzMDY0ZjMwYzAzNzk5ZWJmNDg3M2QwNzg1ZmUzYjYxNzYwY2M4MTFiNjRhNzdhZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.oYhiXM3p4dIlAHJlBYySLOSejoVNke76sikvsUQtPdA" width="1000"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
    &lt;a href="https://pypi.python.org/pypi/prefect/" alt="PyPI version" rel="nofollow noopener noreferrer"&gt;
        &lt;img alt="PyPI" src="https://camo.githubusercontent.com/9577a0eb3ee9c42599472fd7f20053a5ecd24a2d11480a89d1c0a28879369773/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f707265666563743f636f6c6f723d303035324646266c6162656c436f6c6f723d303930343232"&gt;&lt;/a&gt;
    &lt;a href="https://github.com/prefecthq/prefect/" alt="Stars" rel="noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/5376e0bbb31185eec9cf8062459238c597e0c50ec5dabcf883cfcddf58b7c530/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f7072656665637468712f707265666563743f636f6c6f723d303035324646266c6162656c436f6c6f723d303930343232"&gt;&lt;/a&gt;
    &lt;a href="https://pepy.tech/badge/prefect/" alt="Downloads" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/03a7ec5842c6e4368cd412531eaad6dc8e525898cdce98bd6091b884f2c67fc6/68747470733a2f2f696d672e736869656c64732e696f2f707970692f646d2f707265666563743f636f6c6f723d303035324646266c6162656c436f6c6f723d303930343232"&gt;&lt;/a&gt;
    &lt;a href="https://github.com/prefecthq/prefect/pulse" alt="Activity" rel="noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/e7141178c71f4422f02cc6fd81c657660aaf78dfa0a66b8fb4d65e0467889174/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f7072656665637468712f707265666563743f636f6c6f723d303035324646266c6162656c436f6c6f723d303930343232"&gt;&lt;/a&gt;
    &lt;br&gt;
    &lt;a href="https://prefect.io/slack" alt="Slack" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/9bd3f3d0ab53ddc812558515efbc0759cc1a5aa2f422e24e6fe79fa4531c7e63/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736c61636b2d6a6f696e5f636f6d6d756e6974792d7265642e7376673f636f6c6f723d303035324646266c6162656c436f6c6f723d303930343232266c6f676f3d736c61636b"&gt;&lt;/a&gt;
    &lt;a href="https://discourse.prefect.io/" alt="Discourse" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/a6a36cdb602129ce31a6d97759a967f9c1a9fb87c90deb8f3be1da86028e49d3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646973636f757273652d62726f7773655f666f72756d2d7265642e7376673f636f6c6f723d303035324646266c6162656c436f6c6f723d303930343232266c6f676f3d646973636f75727365"&gt;&lt;/a&gt;
    &lt;a href="https://www.youtube.com/c/PrefectIO/" alt="YouTube" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/44dc5ec9ce8a9ce77cb4fe5633ec5080c66577fa264543679a17dd1dcf2a5b0a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f796f75747562652d77617463685f766964656f732d7265642e7376673f636f6c6f723d303035324646266c6162656c436f6c6f723d303930343232266c6f676f3d796f7574756265"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Prefect&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Prefect is a workflow orchestration framework for building data pipelines in Python
It's the simplest way to elevate a script into a resilient production workflow
With Prefect, you can build resilient, dynamic data pipelines that react to the world around them and recover from unexpected changes.&lt;/p&gt;
&lt;p&gt;With just a few lines of code, data teams can confidently automate any data process with features such as scheduling, caching, retries, and event-based automations.&lt;/p&gt;
&lt;p&gt;Workflow activity is tracked and can be monitored with a self-hosted &lt;a href="https://docs.prefect.io/latest/manage/self-host/?utm_source=oss&amp;amp;utm_medium=oss&amp;amp;utm_campaign=oss_gh_repo&amp;amp;utm_term=none&amp;amp;utm_content=none" rel="nofollow noopener noreferrer"&gt;Prefect server&lt;/a&gt; instance or managed &lt;a href="https://www.prefect.io/cloud-vs-oss?utm_source=oss&amp;amp;utm_medium=oss&amp;amp;utm_campaign=oss_gh_repo&amp;amp;utm_term=none&amp;amp;utm_content=none" rel="nofollow noopener noreferrer"&gt;Prefect Cloud&lt;/a&gt; dashboard.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting started&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Prefect requires Python 3.9 or later. To &lt;a href="https://docs.prefect.io/get-started/install" rel="nofollow noopener noreferrer"&gt;install the latest or upgrade to the latest version of Prefect&lt;/a&gt;, run the following command:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip install -U prefect&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Then create and run a Python file that uses Prefect &lt;code&gt;flow&lt;/code&gt; and &lt;code&gt;task&lt;/code&gt; decorators to orchestrate and observe your workflow - in this case, a simple script that fetches the…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/PrefectHQ/prefect" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/bridgecrewio" rel="noopener noreferrer"&gt;
        bridgecrewio
      &lt;/a&gt; / &lt;a href="https://github.com/bridgecrewio/AirIAM" rel="noopener noreferrer"&gt;
        AirIAM
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Least privilege AWS IAM Terraformer
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://bridgecrew.io" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/139809c09bec204436988a4c7e463b39ca8a3fe104355b16e554136dcbf6498d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61696e7461696e656425323062792d627269646765637265772e696f2d626c756576696f6c6574" alt="Maintained by Bridgecrew.io"&gt;&lt;/a&gt;
&lt;a href="https://github.com/bridgecrewio/AirIAM/actions?query=workflow%3Abuild-and-test" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fbridgecrewio%2FAirIAM%2Fmaster%2Fcoverage.svg%3Fsanitize%3Dtrue" alt="code_coverage"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/00577d2725edcb83fb2fbc409a03550b3760934ee4965eca4bd12ad3ff696fc5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74662d253345253344302e31322e302d626c75652e737667"&gt;&lt;img src="https://camo.githubusercontent.com/00577d2725edcb83fb2fbc409a03550b3760934ee4965eca4bd12ad3ff696fc5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74662d253345253344302e31322e302d626c75652e737667" alt="Terraform Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/bridgecrewio/airiam/actions?query=workflow%3Abuild" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/bridgecrewio/AirIAM/workflows/build/badge.svg" alt="build"&gt;&lt;/a&gt;
&lt;a href="https://pypi.org/project/airiam/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c94f3a285d636e2ff8b8b121aa65bb67c208013343f1f5cf1b0464c7b71c810d/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f61697269616d" alt="PyPI"&gt;&lt;/a&gt;
&lt;a href="https://pepy.tech/project/airiam" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f316d49cc3a561396a9cc9b11477d5d93f689b9329edf3583d7bfe008496e49f/68747470733a2f2f706570792e746563682f62616467652f61697269616d" alt="Downloads"&gt;&lt;/a&gt;
&lt;a href="https://slack.bridgecrew.io/?utm_source=github&amp;amp;utm_medium=organic_oss&amp;amp;utm_campaign=airiam" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/92fe11497207fa1513dca6c7b7d06464c2ccd134f66ceddbd0522dd98064a99f/68747470733a2f2f736c61636b2e627269646765637265772e696f2f62616467652e737667" alt="slack-community"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
    &lt;a rel="noopener noreferrer" href="https://github.com/bridgecrewio/AirIAM/raw/master/docs/web/images/airiam-logo.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fbridgecrewio%2FAirIAM%2Fraw%2Fmaster%2Fdocs%2Fweb%2Fimages%2Fairiam-logo.png" height="100"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;AirIAM is an AWS IAM to least privilege Terraform execution framework. It compiles AWS IAM usage and leverages that data to create a least-privilege IAM Terraform that replaces the exiting IAM management method.&lt;/p&gt;

&lt;p&gt;AirIAM was created to promote immutable and version-controlled IAM management to replace today's manual and error prone methods.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;&lt;strong&gt;Table of contents&lt;/strong&gt;&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#table-of-contents" rel="noopener noreferrer"&gt;&lt;strong&gt;Table of contents&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#introduction" rel="noopener noreferrer"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/bridgecrewio/AirIAM#commands" rel="noopener noreferrer"&gt;Commands&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#data-flow" rel="noopener noreferrer"&gt;Data Flow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#examples" rel="noopener noreferrer"&gt;Examples&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/bridgecrewio/AirIAM#getting-started" rel="noopener noreferrer"&gt;Getting Started&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#using-pip" rel="noopener noreferrer"&gt;Using Pip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#using-brew-macos-only" rel="noopener noreferrer"&gt;Using brew (MacOS Only)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#recommended-flow" rel="noopener noreferrer"&gt;Recommended flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#faq" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/bridgecrewio/AirIAM#alternatives" rel="noopener noreferrer"&gt;Alternatives&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#aws-iam-cleanup-tools" rel="noopener noreferrer"&gt;AWS IAM Cleanup Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#aws-iam-policy-management-tools" rel="noopener noreferrer"&gt;AWS IAM Policy Management Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#migration-of-aws-to-terraform-tools" rel="noopener noreferrer"&gt;Migration of AWS to Terraform Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#contributing" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="https://github.com/bridgecrewio/AirIAM#support" rel="noopener noreferrer"&gt;Support&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introduction&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;AirIAM scans existing IAM usage patterns and provides a simple method to migrate IAM configurations into a right-sized
Terraform plan. It identifies unused users, roles, groups, policies and policy attachments and replaces them with a
Least Privileges Terraform code modelled to manage AWS IAM.&lt;/p&gt;
&lt;p&gt;By moving all IAM configurations into Terraform code, admins can start…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/bridgecrewio/AirIAM" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Yea, some of the projects I contributed don't have &lt;code&gt;hacktoberfest&lt;/code&gt; tags. And yea I know that those won't be considered as a valid PR in Hacktoberfest. At the end of the day the main purpose of this event is to let 'opensource contribution' as a habit for developers. I'm doing it for the fun of it. It felt really good while doing each PR's. &lt;/p&gt;

&lt;h3&gt;
  
  
  Reflections
&lt;/h3&gt;

&lt;p&gt;If you got till this point reading through this post then you might have already guessed how my experience was and I how feel about it. I have learned a lot with each PRs. Each maintainers are so helpful and friendly. All my anxiety was gone thanks to them. &lt;/p&gt;

&lt;p&gt;I will be continuing doing open source contributions whenever I get time. I would really encourage everyone to do the same and help each other out. And thank you for reading till this point 😄&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Open source is changing the world – one contribution at a time ✌️&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🎃 Happy Hacktoberfest 🎃 and Happy hacking 🙌🙌&lt;/p&gt;

&lt;p&gt;Now that you heard about my experience I would like to know how your experience was. How was it for you??&lt;/p&gt;

&lt;p&gt;I am on Twitter &lt;a href="https://twitter.com/arunkc97" rel="noopener noreferrer"&gt;@arunkc97&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/arun-kc/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. Give a follow!&lt;/p&gt;

&lt;h2&gt;
  
  
  💜 Thank you for reading 💜
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🌏 Like | Follow | Share 🌏
&lt;/h2&gt;

</description>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Get started with Apache Airflow</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Sat, 25 Sep 2021 13:49:32 +0000</pubDate>
      <link>https://dev.to/arunkc/get-started-with-apache-airflow-1218</link>
      <guid>https://dev.to/arunkc/get-started-with-apache-airflow-1218</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Hey Folks!&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Welcome back to another post!! &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%2FxUPGGDNsLvqsBOhuU0%2Fgiphy.gif%3Fcid%3Decf05e473tqn8l488mzjpk7bskqflri39808ko0n2vtfbf7o%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%2FxUPGGDNsLvqsBOhuU0%2Fgiphy.gif%3Fcid%3Decf05e473tqn8l488mzjpk7bskqflri39808ko0n2vtfbf7o%26rid%3Dgiphy.gif%26ct%3Dg" alt="welcome!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article is on Apache Airflow. Before getting into authoring our first workflow lets look into what Apache Airflow actually is. &lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Airflow is a platform to programmatically author, schedule and monitor workflows.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Airflow uses directed acyclic graphs (DAGs) to manage workflow orchestration. Tasks and dependencies are defined in Python and then Airflow manages the scheduling and execution.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Basically its a tool that we can use to orchestrating workflows using code!! Pretty neat right? &lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;In Airflow, a DAG – or a Directed Acyclic Graph – is a collection of all the tasks you want to run, organized in a way that reflects their relationships and dependencies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Its just a structure that we define using python scripts. To put it simply, it defines how we want to run our tasks. &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%2Fq5jrrlbxtnmytjuv7fvm.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%2Fq5jrrlbxtnmytjuv7fvm.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can say all workflows are DAGs. A DAG consists of &lt;a href="https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/operators/index.html?highlight=operators#module-airflow.operators" rel="noopener noreferrer"&gt;operators&lt;/a&gt;, which we refer to as tasks. There are different type of operators available such as &lt;code&gt;BashOperator&lt;/code&gt;, &lt;code&gt;PythonOperator&lt;/code&gt;, &lt;code&gt;EmailOperator&lt;/code&gt; etc.&lt;/p&gt;

&lt;p&gt;When we run a DAG all the tasks inside it will run the way we have orchestrated. It can be parallel runs, sequential runs or even runs depending on another task or external resource. &lt;/p&gt;

&lt;h2&gt;
  
  
  Let's get our hands dirty!!
&lt;/h2&gt;

&lt;p&gt;Assuming that Airflow is up and running, lets jump into our first DAG creation. If Airflow is not yet installed in your system please check the &lt;a href="https://airflow.apache.org/docs/apache-airflow/stable/installation/index.html" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; for more info. If you have an AWS account you can use &lt;a href="https://aws.amazon.com/managed-workflows-for-apache-airflow/" rel="noopener noreferrer"&gt;MWAA&lt;/a&gt;. Its the same thing, the only catch is that its managed by AWS as a service. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ZET50M20hkU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Below is a simple code for DAG&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airflow&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DAG&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airflow.operators.dummy_operator&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DummyOperator&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airflow.operators.python_operator&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PythonOperator&lt;/span&gt;

&lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;owner&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Airflow&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;start_date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2021-01-01&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;retries&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;print_hello&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Hello world from first Airflow DAG!&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;

&lt;span class="n"&gt;dag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DAG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;dag_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FIRST_DAG&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;default_args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;schedule_interval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;@daily&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;catchup&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;hello_task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PythonOperator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;hello_task&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;python_callable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;print_hello&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;hello_task&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So what this above code basically does is it just invokes the python callable function &lt;code&gt;print_hello&lt;/code&gt; using a &lt;code&gt;PythonOperator&lt;/code&gt;. We are assigning that operator to a variable called &lt;code&gt;hello_task&lt;/code&gt;. Now this variable is essentially our task. &lt;/p&gt;

&lt;p&gt;We place this code (DAG) in our AIRFLOW_HOME directory under the &lt;code&gt;dags&lt;/code&gt; folder. We name it &lt;code&gt;hello_world.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Below is a sample folder structure of DAG&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AIRFLOW_HOME/
├── common
│   └── common_functions.py
├── dags
│   └── hello_world.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can modularize the functions you want and store it as python scripts under the folder common and use it inside the DAG.&lt;/p&gt;

&lt;p&gt;For running the DAG you can go to Airflow scheduler and turn on the DAG by clicking the toggle button and click on the run button besides your DAG.&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%2Fmy03zstjdqw4cno0sfht.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%2Fmy03zstjdqw4cno0sfht.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once its successful your task border will turn to dark green color. &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%2Fxnkt2u86u7tp27f93tbq.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%2Fxnkt2u86u7tp27f93tbq.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it!! We just created our first DAG. Airflow is a neat and simple tool that helps us to orchestrate tasks / workflows like this. It doesn't seem that big of a deal with just one task. But in real world we have to orchestrate a large number of workflows. When the scale increases Airflow is such a life saver for all of us. &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%2Fr0tfq7awvup8jen9hnwi.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%2Fr0tfq7awvup8jen9hnwi.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;This was just a small intro on Airflow to those who have never heard of it. For the experienced folks this article won't do much. Its just a byte sized article ✌️&lt;/p&gt;

&lt;p&gt;Hope you enjoyed the article. Do not hesitate to share your feedback. I am on Twitter &lt;a href="https://twitter.com/arunkc97" rel="noopener noreferrer"&gt;@arunkc97&lt;/a&gt;. Give a follow!&lt;/p&gt;

&lt;h2&gt;
  
  
  💜 Thank you for reading 💜
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🌏 Like | Follow | Share 🌏
&lt;/h2&gt;

</description>
      <category>aws</category>
      <category>airflow</category>
      <category>python</category>
    </item>
    <item>
      <title>My experience in building a Discord bot!!</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Sun, 30 May 2021 14:02:12 +0000</pubDate>
      <link>https://dev.to/arunkc/my-experience-in-building-a-discord-bot-271h</link>
      <guid>https://dev.to/arunkc/my-experience-in-building-a-discord-bot-271h</guid>
      <description>&lt;p&gt;I have been working on &lt;a href="https://github.com/Arun-kc/novicebot" rel="noopener noreferrer"&gt;Zoro&lt;/a&gt;, a discord bot, for the last few days. To be honest, this all started when I wanted to build an open source project. I didn't had any idea on what to build at first. I have been using discord for the past few years and I always wanted a bot of my own. So why not build a discord bot? That's how I decided to build a bot. &lt;/p&gt;

&lt;h2&gt;
  
  
  But...how to build a bot?
&lt;/h2&gt;

&lt;p&gt;Yeah, that's the exact question I had at first, How? Just like any other developer I too started googling on "How to make a discord bot" (Funny but without google or stack overflow most of us wouldn't be here 😝). Thanks to the whole developer community, there were many articles and tutorials on this.(phew, thank god I found those somehow 😌)&lt;/p&gt;

&lt;h2&gt;
  
  
  Then what?
&lt;/h2&gt;

&lt;p&gt;I then started going through all those articles and tutorials to get an idea on how to start. Created an application and bot on &lt;a href="https://discord.com/developers/docs/intro" rel="noopener noreferrer"&gt;discord developer portal&lt;/a&gt; and &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; for this project(yea, it's open source, feel free to check it out and contribute✨).&lt;br&gt;
And then it was time to put on coding cap and start coding....&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/LmNwrBhejkK9EFP504/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/LmNwrBhejkK9EFP504/giphy.gif" alt="coding kitty"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How was it?
&lt;/h2&gt;

&lt;p&gt;It was fun! I mean, really fun!! I always loved building stuffs. We use discordjs for building the bot. It's a nodejs module. If you are familiar with nodejs or vanilla js then this won't be really difficult for you. All that matters is your imagination. You can make the bot do whatever you want. When I first went through the docs on discordjs I was overwhelmed, there was a lot to grasp. &lt;/p&gt;

&lt;p&gt;Wait, wait...don't jump into conclusion that it's hard and not for you. It's fairly simple, it's well documented and most of the tutorials and articles will give clear picture on the whole thing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/W5Ub2lhJPWlL4iXnNL/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/W5Ub2lhJPWlL4iXnNL/giphy.gif" alt="just do it"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Can I build a bot too?
&lt;/h2&gt;

&lt;p&gt;Of course you can. You can build a fully functional bot on your own. Don't underestimate your skills. I will list down some of the resources that I used.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://discord.js.org/#/" rel="noopener noreferrer"&gt;DiscordJS&lt;/a&gt;:
Don't ignore the docs. Doc's are really a life savers. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://youtube.com/playlist?list=PLRqwX-V7Uu6avBYxeBSwF48YhAnSn_sA4" rel="noopener noreferrer"&gt;TheCodingTrain&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtube.com/playlist?list=PLaxxQQak6D_fxb9_-YsmRwxfw5PH9xALe" rel="noopener noreferrer"&gt;Worn Off Keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.freecodecamp.org/news/create-a-discord-bot-with-python/" rel="noopener noreferrer"&gt;freeCodeCamp&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/" rel="noopener noreferrer"&gt;npm packages&lt;/a&gt; There are a lot of packages already build by lot of awesome developers to ease out your burden&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/xT9DPIBYf0pAviBLzO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xT9DPIBYf0pAviBLzO/giphy.gif" alt="you can to it"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oh yea I forgot to mention something, Discord bot can be build both using JavaScript and &lt;a href="https://discordpy.readthedocs.io/en/stable/#" rel="noopener noreferrer"&gt;Python&lt;/a&gt;. What I used is JS but if you are comfortable with python just go with  that. &lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building a discord bot is not that hard. If I can do it, then you can too. Just don't overestimate the time needed to build it. You really can't build a multi purpose bot over night(may be the ones who already build one can do that, or some super geniuses 😅). It takes some time, but no worries, it's fun. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you are interested in the bot I made feel free to check it out, contributions are welcome&lt;/em&gt; ❤️ &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Arun-kc" rel="noopener noreferrer"&gt;
        Arun-kc
      &lt;/a&gt; / &lt;a href="https://github.com/Arun-kc/novicebot" rel="noopener noreferrer"&gt;
        novicebot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ⚔️ A fun-oriented discord bot made using DiscordJS, NodeJS, and MongoDB
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Don't forget to show some ❤️ by giving a star ⭐&lt;/p&gt;

&lt;h3&gt;
  
  
  💜 Thank you for reading 💜
&lt;/h3&gt;

&lt;h3&gt;
  
  
  🌏 Like | Follow | Share 🌏
&lt;/h3&gt;

</description>
      <category>discord</category>
      <category>todayilearned</category>
      <category>weeklyretro</category>
      <category>bot</category>
    </item>
    <item>
      <title>Solve "MongooseError: Operation 'x.find()` buffering timed out after 10000ms"</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Sun, 16 May 2021 06:47:01 +0000</pubDate>
      <link>https://dev.to/arunkc/solve-mongooseerror-operation-x-find-buffering-timed-out-after-10000ms-3d3j</link>
      <guid>https://dev.to/arunkc/solve-mongooseerror-operation-x-find-buffering-timed-out-after-10000ms-3d3j</guid>
      <description>&lt;p&gt;This error ate me out for at most 2 days. When I first saw this error I was like, Whhaaattt?? 😵 The connection was ok since the console said so. Or was it? &lt;/p&gt;

&lt;h2&gt;
  
  
  The problem I faced
&lt;/h2&gt;

&lt;p&gt;When I tried connecting to mongodb it didn't through any error as you can see.&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%2Fl8bvjiihgaxka07tgaaa.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%2Fl8bvjiihgaxka07tgaaa.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
In my case, I had mongo.js file with the following code that I utilized in index.js file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mongo.js&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MONGOPATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;keepAlive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;useNewUrlParser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;useUnifiedTopology&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;useFindAndModify&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="s2"&gt;`Connected to Mongo! Database name: "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connections&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error connecting to mongo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;index.js&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../mongo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;mongo&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Connected to mongo!!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="p"&gt;};&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;But when I tried to execute the function that uses a find() operation on the model it threw the following error.&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%2Fmda6n9grtvve2me3d4gh.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%2Fmda6n9grtvve2me3d4gh.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
As you can see it threw the buffering timed out error. &lt;/p&gt;
&lt;h2&gt;
  
  
  So what was the error actually?
&lt;/h2&gt;

&lt;p&gt;According to the &lt;a href="https://mongoosejs.com/docs/connections.html#buffering" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; of mongoose:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mongoose lets you start using your models immediately, without waiting for mongoose to establish a connection to MongoDB.&lt;/p&gt;

&lt;p&gt;That's because mongoose buffers model function calls internally. This buffering is convenient, but also a common source of confusion. Mongoose will not throw any errors by default if you use a model without connecting.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So that means we are trying to call the model without even establishing a connection with the database. &lt;br&gt;
(Yea that was the problem)&lt;/p&gt;
&lt;h2&gt;
  
  
  So how to solve this??
&lt;/h2&gt;

&lt;p&gt;That's simple (yea I know, so simple that it made me crazy for 2 days 😵), we need to use &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function" rel="noopener noreferrer"&gt;async/await&lt;/a&gt; with connect() or createConnection(). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updated indes.js&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../mongo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arg3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;mongo&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Connected to mongo!!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="p"&gt;};&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;As you can see the only change I had to do was to utilize async/await in this code. &lt;/p&gt;

&lt;p&gt;Here the function that utilizes the model will be called into this code via command.execute(). Since we are turning in the arrow function into an async function and using await so that command.execute() runs first, we won't face the buffer problem anymore. &lt;/p&gt;
&lt;h2&gt;
  
  
  How to connect MongoDB Atlas with your Node.js driver?
&lt;/h2&gt;

&lt;p&gt;For setting up MongoDB Atlas and connecting with Node.js, you could check out this article. &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/veroca88" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F587115%2Fbf055cbe-3715-4648-9220-4616430def40.jpeg" alt="veroca88"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/veroca88/set-up-mongodb-atlas-and-connect-with-node-js-avoid-mongooseerror-operation-x-findone-buffering-timed-out-after-10000ms-5dpi" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Set up MongoDB Atlas and connect with Node.js (avoid MongooseError: Operation x.findOne() buffering timed out after 10000ms)&lt;/h2&gt;
      &lt;h3&gt;Vero ・ Apr 17 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#mongodb&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#node&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#database&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


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

&lt;p&gt;During development we will all face problems like this, be it big or small, share it with others. If this article could at least help one of you and save your time, then the objective of this article is fulfilled. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: If you wanna check out the project in which I faced this problem, here is the link, contributions are welcome&lt;/em&gt; ❤️ &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Arun-kc" rel="noopener noreferrer"&gt;
        Arun-kc
      &lt;/a&gt; / &lt;a href="https://github.com/Arun-kc/novicebot" rel="noopener noreferrer"&gt;
        novicebot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ⚔️ A fun-oriented discord bot made using DiscordJS, NodeJS, and MongoDB
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  💜 Thank you for reading 💜
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🌏 Like | Follow | Share 🌏
&lt;/h2&gt;

</description>
      <category>mongodb</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The first bug I Smashed in Bug Smash!!</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Fri, 07 May 2021 16:28:59 +0000</pubDate>
      <link>https://dev.to/arunkc/the-first-bug-i-smashed-in-bug-smash-4fc6</link>
      <guid>https://dev.to/arunkc/the-first-bug-i-smashed-in-bug-smash-4fc6</guid>
      <description>&lt;h3&gt;
  
  
  Imagine an awesome intro here!!😜
&lt;/h3&gt;

&lt;p&gt;Hi all, I'm pretty new to this community. So let me share a bit about myself. I'm &lt;a href="https://www.linkedin.com/in/arun-kc/" rel="noopener noreferrer"&gt;Arun&lt;/a&gt;, a CS graduate, from a small town in Kerala, India. I love to build things. I found this community somehow from Github. I really don't remember how but I'm really glad to be part of this community.&lt;br&gt;
Yea yea... I know you want me to get into the post asap. So here goes nothing....&lt;/p&gt;
&lt;h3&gt;
  
  
  Open Source Background
&lt;/h3&gt;



&lt;p&gt;I'm brand new to Open Source as a contributor. I have some experience in coding as that was pretty much what I was interested in and what I enjoy. &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%2Fn05s4smrgu5vkvqh35o9.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%2Fn05s4smrgu5vkvqh35o9.png" alt="Me while coding!"&gt;&lt;/a&gt;&lt;br&gt;
(What?? Is it the meme? I do enjoy it even though it makes me crazy! and stop grinning 😅)&lt;/p&gt;

&lt;p&gt;It's really an awesome experience and feeling when you collaborate with different people and build stuffs. &lt;strong&gt;Collaboration first, coding second!!&lt;/strong&gt; Some of you, who are part of EddieHub, may have thought that I just copied &lt;a href="https://github.com/eddiejaoude" rel="noopener noreferrer"&gt;Eddie Jaoude&lt;/a&gt;(No I didn't). I'm part of an amazing community called &lt;a href="https://eddiehubcommunity.github.io/" rel="noopener noreferrer"&gt;EddieHub&lt;/a&gt;. They were really helpful when I first entered this forest called Open Source.&lt;/p&gt;

&lt;p&gt;Ok, now let's move into my experience in Bug Smash!!&lt;/p&gt;
&lt;h3&gt;
  
  
  About This Bug
&lt;/h3&gt;




&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/forem/forem/issues/13612" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Remove extra space from readable_publish_date
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#13612&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/hadiidbouk" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F19314956%3Fv%3D4" alt="hadiidbouk avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/hadiidbouk" rel="noopener noreferrer"&gt;hadiidbouk&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/forem/forem/issues/13612" rel="noopener noreferrer"&gt;&lt;time&gt;May 02, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;I am using the GET latest articles endpoint in &lt;a href="https://github.com/hadiidbouk/DEV" rel="noopener noreferrer"&gt;my project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;readable_publish_date&lt;/code&gt; property added an extra space between the day and the month, this could be fixed on the front end, but if it's a readable publish date why not be better readable 😅&lt;/p&gt;
&lt;p&gt;&lt;a href="https://user-images.githubusercontent.com/19314956/116818941-858c7f00-ab76-11eb-9776-e5f60946054b.png" rel="nofollow noopener noreferrer"&gt;&lt;img width="259" alt="Screen Shot 2021-05-02 at 6 42 01 PM" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F19314956%2F116818941-858c7f00-ab76-11eb-9776-e5f60946054b.png"&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/forem/forem/issues/13612" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The bug was really a small one. It was actually an extra space in &lt;code&gt;readable_publish_date&lt;/code&gt; property.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I Smashed It
&lt;/h3&gt;

&lt;p&gt;I was able to smash it by tweaking the format specifier. Even though it was a small bug, this PR was a huge step for me in Open Source contributions. &lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/forem/forem/pull/13660" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Update format specifiers in readable_publish_date
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#13660&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/Arun-kc" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F22231409%3Fv%3D4" alt="Arun-kc avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/Arun-kc" rel="noopener noreferrer"&gt;Arun-kc&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/forem/forem/pull/13660" rel="noopener noreferrer"&gt;&lt;time&gt;May 05, 2021&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;What type of PR is this? (check all applicable)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Refactor&lt;/li&gt;
&lt;li&gt;[ ] Feature&lt;/li&gt;
&lt;li&gt;[x] Bug Fix&lt;/li&gt;
&lt;li&gt;[ ] Optimization&lt;/li&gt;
&lt;li&gt;[ ] Documentation Update&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Description&lt;/h2&gt;
&lt;p&gt;Removed extra spaces from readable_publish_date by changing format specifiers&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Related Tickets &amp;amp; Documents&lt;/h2&gt;
&lt;p&gt;Fixes #13612&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;QA Instructions, Screenshots, Recordings&lt;/h2&gt;
&lt;p&gt;I'm not sure about this since the only change done is updating format specifiers&lt;/p&gt;
&lt;h3&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;UI accessibility concerns?&lt;/h3&gt;
&lt;p&gt;N/A&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Added tests?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Yes&lt;/li&gt;
&lt;li&gt;[x] No, and this is why: I guess old test will still work&lt;/li&gt;
&lt;li&gt;[ ] I need help with writing tests&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;[optional] Are there any post deployment tasks we need to perform?&lt;/h2&gt;
&lt;p&gt;N/A&lt;/p&gt;
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;[optional] What gif best describes this PR or how it makes you feel?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://camo.githubusercontent.com/93a2233b6b06703ca4fc37206b7c6a06acfc6b40e321c112efef15f3b7a1d8db/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f3133436d6a75336d61496a5374572f67697068792e676966" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/93a2233b6b06703ca4fc37206b7c6a06acfc6b40e321c112efef15f3b7a1d8db/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f3133436d6a75336d61496a5374572f67697068792e676966" alt="I'm nervous"&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/forem/forem/pull/13660" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Reflection
&lt;/h3&gt;

&lt;p&gt;I had a great experience by being part of this bug smash event. The community members were really helpful and encouraging. Especially &lt;strong&gt;rhymes&lt;/strong&gt;, I'm really thankful for your help. &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__2693"&gt;
    &lt;a href="/rhymes" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F2693%2Fbfd9a4a5-92b3-4ac3-a276-3ccb68d78203.jpg" alt="rhymes image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/rhymes"&gt;rhymes&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/rhymes"&gt;Such software as dreams are made on.
I mostly rant about performance, unnecessary complexity, privacy and data collection.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
I learned a lot through this experience. This was the first time I had to use &lt;a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10" rel="noopener noreferrer"&gt;WSL&lt;/a&gt; and work on it for a project. Setting up the environment and running tests in it was a new encounter for me. 

&lt;p&gt;As for the next steps I'm planning to explore this wild forest called Open Source more. I'm sure that I will learn a lot and meet new people through this...(hopefully 🤞)&lt;/p&gt;

&lt;h3&gt;
  
  
  Suggestions for DEV Community Bug Smash
&lt;/h3&gt;

&lt;p&gt;I only have one thing to say to this community. &lt;strong&gt;🎉Keep up the good work!!🎉&lt;/strong&gt;. Stumbling upon this community was such an awesome thing that happened to me this year🤩.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Confession: Yea I did copy Eddie earlier 😋&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://dribbble.com/shots/15031394-Eclectic-People" rel="noopener noreferrer"&gt;&lt;em&gt;Cover by Eclectic People&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devbugsmash</category>
    </item>
    <item>
      <title>What is an NFT?</title>
      <dc:creator>Arun K C</dc:creator>
      <pubDate>Sun, 02 May 2021 11:28:31 +0000</pubDate>
      <link>https://dev.to/arunkc/what-is-an-nft-18ln</link>
      <guid>https://dev.to/arunkc/what-is-an-nft-18ln</guid>
      <description>&lt;p&gt;This is the first question that popped in my head when I came across &lt;a href="https://www.cryptokitties.co/"&gt;CryptoKitties&lt;/a&gt;. CryptoKitties is a game centered around collectibles. You can trade and sell these virtual kittens. I'm not gonna dig deep into how this game works. I haven't played it yet so no comments on that. Let's just say, it's how we used to collect poke cards or similar collectibles. &lt;/p&gt;

&lt;p&gt;So why I bring this up now is because each cryptokitties are unique. How? Cryptokitties use NFT's i.e, &lt;strong&gt;Non-fungible token&lt;/strong&gt;. "Non-fungible" means that it's unique, it can't be replaced by anything. To be precise we cannot actually determine the worth because of its uniqueness. So now you get why I brought up cryptokitties? Each tokens are one of a kind, if we want to trade it we will get something completely different.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JfN_hNRq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1pc04cphduxxl2d2zga.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JfN_hNRq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1pc04cphduxxl2d2zga.gif" alt="cryptokitties gif" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make it clearer cryptocurrencies like Bitcoin or let's just say the currency we use daily are fungible. Means its interchangeable, a bitcoin in your hand is of the same worth as one that I have (not that I really have one!!)&lt;/p&gt;

&lt;h2&gt;
  
  
  How do NFTs work?
&lt;/h2&gt;

&lt;p&gt;Most NFTs are part of the Ethereum blockchain. The majority of them follow &lt;a href="https://ethereum.org/en/developers/docs/standards/tokens/erc-721/"&gt;ERC-721&lt;/a&gt; and &lt;a href="https://eips.ethereum.org/EIPS/eip-1155"&gt;ERC-1155&lt;/a&gt; standards. NFTs work differently from the usual cryptocurrencies, say a BTC or ETH coins. Why? you ask. Because it stores extra pieces of information that make them unique. Now you might have a doubt like does only Etherum blockchain have NFTs? No, absolutely not, any blockchain can have its own NFTs (&lt;a href="https://dappradar.com/blog/tron-introduces-nft-standard-trc-721"&gt;Some already have&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  So if it's like bitcoin can we buy/sell it?
&lt;/h2&gt;

&lt;p&gt;Yes, you can. You can buy/sell NFTs at marketplaces like &lt;a href="https://opensea.io/"&gt;OpenSea&lt;/a&gt;, &lt;a href="https://rarible.com/"&gt;Rarible&lt;/a&gt; etc. There are many more, you can read about them &lt;a href="https://influencermarketinghub.com/nft-marketplaces/"&gt;here&lt;/a&gt;. NFTs can be anything digital, be it a simple gif, memes, drawings, you name it. Recently the famous &lt;a href="https://www.bbc.com/news/world-us-canada-56948514"&gt;Disaster Girl meme was sold for $500,000&lt;/a&gt;. Twitter co-founder Jack Dorsey even &lt;a href="https://www.cnbc.com/2021/03/22/twitter-ceo-jack-dorseys-first-tweet-nft-sells-for-2point9-million.html"&gt;sold his first tweet as NFT for under $3 million&lt;/a&gt;. Yea people do buy them!!&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-00000000000020-772" src="https://platform.twitter.com/embed/Tweet.html?id=00000000000020"&gt;
&lt;/iframe&gt;

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



&lt;/p&gt;

&lt;h2&gt;
  
  
  Digital assets can be copied, so what's the point?
&lt;/h2&gt;

&lt;p&gt;Yes again, you are right, digital assets can indeed be copied. But NFTs are designed to give you something that can't be copied, ie the ownership of the work. It's just like how some famous art pieces are owned by an individual or a museum, but still, its prints are available in the market for anyone to buy. &lt;/p&gt;

&lt;h2&gt;
  
  
  Can I build my own NFT tokens?
&lt;/h2&gt;

&lt;p&gt;Yes, you can, just like how you can build your own cryptocurrency you can build an NFT too. If you are interested in that, you can &lt;a href="https://eips.ethereum.org/EIPS/eip-721"&gt;read further here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;The trend of NFT is far from over. It's just the tip of the iceberg. &lt;a href="https://www.thewrap.com/nft-market-surges-2100-to-2-billion-in-q1-sales/"&gt;More than $2 billion was spent on NFTs during the first quarter of 2021&lt;/a&gt;. The demand for NFT is continuing to surge and it's not showing any sign of slowing down. As more and more blockchains are coming up with their own NFT services, we are witnessing the emergence of a new market. It's a hot topic that everyone's interested in.&lt;/p&gt;

&lt;h2&gt;
  
  
  💜 Thank you for reading 💜
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🌏 Like | Follow | Share 🌏
&lt;/h3&gt;

</description>
      <category>blockchain</category>
      <category>beginners</category>
      <category>todayilearned</category>
    </item>
  </channel>
</rss>
