<?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>Forem: Pranav Arora</title>
    <description>The latest articles on Forem by Pranav Arora (@pranavarora1895).</description>
    <link>https://forem.com/pranavarora1895</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%2F590359%2F78854abe-7d08-403e-b584-bc6afa723f18.jpg</url>
      <title>Forem: Pranav Arora</title>
      <link>https://forem.com/pranavarora1895</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pranavarora1895"/>
    <language>en</language>
    <item>
      <title>What is an alternative to Postman? Bruno</title>
      <dc:creator>Pranav Arora</dc:creator>
      <pubDate>Sun, 13 Oct 2024 14:18:05 +0000</pubDate>
      <link>https://forem.com/pranavarora1895/what-is-an-alternative-to-postman-bruno-3ibb</link>
      <guid>https://forem.com/pranavarora1895/what-is-an-alternative-to-postman-bruno-3ibb</guid>
      <description>&lt;p&gt;&lt;strong&gt;Ever tried the Bruno API Client?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
In this post, I’d like to share my experiences with Bruno, but I’ll leave it up to you to decide which tool best suits your use case.&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%2Fif5601j58vt9a06p239y.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%2Fif5601j58vt9a06p239y.png" alt="Bruno Web Page" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Accessibility
&lt;/h2&gt;

&lt;p&gt;Bruno works offline, so there's no need to log in just to test an API. It creates a repository of API requests within the same directory as your code, making it easy to version control these requests alongside your codebase.&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%2F5u6jlnx7ndqk0oukeodc.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%2F5u6jlnx7ndqk0oukeodc.png" alt="API Request Files in GitHub" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiekksj3l5i3kxu1cc4ex.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%2Fiekksj3l5i3kxu1cc4ex.png" alt="SignUp API Testing" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bruno’s developers introduced a simple markup language, &lt;strong&gt;Bru&lt;/strong&gt;, which stores essential API data such as metadata (name, protocol type), request type, and body. This makes the request easy to read and understand for other developers when collaborating.&lt;/p&gt;
&lt;h2&gt;
  
  
  Interface
&lt;/h2&gt;

&lt;p&gt;Bruno’s interface is highly reminiscent of Postman, making it easy for new users to pick up quickly.&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%2Fxik56qxqh4ckg1ydh9hd.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%2Fxik56qxqh4ckg1ydh9hd.png" alt="Bruno Interface" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Much like Postman, you can create collections and environment variables, which are also stored in the repository for easy access by other developers.&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%2Fcy8nzrubru8wk0tr1hds.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%2Fcy8nzrubru8wk0tr1hds.png" alt="Runtime Environment Variables" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bruno can be used as a Desktop App, a CLI tool, or even integrated as a VS Code extension.&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%2Fjctj1kzhq1xrr6l309k7.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%2Fjctj1kzhq1xrr6l309k7.png" alt="Login API Testing" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By default, Bruno verifies SSL certificates when testing APIs. If you're working on localhost, you'll need to disable SSL/TLS certificate verification, but you can enable it again for secure connections. You can adjust this setting under &lt;strong&gt;Collections &amp;gt; Preferences &amp;gt; General&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlk4cbvmv0td2u7pxwp1.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%2Fjlk4cbvmv0td2u7pxwp1.png" alt="SSL/TLS Certificate Verification" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Overall, I found Bruno to be a fun and effective tool for API testing. I encourage you to give it a try and share your feedback—whether you love it or see room for improvement to make it a more comprehensive API client.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;PS: This is not a sponsored post; I’m simply sharing my personal experience with Bruno. I strongly encourage you to explore the following resources for more information:&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.usebruno.com/" rel="noopener noreferrer"&gt;Bruno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.usebruno.com/compare/bruno-vs-postman" rel="noopener noreferrer"&gt;Bruno vs Postman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.usebruno.com/introduction/what-is-bruno" rel="noopener noreferrer"&gt;Bruno Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  About My Project
&lt;/h2&gt;

&lt;p&gt;I used Bruno for API testing in one of my personal projects related to authentication. This full-stack authentication app was built using &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;NextJS&lt;/a&gt; with MongoDB as the database, and &lt;a href="https://mailtrap.io/" rel="noopener noreferrer"&gt;MailTrap&lt;/a&gt; as the email delivery platform for email verification. Don't forget to check out my project's demo video.&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/pranavarora1895" rel="noopener noreferrer"&gt;
        pranavarora1895
      &lt;/a&gt; / &lt;a href="https://github.com/pranavarora1895/next-auth" rel="noopener noreferrer"&gt;
        next-auth
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Full-Stack Authentication System in NextJS including email verification and forgot password
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;This Full-Stack authentication app is developed in NextJS and MongoDB as its DB. &lt;a href="https://mailtrap.io" rel="nofollow noopener noreferrer"&gt;MailTrap&lt;/a&gt; was used as an email delivery platform for email verification.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Checkout this demo&lt;/h2&gt;
&lt;/div&gt;

  
    

    &lt;span class="m-1"&gt;next_auth_video.mp4&lt;/span&gt;
  

  

  


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

&lt;/div&gt;
&lt;p&gt;First, run the development server:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm run dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
yarn dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
pnpm dev
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or&lt;/span&gt;
bun dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Open &lt;a href="http://localhost:3000" rel="nofollow noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; with your browser to see the result.&lt;/p&gt;
&lt;p&gt;You can start editing the page by modifying &lt;code&gt;app/page.tsx&lt;/code&gt;. The page auto-updates as you edit the file.&lt;/p&gt;
&lt;p&gt;This project uses &lt;a href="https://nextjs.org/docs/app/building-your-application/optimizing/fonts" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;next/font&lt;/code&gt;&lt;/a&gt; to automatically optimize and load &lt;a href="https://vercel.com/font" rel="nofollow noopener noreferrer"&gt;Geist&lt;/a&gt;, a new font family for Vercel.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Learn More&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;To learn more about Next.js, take a look at the following resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/docs" rel="nofollow noopener noreferrer"&gt;Next.js Documentation&lt;/a&gt; - learn about Next.js features and API.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/learn" rel="nofollow noopener noreferrer"&gt;Learn Next.js&lt;/a&gt; - an interactive Next.js tutorial.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can check out &lt;a href="https://github.com/vercel/next.js" rel="noopener noreferrer"&gt;the Next.js GitHub repository&lt;/a&gt; - your feedback and contributions are welcome!&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Deploy on Vercel&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The easiest way to deploy your Next.js app…&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/pranavarora1895/next-auth" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





