<?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: Adhir Kirtikar</title>
    <description>The latest articles on DEV Community by Adhir Kirtikar (@adhirkirtikar).</description>
    <link>https://dev.to/adhirkirtikar</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%2F760490%2Fb16d9ff5-77af-4f4d-9e28-c2d7fc3b06ca.png</url>
      <title>DEV Community: Adhir Kirtikar</title>
      <link>https://dev.to/adhirkirtikar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adhirkirtikar"/>
    <language>en</language>
    <item>
      <title>IMDb-MongoDb</title>
      <dc:creator>Adhir Kirtikar</dc:creator>
      <pubDate>Wed, 12 Jan 2022 08:38:36 +0000</pubDate>
      <link>https://dev.to/adhirkirtikar/imdb-mongodb-3b06</link>
      <guid>https://dev.to/adhirkirtikar/imdb-mongodb-3b06</guid>
      <description>&lt;p&gt;&lt;a href="http://imdb-mongodb.dec96de7-e7f9-4b06-9f21-2e0f053e0bfd.k8s.civo.com/" rel="noopener noreferrer"&gt;IMDb-MongoDb&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;This project is created for participating in MongoDB Atlas Hackathon on DEV in category "Choose Your Own Adventure" and to learn more about the modern database platform of MongoDB Atlas.&lt;/p&gt;

&lt;p&gt;This is a simple Node.js Express web app in which you can search for movies based on various criteria and see the stats &amp;amp; details of the movies e.g. duration, language, ratings, Cast &amp;amp; Crew etc.&lt;br&gt;
I have not learnt Node.js Express or pug before. I created a new project in Visual Studio, experimented with the base code created by VS and modified the code as required based on my requirements by googling for solutions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is a Node.js Express web app with only 2 routes: &lt;a href="https://github.com/AdhirKirtikar/IMDb-MongoDb/blob/master/routes/index.js" rel="noopener noreferrer"&gt;index&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/AdhirKirtikar/IMDb-MongoDb/blob/master/routes/search.js" rel="noopener noreferrer"&gt;search&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The source code is in this repo &lt;a href="https://github.com/AdhirKirtikar/IMDb-MongoDb" rel="noopener noreferrer"&gt;IMDb-MongoDb&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The code uses Node.js native drivers for MongoDB and connects to a MongoDB database deployment which is Multi Region Replica Set of 12 nodes.&lt;/li&gt;
&lt;li&gt;The database consists of data from IMDb sourced from a &lt;a href="https://www.kaggle.com/trentpark/imdb-data" rel="noopener noreferrer"&gt;Kaggle dataset&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The app is packaged in a &lt;a href="https://hub.docker.com/repository/docker/adhirkirtikar/imdb-mongodb" rel="noopener noreferrer"&gt;Docker container&lt;/a&gt; &lt;em&gt;automagically&lt;/em&gt; using &lt;a href="https://github.com/AdhirKirtikar/IMDb-MongoDb/actions" rel="noopener noreferrer"&gt;GitHub actions&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;The docker container is deployed to 3-node Kubernetes cluster hosted on &lt;a href="https://www.civo.com" rel="noopener noreferrer"&gt;Civo&lt;/a&gt; using Helm charts with ArgoCD which was installed very easily and quickly in the Civo cluster.&lt;/li&gt;
&lt;li&gt;The app endpoint is published via Traefik Ingress (again auto install in Civo cluster) and is embedded in the home page hosted on &lt;a href="https://gen.xyz" rel="noopener noreferrer"&gt;.xyz&lt;/a&gt; domain. (Note: There were issues with embedding the application link with the Weebly homepage editor, so the direct link for the application is as below. The &lt;a href="http://www.adhirkirtikar.xyz/imdb-mongodb.html" rel="noopener noreferrer"&gt;xyz link&lt;/a&gt; gives "Bad Gateway" error some times.)&lt;/li&gt;
&lt;li&gt;The webpage link for the application is &lt;a href="http://imdb-mongodb.dec96de7-e7f9-4b06-9f21-2e0f053e0bfd.k8s.civo.com/" rel="noopener noreferrer"&gt;IMDb-MongoDb&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Submission Category: Choose Your Own Adventure
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I only wanted to learn MongoDB and participate in this challenge. The idea that I had for movies search app does not fit in to the other categories.&lt;/li&gt;
&lt;/ul&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://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/AdhirKirtikar" rel="noopener noreferrer"&gt;
        AdhirKirtikar
      &lt;/a&gt; / &lt;a href="https://github.com/AdhirKirtikar/IMDb-MongoDb" rel="noopener noreferrer"&gt;
        IMDb-MongoDb
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      IMDb movies web app for MongoDB Atlas Hackathon on DEV!
    &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;IMDb-MongoDb&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Inspiration&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This project is created for participating in &lt;a href="https://dev.to/devteam/announcing-the-mongodb-atlas-hackathon-on-dev-4b6m" rel="nofollow"&gt;MongoDB Atlas Hackathon on DEV&lt;/a&gt; in category "Choose Your Own Adventure" and to learn more about the modern database platform of MongoDB Atlas.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This is a simple Node.js Express web app in which you can search for movies based on various criteria and see the stats &amp;amp; details of the movies e.g. duration, language, ratings, Cast &amp;amp; Crew etc.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How I built it&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;This is a Node.js Express web app with only 2 routes: &lt;a href="https://github.com/AdhirKirtikar/IMDb-MongoDb/blob/master/routes/index.js" rel="noopener noreferrer"&gt;index&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/AdhirKirtikar/IMDb-MongoDb/blob/master/routes/search.js" rel="noopener noreferrer"&gt;search&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The source code is in this repo &lt;a href="https://github.com/AdhirKirtikar/IMDb-MongoDb" rel="noopener noreferrer"&gt;IMDb-MongoDb&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The code uses Node.js native drivers for MongoDB and connects to a MongoDB database deployment which is Multi Region Replica Set of 12 nodes. (Update 20220124: Changed to MongoDB Free Tier)&lt;/li&gt;