</description>
      <category>webdev</category>
      <category>api</category>
      <category>postman</category>
      <category>bruno</category>
    </item>
    <item>
      <title>Mastering Angular Component Styling: A Guide to CSS Layering and Dynamic Class Management. No ng:deep required!</title>
      <dc:creator>Pranav Arora</dc:creator>
      <pubDate>Wed, 01 May 2024 20:04:13 +0000</pubDate>
      <link>https://forem.com/pranavarora1895/mastering-component-styling-elevate-your-css-with-layering-and-dynamic-class-management-no-ngdeep-needed-3m7j</link>
      <guid>https://forem.com/pranavarora1895/mastering-component-styling-elevate-your-css-with-layering-and-dynamic-class-management-no-ngdeep-needed-3m7j</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Component libraries make developers' lives easier as all the components developed are collected in a single library and can be reused in different applications. While creating an Angular Component library, the issue comes when we have to tweak a specific component according to the particular application requirement without touching the component library's styles. After the deprecation of &lt;a href="https://angular.io/guide/component-styles#deprecated-deep--and-ng-deep" rel="noopener noreferrer"&gt;&lt;code&gt;ng:deep&lt;/code&gt;&lt;/a&gt;, it was hard to tweak such changes.&lt;/p&gt;

&lt;p&gt;I studied how &lt;a href="https://primeng.org/" rel="noopener noreferrer"&gt;PrimeNg&lt;/a&gt; does CSS customizations to its components without &lt;code&gt;ng:deep.&lt;/code&gt; This blog will share my findings and steps to implement these component styling techniques in your component library and its consumer applications.&lt;/p&gt;

&lt;p&gt;In this blog, we will explore two powerful concepts used by PrimeNg to customize component styles without affecting other components: CSS Layering and Dynamic Class Management. These techniques allow developers to efficiently tweak the appearance of components within their own consumer application, while maintaining a clean separation of styles in their component library.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Layering&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the key strategies employed by PrimeNg is &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer" rel="noopener noreferrer"&gt;CSS Layering&lt;/a&gt;. All component styles are placed within the &lt;code&gt;@layer primeng&lt;/code&gt; rule. This approach ensures that when styling the components in our component library, the styles defined in our library take precedence over the styles defined in PrimeNg.&lt;/p&gt;

&lt;p&gt;To facilitate this, encapsulation in PrimeNg is set to None. By setting encapsulation to none, it allows the PrimeNg components to be styled from our component library, enabling greater customization options.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Dynamic Class Management&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Another important concept employed by PrimeNg is Dynamic Class Management. Without this concept, any CSS changes made for one component within our component library would inadvertently affect another component in the consumer application if the same component is used.&lt;/p&gt;

&lt;p&gt;To address this issue, Dynamic Class Management introduces a new input attribute, let's say, &lt;code&gt;styleClass&lt;/code&gt;, which is bound to the class of the component. The component is then wrapped in a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; element with the attributes &lt;code&gt;[class]="styleClass"&lt;/code&gt; and &lt;code&gt;[ngClass]="'parent-component-class'"&lt;/code&gt;. When the &lt;code&gt;styleClass&lt;/code&gt; attribute is provided by the user, it overwrites the styles defined in the &lt;code&gt;parent-component-class&lt;/code&gt;. This allows for the coexistence of both classes, with the styles specified in the &lt;code&gt;styleClass&lt;/code&gt; attribute taking precedence over the &lt;code&gt;ngClass&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Since &lt;code&gt;ng:deep&lt;/code&gt; is deprecated and no longer recommended, using Dynamic Class Management is a more modern and maintainable approach to styling components without affecting other components in the consumer application.&lt;/p&gt;

&lt;p&gt;By utilizing the &lt;code&gt;bStyleClass&lt;/code&gt; attribute with specific styling attributes, it is possible to override attributes defined in the parent class (&lt;code&gt;ngClass&lt;/code&gt;). Both &lt;code&gt;[class]&lt;/code&gt; and &lt;code&gt;[ngClass]&lt;/code&gt; will be applied, but the styles defined in &lt;code&gt;[class]&lt;/code&gt; will take precedence over &lt;code&gt;ngClass&lt;/code&gt;. Any styles not specified in &lt;code&gt;[class]&lt;/code&gt; will be inherited from the class defined in &lt;code&gt;[ngClass]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisadyg3qovvb7kvpjri4.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%2Fisadyg3qovvb7kvpjri4.png" alt="Component Styling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Example&lt;/em&gt;&lt;/strong&gt;: In the case of the &lt;code&gt;button&lt;/code&gt; component, the styles specified in our component library were overridden by the styles in the consumer apps (App 1 and App2). However, other attributes (such as text and size) from our library were applied since there was no override for them in &lt;code&gt;button&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Steps to Adopt Layering and Dynamic Class Management in the Component Library&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To implement layering and dynamic class management in our component library, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Layer all the CSS in the component library using &lt;code&gt;@layer component-library{}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Introduce a new input attribute, let's say, &lt;code&gt;bStyleClass&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Wrap the component template in a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; element with the following attributes: &lt;code&gt;&amp;lt;div [class]="bStyleClass!" [ngClass]="'parent-component-class'"&amp;gt;...&amp;lt;/div&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set Encapsulation to None for all components in the component library.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Steps to Adopt Layering and Dynamic Class Management in the Consumer Application&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To implement layering and dynamic class management in the consumer applications, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set encapsulation to None for all components in the consumer application.&lt;/li&gt;
&lt;li&gt;Add the &lt;code&gt;bStyleClass&lt;/code&gt; attribute to the components and assign a className.&lt;/li&gt;
&lt;li&gt;In the component's CSS, style the component with the given className as the &lt;code&gt;parent-component-class&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is important to note that if we use the @layer, the behavior of @layer changes when &lt;code&gt;!important&lt;/code&gt; is used. The style precedence of attributes with &lt;code&gt;!important&lt;/code&gt; reverses the concept of precedence in layers.&lt;/p&gt;

&lt;p&gt;Additionally, when styling consumer applications, it is advisable to focus on application-specific attributes rather than core-specific attributes. Application-specific attributes include padding, margin, color, width, height, etc. By leveraging the use of &lt;code&gt;!important&lt;/code&gt; on core-specific attributes and avoiding it on application-specific attributes, we can maintain better control over style precedence. When mentioning &lt;code&gt;!important&lt;/code&gt; in the component library, it is important to specify if it has been used on a core attribute that should not be changed in the consumer application.&lt;/p&gt;

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

&lt;p&gt;By employing CSS Layering and Dynamic Class Management, developers can effectively customize component styles without impacting other components in their component library. These techniques, as demonstrated in PrimeNg, provide a robust approach to component styling and enable greater flexibility and control over the appearance of applications.&lt;/p&gt;

&lt;p&gt;To further enhance component styling, concepts like &lt;code&gt;[style]&lt;/code&gt; and &lt;code&gt;[ngStyle]&lt;/code&gt; can be utilized to programmatically change inline CSS in the consumer application.&lt;/p&gt;

&lt;p&gt;Remember, with CSS Layering and Dynamic Class Management, developers can create visually appealing and highly customizable applications while maintaining a clean and organized codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attributions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://primeng.org/" rel="noopener noreferrer"&gt;PrimeNg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/primefaces/primeng" rel="noopener noreferrer"&gt;PrimeNg GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://angular.io/guide/style-precedence" rel="noopener noreferrer"&gt;Angular Style Precedence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer" rel="noopener noreferrer"&gt;CSS Layering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>css</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>hardWareHouse Inventory Management Application</title>
      <dc:creator>Pranav Arora</dc:creator>
      <pubDate>Mon, 08 Aug 2022 08:49:00 +0000</pubDate>
      <link>https://forem.com/pranavarora1895/hardwarehouse-inventory-management-application-34pk</link>
      <guid>https://forem.com/pranavarora1895/hardwarehouse-inventory-management-application-34pk</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Inspiration behind the idea:&lt;/strong&gt; While having a discussion with one of my friends, she stated a problem that she faces daily in her shop. She needed an app to manage her inventory which is easy to use and can be scalable as per the demand. She didn't want to use MS-Excel because she wanted her data to persist and available whenever she needed. So I thought to build a model Inventory Management App using Redis Database that can solve her problems of scalability, data persistence and availability.&lt;/p&gt;

&lt;p&gt;hardWareHouse is a hypothetical model shop that could be used to showcase the features of Redis Database. It uses Redis as its primary database, Flask as the backend that connects with Redis, and React as the frontend that renders the data on the browser.&lt;/p&gt;

&lt;p&gt;Link to the repository: &lt;a href="https://github.com/pranavarora1895/hardWareHouseInventory" rel="noopener noreferrer"&gt;hardWareHouse Inventory Management App&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;License: &lt;a href="https://github.com/pranavarora1895/hardWareHouseInventory/blob/main/LICENSE" rel="noopener noreferrer"&gt;MIT&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Wacky Wildcards&lt;/p&gt;

&lt;h3&gt;
  
  
  Video Explainer of My Project
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  Language Used
&lt;/h3&gt;

&lt;p&gt;Python&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/pranavarora1895" rel="noopener noreferrer"&gt;
        pranavarora1895
      &lt;/a&gt; / &lt;a href="https://github.com/pranavarora1895/hardWareHouseInventory" rel="noopener noreferrer"&gt;
        hardWareHouseInventory
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      An inventory management app for a hypothetical shop hardWareHouse that uses Redis as its primary database.
    &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;hardWareHouse Inventory Management Application&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Runner-up of Redis x DevTo Competition. View here -&amp;gt; &lt;a href="https://dev.to/devteam/redis-hackathon-winners-announced-524d" rel="nofollow"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6iuBNWkQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/pranavarora1895/hardWareHouseInventory/assets/48170643/65166f0d-5f02-4878-ac36-30c5aa042ed0" alt="devto-runner-up"&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;An inventory management application for a shop to keep the track of its products data. It uses Redis as its primary database, Flask as the backend that connects with Redis, and React as the frontend that renders the data on the browser.&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/48170643/183287691-e1d6f7c1-59b4-4dfc-a289-a8804d98410f.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MimtDs29--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/48170643/183287691-e1d6f7c1-59b4-4dfc-a289-a8804d98410f.png" alt="architecture"&gt;&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/48170643/183287720-2631aeeb-e3f8-40a5-aeea-bb0b41feba84.JPG"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--faWz5mQg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/48170643/183287720-2631aeeb-e3f8-40a5-aeea-bb0b41feba84.JPG" alt="appPage"&gt;&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;hardWareHouse Inventory Dashboard&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/48170643/183287718-b986896f-8bd0-4c2b-a24a-92250b6561b4.JPG"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--626qcqgw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/48170643/183287718-b986896f-8bd0-4c2b-a24a-92250b6561b4.JPG" alt="newProduct"&gt;&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Way to Add a new Product&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/48170643/183287721-af856e0a-9e44-4cbf-81ba-9448d1048621.JPG"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AealvgZY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/48170643/183287721-af856e0a-9e44-4cbf-81ba-9448d1048621.JPG" alt="editProduct"&gt;&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Way to Update any Product&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/48170643/183287779-cf23fc53-c7ed-46d2-a47c-360715bddbdb.JPG"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0kJYmknf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/48170643/183287779-cf23fc53-c7ed-46d2-a47c-360715bddbdb.JPG" alt="searchProduct"&gt;&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Search a Product and the table will render accordingly&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Overview video&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Here's a short video that explains the project and how it uses Redis:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/ahwKhVpx3OQ" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hSdsSkKg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/48170643/183334490-ba865a00-b4b2-4d90-bf52-09560e929d73.png" alt="hardwarehouseYoutubeThumbnail"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Technical Stack&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Database: &lt;em&gt;Redis&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Backend: &lt;em&gt;Flask&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Frontend: &lt;em&gt;React&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;How the data is stored:&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;From &lt;code&gt;redis_om&lt;/code&gt; module, following are used to create the &lt;code&gt;Product&lt;/code&gt; schema:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JsonModel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Field&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The product data is stored in various keys and various data types.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;product_name: str&lt;/li&gt;