&lt;li&gt;The database consists of data from imdb sourced from a &lt;a href="https://www.kaggle.com/trentpark/imdb-data" rel="nofollow noopener noreferrer"&gt;Kaggle dataset&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The app is packaged in a &lt;a href="https://hub.docker.com/repository/docker/adhirkirtikar/imdb-mongodb" rel="nofollow noopener noreferrer"&gt;Docker&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AdhirKirtikar/IMDb-MongoDb" 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;p&gt;&lt;a href="https://youtu.be/a_0XzXzTTjI" rel="noopener noreferrer"&gt;Video Demo: MongoDB Atlas Hackathon on DEV - iMovieDB&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%2F60tuv0jezdp4ej4qmj9m.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%2F60tuv0jezdp4ej4qmj9m.png" alt="Kubernetes Dashboard"&gt;&lt;/a&gt;&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%2Fwhm99mi6u9rr5h6mqob1.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%2Fwhm99mi6u9rr5h6mqob1.png" alt="Civo Kubernetes Cluster"&gt;&lt;/a&gt;&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%2Ff1b367adp6n86xkxkrf4.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%2Ff1b367adp6n86xkxkrf4.png" alt="GitHub Actions"&gt;&lt;/a&gt;&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%2Fljqdlwr8utf966r6e5e7.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%2Fljqdlwr8utf966r6e5e7.png" alt="ArgoCD"&gt;&lt;/a&gt;&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%2Fudap9rjs3sjshq0x51kp.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%2Fudap9rjs3sjshq0x51kp.png" alt="MongoDB Atlas"&gt;&lt;/a&gt;&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%2Fj5dajb0k84300ho1gri6.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%2Fj5dajb0k84300ho1gri6.png" alt="MongoDB Collections"&gt;&lt;/a&gt;&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%2Fvaf64ht1tks65t3rooxl.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%2Fvaf64ht1tks65t3rooxl.png" alt="Movie Search App"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>atlashackathon</category>
      <category>javascript</category>
      <category>node</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>Air Quality - Pollutant Index - India</title>
      <dc:creator>Adhir Kirtikar</dc:creator>
      <pubDate>Wed, 24 Nov 2021 18:40:28 +0000</pubDate>
      <link>https://dev.to/adhirkirtikar/air-quality-pollutant-index-india-88h</link>
      <guid>https://dev.to/adhirkirtikar/air-quality-pollutant-index-india-88h</guid>
      <description>&lt;p&gt;This mini project shows the Air Quality Index (Industrial Air Pollution) from various locations in India in a Tableau Public dashboard.&lt;br&gt;