&lt;li&gt;product_desc: str&lt;/li&gt;
&lt;li&gt;price: PositiveInt&lt;/li&gt;
&lt;li&gt;units: PositiveInt&lt;/li&gt;
&lt;li&gt;lower_limit_stock: PositiveInt&lt;/li&gt;
&lt;li&gt;timestamp: datetime&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-python notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s1"&gt;redis_om&lt;/span&gt; &lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-v"&gt;Field&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/pranavarora1895/hardWareHouseInventory" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ek0mml4s86weya432wd.png" alt="architecture" width="800" height="569"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tran1wf6ci1nxzzm864.JPG" alt="appPage" width="800" height="434"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;hardWareHouse Inventory Dashboard&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq48o4fa00rnifo0cfe8q.JPG" alt="newProduct" width="800" height="434"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Way to Add a new Product&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6o1xshkn3xxsbh4tflz.JPG" alt="editProduct" width="800" height="433"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Way to Update any Product&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobzoik7budwciv06qmh1.JPG" alt="searchProduct" width="800" height="433"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Search a Product and the table will render accordingly&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  ⏳ &lt;em&gt;Time taken to build this app:&lt;/em&gt; &lt;a href="https://wakatime.com/@pranavarora1895/projects/jzwipwmfui?start=2022-08-02&amp;amp;end=2022-08-09" rel="noopener noreferrer"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BvqyW6Ib--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://wakatime.com/badge/user/e72a1859-4793-4da2-b36b-49c7378256a0/project/e60d1b21-00c0-4f29-bfba-5f5175700f5a.svg" alt="wakatime" width="166" height="20"&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;h3&gt;
  
  
  Collaborators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;myself: &lt;a href="https://dev.to/pranavarora1895"&gt;dev.to/pranavarora1895&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Check out &lt;a href="https://redis.io/docs/stack/get-started/clients/#high-level-client-libraries" rel="noopener noreferrer"&gt;Redis OM&lt;/a&gt;, client libraries for working with Redis as a multi-model database.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Use &lt;a href="https://redis.info/redisinsight" rel="noopener noreferrer"&gt;RedisInsight&lt;/a&gt; to visualize your data in Redis.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sign up for a &lt;a href="https://redis.info/try-free-dev-to" rel="noopener noreferrer"&gt;free Redis database&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>redishackathon</category>
      <category>react</category>
      <category>flask</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Quick Notes for Blockchain. Concepts Simplified!!</title>
      <dc:creator>Pranav Arora</dc:creator>
      <pubDate>Fri, 25 Mar 2022 04:06:04 +0000</pubDate>
      <link>https://forem.com/pranavarora1895/quick-notes-for-blockchain-concepts-simplified-2kmf</link>
      <guid>https://forem.com/pranavarora1895/quick-notes-for-blockchain-concepts-simplified-2kmf</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hello Guys!! Recently, I have been learning some Blockchain Concepts along with Smart Contracts using Solidity and Web3.py. While I was preparing some notes for further reference, I thought to share them with you. I have tried my best to simplify these notes so that anyone with zero knowledge of Blockchain can also understand from them. Save this post as these notes can also help you for quick reference.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  You can also refer my GitHub blockchain repository: &lt;a href="https://github.com/pranavarora1895/BlockChain_Fundamentals" rel="noopener noreferrer"&gt;Blockchain Fundamentals&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;As soon as I learn more concepts, I will be updating this post. Meanwhile you can comment down your suggestions and I will include your contributions into this post.&lt;/em&gt;😀&lt;/p&gt;




&lt;h3&gt;
  
  
  Smart Contracts - Nick Szabo
&lt;/h3&gt;

&lt;p&gt;Smart contracts are self executing sets of Instructions, without 3rd parties.&lt;/p&gt;

&lt;p&gt;Smart Contracts are written in code. Ethereum does that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Oracles
&lt;/h3&gt;

&lt;p&gt;Oracles bring data to blockchain or allows computation outside the blockchain environment.&lt;/p&gt;

&lt;p&gt;Smart Contracts = Decentralized Applications = Dapps&lt;/p&gt;

&lt;p&gt;Chainlink - Decentralized modular oracle network that allows to bring data to smart contracts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advantages of Smart Contracts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Decentralized&lt;/li&gt;
&lt;li&gt;Transparent&lt;/li&gt;
&lt;li&gt;Speed&lt;/li&gt;
&lt;li&gt;Immutable&lt;/li&gt;
&lt;li&gt;Remove Counterparty Risk&lt;/li&gt;
&lt;li&gt;Allow for trust minimized agreements&lt;/li&gt;
&lt;li&gt;Hybrid smart contracts combine on and of-chain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  DAOs
&lt;/h3&gt;

&lt;p&gt;Decentralized Autonomous Organizations are the applications that live in the smart contracts. Similar to traditional orgs. Used for governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  🦊 Metamask - An Ethereum wallet
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Testnets
&lt;/h3&gt;

&lt;p&gt;Free for testing smart contracts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mainnet
&lt;/h3&gt;

&lt;p&gt;Mainnet costs money and considered live&lt;/p&gt;

&lt;h3&gt;
  
  
  Faucet
&lt;/h3&gt;

&lt;p&gt;Is an application that gives us free test tokens, like free test rinkeby ethereum.&lt;/p&gt;

&lt;h3&gt;
  
  
  Block Explorer
&lt;/h3&gt;

&lt;p&gt;Etherscan is a block explorer. An application that allows us to “view” transactions that happen on a blockchain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gas
&lt;/h3&gt;

&lt;p&gt;Gas is a unit of computational measure. The more computation a transaction uses the more “gas” you have to pay for.&lt;/p&gt;

&lt;p&gt;Every transaction that happens on-chain pays a “gas fee” to node operators.&lt;/p&gt;

&lt;p&gt;The amount of “gas” used and how much you pay depends on how “computationally expensive” your transaction is .&lt;/p&gt;

&lt;p&gt;Sending ETH to address would be “cheaper:” than sending ETH to 1000 addresses. &lt;/p&gt;