The data is sourced from data.gov.in API using Python for cleaning &amp;amp; loading the data in Google Sheets. &lt;br&gt;
Data is updated daily (or manually) using GitHub Actions or AWS Lambda.&lt;/p&gt;
&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;
&lt;h4&gt;
  
  
  GitHub Action "&lt;a href="https://github.com/AdhirKirtikar/Air-Quality-Index-India-GitHub-Actions/blob/master/.github/workflows/run-python.yml" rel="noopener noreferrer"&gt;run-python.yml&lt;/a&gt;"
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Google credentials are stored in GitHub Actions Environment Secrets.&lt;/li&gt;
&lt;li&gt;data.gov.in API Key is also stored in GitHub Actions Environment Secrets.&lt;/li&gt;
&lt;li&gt;A GitHub Action is created that can run manually or on a schedule [12PM UTC (8PM SGT)].&lt;/li&gt;
&lt;li&gt;Python 3.9 is setup using &lt;a href="https://github.com/actions/setup-python" rel="noopener noreferrer"&gt;actions/setup-python@v2.3.0&lt;/a&gt; and the pip packages are cached.&lt;/li&gt;
&lt;li&gt;Dependencies are installed using &lt;a href="https://github.com/marketplace/actions/python-dependency-installation" rel="noopener noreferrer"&gt;py-actions/py-dependency-install@v2&lt;/a&gt;  based on requirements.txt (google auth, pygsheets &amp;amp; pandas).&lt;/li&gt;
&lt;li&gt;The Environment Secrets are exported to environment variables.&lt;/li&gt;
&lt;li&gt;Finally, the Python script is run with the environment variables passed as parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;I tried to use this workflow as a replacement / complement to the AWS Lambda function that processes the Python script at 8AM SGT.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/AdhirKirtikar/Air-Quality-Index-India-GitHub-Actions/blob/master/.github/workflows/run-python.yml" rel="noopener noreferrer"&gt;run-python.yml&lt;/a&gt;
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This is a basic workflow to help you get started with Actions

name: Run Python

# Controls when the action will run. 
on:
  schedule:
    # run at 12PM UTC (8PM SGT)
    - cron: '0 12 * * *'

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # use environment (named as "env") defined in the GitHub repository settings
    environment: env

    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      -
        name: Checkout
        uses: actions/checkout@v2

      # Set up Python 3.9 environment and cache pip packages
      - 
        name: Setup Python 3.9
        uses: actions/setup-python@v2.3.0
        with:
          python-version: '3.9'
          cache: 'pip'
        # This action sets up a Python environment for use in actions by:
        #   optionally installing and adding to PATH a version of Python that is already installed in the tools cache.
        #   optionally caching dependencies for pip and pipenv.

      # Install dependencies mentioned in the requirements.txt
      - 
        name: Install dependencies
        uses: py-actions/py-dependency-install@v2
        # This GitHub Action installs Python package dependencies from a user-defined requirements.txt file path 
        # with pip, setuptools, and wheel installs/updates during execution. 
        # A Python package environment report is displayed at the end of Action execution.
        # Uses path requirements.txt and updates pip, setuptools, and wheel before the install.

      # Run a bash shell and store env secrets in parameters to pass to Python script
      -
        name: Get Parameters &amp;amp; Run Air Quality Index India Python script
        shell: bash
        env:
          GOVINAPIKEY: ${{ secrets.DATA_GOV_IN_API_KEY }}
          GDRIVEAPIKEY: ${{ secrets.GDRIVE_API_CREDENTIALS }}
        run: |
          python "Air Quality Index India.py" "$GOVINAPIKEY" "$GDRIVEAPIKEY"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Full repository is here:
&lt;/h4&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/AdhirKirtikar" rel="noopener noreferrer"&gt;
        AdhirKirtikar
      &lt;/a&gt; / &lt;a href="https://github.com/AdhirKirtikar/Air-Quality-Index-India-GitHub-Actions" rel="noopener noreferrer"&gt;
        Air-Quality-Index-India-GitHub-Actions
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Repo for 2021 GitHub Actions Hackathon on DEV
    &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;Air-Quality-Index-India-GitHub-Actions&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Repo for 2021 GitHub Actions Hackathon on DEV&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;GitHub Action "&lt;a href="https://github.com/AdhirKirtikar/Air-Quality-Index-India-GitHub-Actions/blob/master/.github/workflows/run-python.yml" rel="noopener noreferrer"&gt;run-python.yml&lt;/a&gt;"&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Google credentials are stored in GitHub Actions Environment Secrets.&lt;/li&gt;
&lt;li&gt;data.gov.in API Key is also stored in GitHub Actions Environment Secrets.&lt;/li&gt;
&lt;li&gt;A GitHub Action is created that can run manually or on a schedule [12PM UTC (8PM SGT)]&lt;/li&gt;
&lt;li&gt;Python 3.9 is setup using &lt;a href="https://github.com/actions/setup-python" rel="noopener noreferrer"&gt;actions/setup-python@v2.3.0&lt;/a&gt; and the pip packages are cached&lt;/li&gt;
&lt;li&gt;Dependencies are installed using &lt;a href="https://github.com/marketplace/actions/python-dependency-installation" rel="noopener noreferrer"&gt;py-actions/py-dependency-install@v2&lt;/a&gt;  based on requirements.txt (google auth, pygsheets &amp;amp; pandas).&lt;/li&gt;
&lt;li&gt;The Environment Secrets are exported to environment variables.&lt;/li&gt;
&lt;li&gt;Finally, the Python script is run with the environment variables passed as parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Python script "&lt;a href="https://github.com/AdhirKirtikar/Air-Quality-Index-India-GitHub-Actions/blob/master/Air%20Quality%20Index%20India.py" rel="noopener noreferrer"&gt;Air Quality Index India.py&lt;/a&gt;"&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;The script connects to data.gov.in API using API Key passed as a parameter.&lt;/li&gt;
&lt;li&gt;Then it pulls the latest AQI data for India and stores in pandas dataframe.&lt;/li&gt;
&lt;li&gt;The data is cleaned, formatted and the columns are renamed. Nulls are replaced by 0.&lt;/li&gt;
&lt;li&gt;Google sheet is…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AdhirKirtikar/Air-Quality-Index-India-GitHub-Actions" 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;p&gt;Tableau Public Dashboard that uses the data from the generated Google Sheets: "&lt;a href="https://public.tableau.com/views/AirQuality-PollutantIndex-India/PollutantIndexDashboard?:language=en-US&amp;amp;:display_count=n&amp;amp;:origin=viz_share_link" rel="noopener noreferrer"&gt;Air Quality - Pollutant Index - India&lt;/a&gt;"&lt;/p&gt;

</description>
      <category>actionshackathon21</category>
      <category>python</category>
      <category>googlesheets</category>
      <category>tableau</category>
    </item>
  </channel>
</rss>