&lt;p&gt;Gas Price: How much it costs per unit of gas&lt;/p&gt;

&lt;p&gt;Gas Limit: Max amount of gas in a transaction&lt;/p&gt;

&lt;p&gt;Transaction fee: Gas Used * Gas Price&lt;/p&gt;

&lt;p&gt;example, 21000 gas @ 1 GWEI per gas = 21000 GWEI&lt;/p&gt;

&lt;h3&gt;
  
  
  Hash
&lt;/h3&gt;

&lt;p&gt;A unique fixed length string, meant to identify a piece of data. They are created by placing said data into a “hash function”.&lt;/p&gt;

&lt;p&gt;Eth uses &lt;strong&gt;Keccak-256 (SHA 3)&lt;/strong&gt; algorithm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://andersbrownworth.com/blockchain/" rel="noopener noreferrer"&gt;Blockchain Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mines have to solve a problem inorder to create a block. For example, in this site’s example, the hash should be started from 4 zeroes. For that, the nonce is solved in such a way where the hash brings 4 zeros.&lt;/p&gt;

&lt;h3&gt;
  
  
  Block
&lt;/h3&gt;

&lt;p&gt;A block contains a list of transactions mined together.&lt;/p&gt;

&lt;p&gt;Its distributed as many independent users are running the blockchain software which then compares each other’s blockchain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Genesis Block
&lt;/h3&gt;

&lt;p&gt;First block in a blockchain. Its prev block value is 0.&lt;/p&gt;

&lt;p&gt;Block in blockchain Consists of:- &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Block number&lt;/li&gt;
&lt;li&gt;Nonce&lt;/li&gt;
&lt;li&gt;Data&lt;/li&gt;
&lt;li&gt;Prev&lt;/li&gt;
&lt;li&gt;Hash&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mining
&lt;/h3&gt;

&lt;p&gt;The process of finding the “solution” to the blockchain “problem”.&lt;/p&gt;

&lt;p&gt;In our example, the “problem” was to find a hash that starts with four zeros. &lt;strong&gt;(algo used = SHA256)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nodes get paid for mining blocks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nonce
&lt;/h3&gt;

&lt;p&gt;Number used once. It is used to find the solution to the blockchain problem. &lt;/p&gt;

&lt;p&gt;In eth, It’s also used to define the transaction number for an account/address.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Transactions occur
&lt;/h2&gt;

&lt;p&gt;By using Public and Private Keys&lt;/p&gt;

&lt;h3&gt;
  
  
  Private Key
&lt;/h3&gt;

&lt;p&gt;Only known to the key holder, it’s used to “sign” transactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Public Key
&lt;/h3&gt;

&lt;p&gt;Key which is made out of private key by Elliptic Curve Digital Signature Algorithm(ECDSA) in ETH.&lt;/p&gt;

&lt;h3&gt;
  
  
  How the address is created
&lt;/h3&gt;

&lt;p&gt;Private Key —&amp;gt; Public Key —&amp;gt; Address (in Hexadecimel)&lt;/p&gt;

&lt;h3&gt;
  
  
  Node
&lt;/h3&gt;

&lt;p&gt;A single instance in a decentralized network. (one of the Peer A, Peer B and Peer C running those blockchain software)&lt;/p&gt;

&lt;p&gt;Blockchains are resilient. If any node goes down, since there are so many independent nodes running and the requirement is only one node should run at all times.&lt;/p&gt;

&lt;p&gt;Blockchain nodes keep lists of the transactions that occur.&lt;/p&gt;

&lt;p&gt;Blockchain can run decentralized database and with ETH it can run decentralized Computation&lt;/p&gt;

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

&lt;p&gt;Consists of Proof of Work and Proof of State. It is the mechanism used to agree on the state of a blockchain.&lt;/p&gt;

&lt;p&gt;ETH and bitcoin use Nakamoto Consensus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof of Work
&lt;/h2&gt;

&lt;p&gt;When we press that mine button, means we are showing proof of work. If any node’s blockchain differs and that is ignored, that’s called consensus.&lt;/p&gt;

&lt;p&gt;Consensus broken of two pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chain Selection&lt;/li&gt;
&lt;li&gt;Sybil Resistance - proof of work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sybil Resistance
&lt;/h3&gt;

&lt;p&gt;ETH and Bitcoin uses sybil resistance mechanism.&lt;/p&gt;

&lt;p&gt;It finds out who is the block author node who mined, and the other nodes verify it.&lt;/p&gt;

&lt;p&gt;It prevents users to make fake nodes and blockchains.&lt;/p&gt;

&lt;p&gt;PoW(Proof of Work) and PoS(Proof of Stake) comes under SR.&lt;/p&gt;

&lt;h3&gt;
  
  
  PoW
&lt;/h3&gt;

&lt;p&gt;Mining comes under PoW. Computational Expensive activity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Block Time -&lt;/strong&gt; It is the time taken by block to publish. If Block time is more, the problem is hard, if it is less, the problem is easy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chain Selection
&lt;/h3&gt;

&lt;p&gt;How to know that which blockchain is the real blockchain or true blockchain.&lt;/p&gt;

&lt;p&gt;Nakamoto consensus which is the combination of the proof of work and the longest chainrule. (most number of blocks)&lt;/p&gt;

&lt;h3&gt;
  
  
  Block Confirmations
&lt;/h3&gt;

&lt;p&gt;Number of block confirmations are defined as number of blocks that are added after our transaction block.&lt;/p&gt;

&lt;p&gt;Therefore, if your transaction has 13 block confirmations (see above graphic), then there have been 12 blocks mined since the block was mined that included your transaction.&lt;/p&gt;

&lt;p&gt;Gas fee is obtained by the miners in PoW and by the validators in PoS.&lt;/p&gt;

&lt;p&gt;Solving the problem is highly competitive as the one who solves it first gets Tx. fee as well as block reward given by protocol/blockchain. ( halving reward → block reward cut in half for some period of time.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Attacks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Sybil Attack
&lt;/h3&gt;

&lt;p&gt;When a user creates whole bunch of pseudo-anonymous accounts to inflience the network. Really difficult in ETH BTC.&lt;/p&gt;

&lt;h3&gt;
  
  
  51% Attack
&lt;/h3&gt;

&lt;p&gt;In &lt;em&gt;ETH Classic&lt;/em&gt; there was a rule that if blockchain is 51% matched in Longest chain rule, its good to go. The intruders then could fork the network and bring it to their network and make that 51%. Now they have the power to influence the network as they have the longest chain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Drawbacks of PoW
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses a lot of energy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To overcome this drawback, many companies are now using Proof of Stake (PoS). ETH 2.0 will have Proof of Stake. &lt;/p&gt;

&lt;h3&gt;
  
  
  Proof of Stake
&lt;/h3&gt;

&lt;p&gt;ETH 2.0, Avalanche, Polygon use PoS. Different sybil resistance mechanism.&lt;/p&gt;

&lt;p&gt;Proof of Stake nodes put up collateral as a sybil resistance mechanism.&lt;/p&gt;

&lt;p&gt;For example, ETH 2.0 will put some ETHs as a proof of stake. If they misbehave, they are going to lose those ETHs.&lt;/p&gt;

&lt;p&gt;Here miners (that were in PoW) are called Validators. They validate other nodes. Nodes are randomly chosen to propose a new block.&lt;/p&gt;

&lt;h3&gt;
  
  
  Randomness
&lt;/h3&gt;

&lt;p&gt;ETH 2.0 uses RANDAO which collectively chooses the random number.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses much less energy&lt;/li&gt;
&lt;li&gt;Scalable unlike highly variable gas prices&lt;/li&gt;
&lt;li&gt;Sharding - a blockchain of blockchain - it can increase number of blocks significantly and controls gas price.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Drawback
&lt;/h3&gt;

&lt;p&gt;Slightly away from decentralization - You need to pay a stake(cost) to participate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layers in Blockchain
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Layer 1: Base Layer blockchain implementation

&lt;ul&gt;
&lt;li&gt;BTC&lt;/li&gt;
&lt;li&gt;ETH&lt;/li&gt;
&lt;li&gt;Avalanche&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Layer 2: Any application built on top of layer 1 or blockchain&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chainlink&lt;/li&gt;
&lt;li&gt;Arbitram&lt;/li&gt;
&lt;li&gt;Optimism&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both Arbitram and Optimism solve scalability issues are called rollups. They roll up their txs. into ETH, which makes shards. They derive their security from Layer 1 and they send their txs. to layer 1.&lt;/p&gt;

&lt;p&gt;Side chains derive their security from their own protocols unlike rollups.&lt;/p&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Smart Contract and Solidity
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

contract SimpleStorage {
    // This will get initialized to 0
    uint256 favoriteNumber;

    struct People {
     uint256 favoriteNumber;
     string name;
    }
    People[] public people;
    mapping(string =&amp;gt; uint256) public nameToFavoriteNumber;

    People public person = People({favoriteNumber: 2, name: "Pranav"});

    function store(uint256 _favoriteNumber) public {
        favoriteNumber = _favoriteNumber;
    }

    // view, pure functions do not led to transactions, they are just for viewing.
    // pure is used when we do some math.
    function retrieve() public view returns(uint256){
        return favoriteNumber;
    }

    function addPerson(string memory _name, uint256 _favoriteNumber) public {
        people.push(People({favoriteNumber: _favoriteNumber, name: _name}));
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Storage Factory - How to deploy user defined contracts in Blockchain out of a contract:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "./SimpleStorage.sol";

contract StorageFactory{

    SimpleStorage[] public simpleStorageArray;

    function createSimpleStorageContract() public {
        SimpleStorage simpleStorage = new SimpleStorage();
        simpleStorageArray.push(simpleStorage);
    }

    function sfStore(uint256 _simpleStorageIndex, uint256 _simpleStorageNumber) public {
        // Address
        // ABI - application binary interface
        SimpleStorage simpleStorage = SimpleStorage(address(simpleStorageArray[_simpleStorageIndex]));
        simpleStorage.store(_simpleStorageNumber);
    }
    function sfGet(uint256 _simpleStorageIndex) public view returns(uint256) {
        return SimpleStorage(address(simpleStorageArray[_simpleStorageIndex])).retrieve();
    }

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  ABI
&lt;/h3&gt;

&lt;p&gt;ABI =  Application Binary Interface&lt;/p&gt;

&lt;p&gt;The ABI tells solidity and other programming languages how it can interact with another contract.&lt;/p&gt;

&lt;p&gt;Interfaces compile down to ABI.&lt;/p&gt;

&lt;p&gt;Anytime you want to interact with an already deployed smart contract you will need an ABI.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Fund Me application on Solidity
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: MIT

pragma solidity &amp;gt;= 0.6.6 &amp;lt;0.9.0;

import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol";
import "@chainlink/contracts/src/v0.6/vendor/SafeMathChainlink.sol";

contract FundMe{
    using SafeMathChainlink for uint256;

    mapping(address =&amp;gt; uint256) public addressToAmountFunded;
    address[] public funders;
    address public owner;

    constructor() public{
        owner = msg.sender; 
    }

    function fund() public payable{
        // $50
        uint256 minimumUSD = 50 * (10 * 18);
        require(getConversionRate(msg.value) &amp;gt;= minimumUSD, "You need to spend more ETH!");

        addressToAmountFunded[msg.sender] += msg.value;
        funders.push(msg.sender);
        // what the ETH -&amp;gt; USD conversion rate.

    }

    function getVersion() public view returns(uint256){
        AggregatorV3Interface priceFeed = AggregatorV3Interface(0x8A753747A1Fa494EC906cE90E9f37563A8AF630e);
        return priceFeed.version();
    }

    function getPrice() public view returns(uint256){
        AggregatorV3Interface priceFeed = AggregatorV3Interface(0x8A753747A1Fa494EC906cE90E9f37563A8AF630e);
        (,int256 answer,,,) = priceFeed.latestRoundData();
        return uint256(answer);
    }

    function getConversionRate(uint256 ethAmount) public view returns(uint256){
        uint256 ethPrice = getPrice();
        uint256 ethAmountInUSD = (ethPrice * ethAmount) / 1000000000000000000;
        return ethAmountInUSD;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function withdraw() payable onlyOwner public{        
        msg.sender.transfer(address(this).balance);

        for (uint256 funderIndex=0; funderIndex &amp;lt; funders.length; funderIndex++){
            address funder = funders[funderIndex];
            addressToAmountFunded[funder] = 0;
        }

        funders = new address[](0);
    }

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ganache is a simulated blockchain
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Introduction to &lt;a href="http://Web3.py" rel="noopener noreferrer"&gt;Web3.py&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://web3.py" rel="noopener noreferrer"&gt;web3.py&lt;/a&gt; helps deploying smart contracts from local development to blockchain. We can use ganache to test our contract. Then we can finally deploy it on Rinkeby or Mainnet via Infuria.&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;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Callable&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;solcx&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;compile_standard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;install_solc&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;web3&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Web3&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./SimpleStorage.sol&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;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;simple_storage_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;install_solc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.6.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;compiled_sol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;compile_standard&lt;/span&gt;&lt;span class="p"&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;language&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;Solidity&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;sources&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;SimpleStorage.sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;simple_storage_file&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;settings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;outputSelection&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;*&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;*&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;abi&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;metadata&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;evm.bytecode&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;evm.sourceMap&lt;/span&gt;&lt;span class="sh"&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="n"&gt;solc_version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.6.0&lt;/span&gt;&lt;span class="sh"&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;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compiled_code.json&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;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compiled_sol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# get bytecode
&lt;/span&gt;&lt;span class="n"&gt;bytecode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;compiled_sol&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;contracts&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;SimpleStorage.sol&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;SimpleStorage&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;evm&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;bytecode&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;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# get abi
&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;compiled_sol&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;contracts&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;SimpleStorage.sol&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;SimpleStorage&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;abi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# for connecting to rinkeby
&lt;/span&gt;&lt;span class="n"&gt;w3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Web3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;Web3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;HTTPProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://rinkeby.infura.io/v3/ba5dc926e8c1459eb85dda1521f33b88&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;chain_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="n"&gt;my_address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0xb0a047E246656327079c92adEd60d3F97DE2DDF6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;private_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PRIVATE_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;private_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# create contract in python
&lt;/span&gt;&lt;span class="n"&gt;SimpleStorage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bytecode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bytecode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get latest transaction
&lt;/span&gt;&lt;span class="n"&gt;nonce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getTransactionCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# 1. Build a transaction
# 2. Sign the transaction
# 3. Send the transaction
&lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SimpleStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;buildTransaction&lt;/span&gt;&lt;span class="p"&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;gasPrice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gas_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chainId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;chain_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;my_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nonce&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="n"&gt;sign_txn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;private_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;private_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Send the signed txn
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Deploying contract...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tx_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_raw_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sign_txn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rawTransaction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tx_receipt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait_for_transaction_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tx_hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Deployed!!!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Working with a contract, you always need
# Contract Address
# Contract ABI
&lt;/span&gt;&lt;span class="n"&gt;simple_storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tx_receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;contractAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Two ways to interact
# Call
# Transact
&lt;/span&gt;
&lt;span class="c1"&gt;# print(simple_storage.functions.store(14).call())
# print(simple_storage.functions.retrieve().call())
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Updating Contract...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;store_tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;simple_storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;783&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;buildTransaction&lt;/span&gt;&lt;span class="p"&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;gasPrice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gas_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chainId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;chain_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;my_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nonce&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;signed_store_tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;store_tx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;private_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;private_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tx_store_send&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_raw_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signed_store_tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rawTransaction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tx_store_rec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait_for_transaction_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tx_store_send&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Contract updated!!!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Retrieving the updated contract...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;simple_storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;retrieve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tests
&lt;/h2&gt;

&lt;p&gt;Testing can be classified in 3 categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arranging&lt;/li&gt;
&lt;li&gt;Acting&lt;/li&gt;
&lt;li&gt;Asserting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  As soon as I learn more concepts, I will be updating this post. Meanwhile you can comment down your suggestions and I will include your contributions into this post. Thank You 😀 !!
&lt;/h3&gt;

</description>
      <category>blockchain</category>
      <category>solidity</category>
      <category>web3</category>
      <category>python</category>
    </item>
    <item>
      <title>Emmet not working in VS Code ?— Here’s how you can fix this problem!!</title>
      <dc:creator>Pranav Arora</dc:creator>
      <pubDate>Wed, 20 Oct 2021 12:21:43 +0000</pubDate>
      <link>https://forem.com/pranavarora1895/emmet-not-working-in-vs-code-heres-how-you-can-fix-this-problem-1367</link>
      <guid>https://forem.com/pranavarora1895/emmet-not-working-in-vs-code-heres-how-you-can-fix-this-problem-1367</guid>
      <description>&lt;p&gt;Emmet is a powerful extension in Visual Studio Code. If you are developing a website or working with any language such as HTML, Emmet helps you to write your code fast and efficiently without making silly mistakes.&lt;/p&gt;

&lt;p&gt;But sometimes, while updating VS Code, the VS Code loses the file associations or Emmet stops working for some reason. I encountered the similar problem after I updated my VS Code. I was not able to use Emmet and it seemed annoying to me because I didn’t want to write whole html starter templates while working on website development. So I started finding out the solution and figured out how to fix that.&lt;/p&gt;

&lt;p&gt;Step 1: Start your VS Code. Click on the Settings or press &lt;strong&gt;Ctrl+,&lt;/strong&gt; to open the VS Code Settings.&lt;/p&gt;

&lt;p&gt;Step 2: Click on the Extensions tab on the left side of the settings. Click on HTML.&lt;/p&gt;

&lt;p&gt;Step 3: Click on the &lt;strong&gt;&lt;em&gt;“Edit in settings:json”&lt;/em&gt;&lt;/strong&gt; hyperlink to edit the settings in JSON format.&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%2Fviby7si4nyryw1vg6yep.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%2Fviby7si4nyryw1vg6yep.png" alt="vscode_emmet.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 4: Inside the curly braces, enter the following code under the already written JSON code:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

“emmet.triggerExpansionOnTab”: true,
“files.associations”: {“*html”: “html”},
"emmet.useInlineCompletions": true


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

&lt;/div&gt;

&lt;p&gt;Step 5: Save the file. Now if you try to apply Emmet in your code, it will work smoothly!!&lt;/p&gt;

&lt;p&gt;That’s how I fixed this Emmet not working problem which I encountered when I updated VS Code. I hope this solution may be helpful for you as well and serves the purpose.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>emmet</category>
      <category>json</category>
      <category>howtofix</category>
    </item>
    <item>
      <title>10 Amazing Web Apps for Web Developers!!</title>
      <dc:creator>Pranav Arora</dc:creator>
      <pubDate>Tue, 19 Oct 2021 14:07:04 +0000</pubDate>
      <link>https://forem.com/pranavarora1895/10-amazing-web-apps-for-web-developers-46ha</link>
      <guid>https://forem.com/pranavarora1895/10-amazing-web-apps-for-web-developers-46ha</guid>
      <description>&lt;p&gt;While going through my web development career, I came to know about various web apps, that each web developer requires. Let's have a look at them:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. DEVDOCS
&lt;/h2&gt;

&lt;p&gt;Personally, this one is my favorite website. It has everything that a developer needs. This website is an all-in-one documentation. Containing the docs of more than 100 languages, you won't ever find yourself having 100s of tabs opened. Lol !!!&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%2Faja5wcgac0tk44i6j8p1.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%2Faja5wcgac0tk44i6j8p1.png" alt="devdocs.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://devdocs.io/" rel="noopener noreferrer"&gt;https://devdocs.io/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. PEPPERTYPE&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Peppertype generates better content copies in seconds with the power of Artificial Intelligence.&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%2F0cbzr8xlyxtq0ui506lj.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%2F0cbzr8xlyxtq0ui506lj.png" alt="peppertype.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://www.peppertype.ai/" rel="noopener noreferrer"&gt;https://www.peppertype.ai/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. UNSPLASH API&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Unsplash API is a modern JSON API that surfaces all of the info you'll need to build any sort of experience for your users.&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%2Fc0wkpfr4ahomtqp8zut4.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%2Fc0wkpfr4ahomtqp8zut4.png" alt="Unsplash Source.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://source.unsplash.com/" rel="noopener noreferrer"&gt;https://source.unsplash.com/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  4. POET
&lt;/h2&gt;

&lt;p&gt;It captures and shares Twitter posts as beautiful images.&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%2Fz3gl3pxdirrxaz0zrchn.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%2Fz3gl3pxdirrxaz0zrchn.png" alt="poet.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://poet.so/" rel="noopener noreferrer"&gt;https://poet.so/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  5. BUILT WITH
&lt;/h2&gt;

&lt;p&gt;Built With can be useful if you need to learn more about what technologies are used for a particular website. For example, you can see exactly what is used on Netflix's website.&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%2Fhp7txg45u1emj7ljlde5.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%2Fhp7txg45u1emj7ljlde5.png" alt="netflix.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://builtwith.com/" rel="noopener noreferrer"&gt;https://builtwith.com/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  6. SITE POINT
&lt;/h2&gt;

&lt;p&gt;SitePoint has everything you need to help you with your next web development project, including all the latest news, trends, books, UX tips and more.&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%2Ffl5eqlcjjbz5rew6zf1g.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%2Ffl5eqlcjjbz5rew6zf1g.png" alt="sitepoint.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://www.sitepoint.com/" rel="noopener noreferrer"&gt;https://www.sitepoint.com/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  7. CARBON
&lt;/h2&gt;

&lt;p&gt;Carbon creates and shares beautiful images of your source code. Start typing or drop a file into text area to get started.&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%2Fwc8t6iyir463bx7kq2ny.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%2Fwc8t6iyir463bx7kq2ny.png" alt="Carbon.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://carbon.now.sh/" rel="noopener noreferrer"&gt;https://carbon.now.sh/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  8. APPTION
&lt;/h2&gt;

&lt;p&gt;Adds 3rd party apps embed or create a custom embed for your Notion Document.&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%2Fw5iepwdg2z1v26gjwsjk.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%2Fw5iepwdg2z1v26gjwsjk.png" alt="apption.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://apption.co/" rel="noopener noreferrer"&gt;https://apption.co/&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  9. PAGESPEED INSIGHTS
&lt;/h2&gt;

&lt;p&gt;Powered by Google, not only you can see how fast is your website on a scale of 0 to 100, bit it also tells you exactly what you need to change to get a higher score.&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%2F8fiks2p82ch8nirf0pss.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%2F8fiks2p82ch8nirf0pss.png" alt="pagespeed.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Link:  &lt;a href="https://developers.google.com/speed/pagespeed/insights/" rel="noopener noreferrer"&gt;Google Developers PageSpeed Insights&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  10. OVER API
&lt;/h2&gt;

&lt;p&gt;It is the collection of CheatSheets. These are not documentations unlike DevDocs. It's more beginner-friendly.&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%2Fm89k3eg0hqtuqrvlhfi5.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%2Fm89k3eg0hqtuqrvlhfi5.png" alt="overapi.PNG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt;  &lt;a href="https://overapi.com/" rel="noopener noreferrer"&gt;https://overapi.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;I hope this blog will be helpful for your web development journey. Make sure to save it for your future reference. Please comment down which tool are you going to use just after watching this post.&lt;/em&gt;&lt;/strong&gt; 😀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Help! Deploy Django website to GCP Cloud Run using VS Code</title>
      <dc:creator>Pranav Arora</dc:creator>
      <pubDate>Sat, 27 Mar 2021 15:38:31 +0000</pubDate>
      <link>https://forem.com/pranavarora1895/help-deploy-django-website-to-gcp-cloud-run-using-vs-code-fd1</link>
      <guid>https://forem.com/pranavarora1895/help-deploy-django-website-to-gcp-cloud-run-using-vs-code-fd1</guid>
      <description>&lt;p&gt;Hello Guys!! I need guidance to deploy my existing django website which is in my windows machine to Google Cloud Platform's Cloud Run using VS Code. I saw there's a documentation related to it but I'm not able to understand what all to change in my django's settings.py and how will the database would be configured. Please guide me as what all should I change to my django app so that I can deploy it through my VS Code.&lt;/p&gt;

</description>
      <category>django</category>
      <category>googlecloud</category>
      <category>vscode</category>
      <category>cloudrun</category>
    </item>
  </channel>
</rss>
