<?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: Abhijith Ganesh</title>
    <description>The latest articles on Forem by Abhijith Ganesh (@abhijithganesh).</description>
    <link>https://forem.com/abhijithganesh</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%2F696251%2F636ab2fe-1df0-4398-9085-24f96ea599f8.png</url>
      <title>Forem: Abhijith Ganesh</title>
      <link>https://forem.com/abhijithganesh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/abhijithganesh"/>
    <language>en</language>
    <item>
      <title>Is the open-source community ready for protestware ?</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Sun, 24 Apr 2022 19:18:00 +0000</pubDate>
      <link>https://forem.com/abhijithganesh/is-the-open-source-community-ready-for-protestware--po9</link>
      <guid>https://forem.com/abhijithganesh/is-the-open-source-community-ready-for-protestware--po9</guid>
      <description>&lt;h1&gt;
  
  
  Why should you ask this question and why does it matter?
&lt;/h1&gt;

&lt;p&gt;I am sure, all of you know what &lt;a href="https://opensource.org/"&gt;open source&lt;/a&gt;, if not you can read it up on the link I’ve mentioned, but let’s cut to chase, &lt;em&gt;Is Open source ready for protestware&lt;/em&gt; ? In essence (TL DR😉; No) it is not stable and strong enough, let me explain why &lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;Open-source org has a similar article but it reflects on a certainly different perspective, this article considers the issue at its face value. It is more than a reflection of the current situation. Though the ongoing situation is one of the essential reasons for this topic but it is not the only factor. It is a case study for the past, present and future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does it matter?
&lt;/h2&gt;

&lt;p&gt;All developers use dependencies that are open-sourced in some level, even if you are a developer who doesn't use open-source too, this matters to you as today's open-source patterns are tomorrow's industry standard. The open-source community drives your software in ways which you don't recognize, and when the problems of protestware hits mainstream, you'll be able to understand its security implications. Examples would be &lt;a href="https://dev.to/ieeecsvitc/the-impact-of-security-in-foss-projects-and-the-future-3jom"&gt;faker.js&lt;/a&gt; which I've briefly covered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why am I eligible to present my specific view-point ?
&lt;/h3&gt;

&lt;p&gt;Well before we dive in, you may ask on what capacity am I writing this? What is my experience with open-source and security ? So let me explain that part quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Experience
&lt;/h3&gt;

&lt;p&gt;I am a seasoned open-source developer, who's worked on various &lt;a href="//github.com/AbhijithGanesh"&gt;projects&lt;/a&gt; , famous ones include Pyrsia, OpenCiviWiki and the Data on Kubernetes communities. My experience/contribution  towards &lt;a href="https://github.com/pyrsia/pyrsia"&gt;Pyrsia&lt;/a&gt; which is an open source security foundation project is a good reference for you to read up, it explains how it plans to secure open-source supply chain.&lt;/p&gt;

&lt;p&gt;Now jumping into the topic &lt;/p&gt;

&lt;h3&gt;
  
  
  Why is the current system not ready for protestware ?
&lt;/h3&gt;

&lt;p&gt;Protestware are software which open-source developers, maintainers use as a symbol of protest during some change of event. (For this article , let us approach from this perspective)&lt;/p&gt;

&lt;p&gt;When developers choose to abruptly change their package, tool, software as a form of protest, it initially will be a good reflection of their opinion and perspective, but honestly, taking a larger perspective, it is not friendly for the community as the community tends to become &lt;em&gt;way more polarized&lt;/em&gt; than its previous past. The ideals of open-source was to promote good software, free software (not completely) and a trust-worthy safety net for other developers to use your work (under appropriate licenses⚖️). Organizations like the Linux Foundation, Apache have been major proponents of these principles.  &lt;/p&gt;

&lt;p&gt;All of you must have used one of the big three JS libraries(React, Angular and Vue) for your front-end development and I am sure you wouldn't be able to remember all of the dependencies, barely a developer remembers the nested dependencies. Developers trust the ecosystem for the packages coming from the corresponding registries(NPM, PyPI, NuGet, Cargo) and if a package console logs/ print they support XYZ, it is still not acceptable for your product to have the owner's opinion.&lt;/p&gt;

&lt;p&gt;Apart from the unsolicited opinion being forced into your product/project/error-logs/console, we must realize how polarizing the community can get, the trust chain is broken, we have a possibility of another case where a counter-opinionated package can wreck harm. (opinions are always on a spectrum and expecting all developers to conform to one opinion is inconsiderate) Apart from this, all outrage has collateral damage but the scales of open-source is just humongous. The scale of impact is way too high. It scales exponentially quickly and to make amends would not certainly not be an easy task.&lt;/p&gt;

&lt;p&gt;As open-source developers, all of us have a common goal of making the world a better place, some may say protestware is a manifestation of the same but I beg to differ, the open-source community strives to be non-polarized, once the balance of its neutrality is disturbed, the entire trust-chain and links are jeopardized. If you no longer trust the packages that comes from various sources, your developer life-cycle is complicated by 100x . Developers will have to put considerably more time understanding their dependencies and there will be larger investment into planning dependencies ahead of time. &lt;/p&gt;

&lt;h3&gt;
  
  
  Neutrality of FOSS
&lt;/h3&gt;

&lt;p&gt;The neutrality of FOSS is the first thing that often strikes our minds when we mention FOSS. Developers, Contributors across the world without seeing their nationality, political biases and their political opinion. The article from open-source organization justifying the fact it is acceptable to opine through FOSS is detrimental to the larger ecosystem in general.&lt;/p&gt;

&lt;h3&gt;
  
  
  Software is software and not soft-power
&lt;/h3&gt;

&lt;p&gt;Often than not, developers use/will use/have used protestware to carry their point of view ahead to a set of their target audience, well is that what FOSS promised ? The article from open source organization deems promotion of interests through open source software as effective, I beg to differ again. It is affecting the neutrality of open-source  by setting a precedent where developers can choose to put their opinions and views in a place that wasn't meant to host opinions, we and the open source organization can always say it'll be neutral and non-hateful but this lays the foundation for hate-speech and violent content to be promoted. Readers may wonder how? Open source despite being open to all developers, is very much centralized. The authority of the maintainer/admin is central and ultimate . It is technically "their project", they can choose to block it off.&lt;/p&gt;

&lt;p&gt;Examples of open-source maintainers taking control of their project: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;h3&gt; Actix and Nikolay Kim &lt;/h3&gt;
They over took the project and made it private when there was a huge fiasco, you can read this &lt;a href="https://www.theregister.com/2020/01/21/rust_actix_web_framework_maintainer_quits/"&gt;article.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;

&lt;h3&gt; Faker JS &lt;/h3&gt;

The repository was changed single-handedly by the maintainer, Github went on to suspend the account of the maintainer . &lt;/li&gt;
&lt;li&gt;

&lt;h3&gt; node-ipc &lt;/h3&gt;

The owner is allegedly racist and their changes have affected the supply chain. Various news outlets have reported their actions, it has been proven that their actions have made the project into &lt;a href="https://www.lunasec.io/docs/blog/node-ipc-protestware/"&gt;malware&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why open-source organization shouldn't have taken that stand ?
&lt;/h3&gt;

&lt;p&gt;It is extremely unpleasant for open-source org to condone usage of open-source software for spreading "information". Open source being used to express opinion is an event that triggers of damage to the supply chain which might be irrecoverable. &lt;em&gt;IF THE OPEN SOURCE SUPPLY CHAIN GOES DOWN, ALL SOFTWARE GOES DOWN.&lt;/em&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  What can you do as a developer/end-user ?
&lt;/h3&gt;

&lt;p&gt;These are some steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid supporting packages that act as protestware&lt;/li&gt;
&lt;li&gt;Try to maintain neutrality when you're making/maintaining a package/tool/etc&lt;/li&gt;
&lt;li&gt;Ensure audit practices and sustainable security practices with packages and dependencies.&lt;/li&gt;
&lt;li&gt;Visit your registry's sources(if possible) and understand the maintainer's code maintenance policies and practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;This is a brief opinion of mine, I understand many of you may or may not concur with this article, you can continue the conversation in the comments and read about it.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://AbhijithGanesh.tech"&gt;Click to view&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="//linkedin.com/in/Abhijithganesh14/"&gt;Click to view&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>protestware</category>
    </item>
    <item>
      <title>How to use the K8ssandra operator</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Thu, 03 Feb 2022 11:15:51 +0000</pubDate>
      <link>https://forem.com/abhijithganesh/how-to-use-the-k8ssandra-operator-1e8k</link>
      <guid>https://forem.com/abhijithganesh/how-to-use-the-k8ssandra-operator-1e8k</guid>
      <description>&lt;h2&gt;
  
  
  What is K8ssandra?
&lt;/h2&gt;

&lt;p&gt;It is the kubernetes cluster version of the Database &lt;a href="https://www.apache.org/"&gt;Apache-Cassandra&lt;/a&gt; along with Stargate, Prometheus operators, it is a simple and quick method to setup a near-full stack of the database instance&lt;/p&gt;

&lt;h2&gt;
  
  
  Requisites:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; 4 CPU cores&lt;/li&gt;
&lt;li&gt;8128 MB&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Software Requirements:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Minikube&lt;/li&gt;
&lt;li&gt;Helm (v3)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install the Rancher Local path provisoner by running the command&lt;br&gt;
&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the lightweight K8ssandra chart running the following command&lt;br&gt;
&lt;code&gt;helm repo add dokc https://dokc.github.io/Helm-Charts/&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check whether the repo was installed&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;helm repo list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It must show something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                    URL
cassandra               https://helm.k8ssandra.io/stable
traefik                 https://helm.traefik.io/traefik
minio                   https://helm.min.io
dok                     https://dokc.github.io/Helm-Charts/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The chart now has been configured for installation, to install the K8ssandra Chart&lt;/p&gt;

&lt;p&gt;You can run the k8ssandra configuration yaml with the chart&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt; &lt;span class="na"&gt;cassandra&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt; Cassandra Version Number, preferred version = 4.0.1 &amp;gt;&lt;/span&gt;  
  &lt;span class="na"&gt;cassandraLibDirVolume&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;storageClass&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;local-path&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5Gi&lt;/span&gt;
  &lt;span class="na"&gt;allowMultipleNodesPerWorker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;heap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
   &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1G&lt;/span&gt;
   &lt;span class="na"&gt;newGenSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1G&lt;/span&gt;
  &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1000m&lt;/span&gt;
      &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2Gi&lt;/span&gt;
    &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1000m&lt;/span&gt;
      &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2Gi&lt;/span&gt;
  &lt;span class="na"&gt;datacenters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt; Data Center Name &amp;gt;&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt; Size &amp;gt;&lt;/span&gt;
    &lt;span class="na"&gt;racks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt; Rack Name &amp;gt;&lt;/span&gt;

&lt;span class="na"&gt;kube-prometheus-stack&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;grafana&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;adminUser&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt; Grafana Admin User &amp;gt;&lt;/span&gt;
    &lt;span class="na"&gt;adminPassword&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt; Grafana Password &amp;gt;&lt;/span&gt;


&lt;span class="na"&gt;stargate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt; Boolean &amp;gt;&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="na"&gt;heapMB&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;256&lt;/span&gt;
  &lt;span class="na"&gt;cpuReqMillicores&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;
  &lt;span class="na"&gt;cpuLimMillicores&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1000&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;To run this:&lt;br&gt;
&lt;code&gt;helm install &amp;lt;cluster_name&amp;gt; dok/k8s-lightweight -f &amp;lt;filename&amp;gt;.yaml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will run your Kubernetes cluster, To check the pods that are running, you can run the &lt;code&gt;kubectl get pods&lt;/code&gt; and it must be like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                                                   READY   STATUS    RESTARTS   AGE
prometheus-test-dep-kube-prometheus-s-prometheus-0     2/2     Running   0          2m43s
test-dep-cass-operator-6c75d6d684-vh2ts                1/1     Running   0          2m45s
test-dep-datacenter1-default-sts-0                     2/2     Running   0          2m28s
test-dep-datacenter1-stargate-699f64f646-w85kw         1/1     Running   0          2m45s
test-dep-grafana-57fd996d9-c58tf                       2/2     Running   0          2m45s
test-dep-kube-prometheus-s-operator-767fc8984c-9rlmj   1/1     Running   0          2m45s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;** The pods may take up to 4 minutes to setup, please be patient **&lt;/p&gt;

&lt;p&gt;Once the pods are setup, you can run &lt;code&gt;kubectl get services&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAME                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                 AGE
kubernetes                                 ClusterIP   10.96.0.1        &amp;lt;none&amp;gt;        443/TCP                                                 144m
prometheus-operated                        ClusterIP   None             &amp;lt;none&amp;gt;        9090/TCP                                                33s
test-dep-dc-test-additional-seed-service   ClusterIP   None             &amp;lt;none&amp;gt;        &amp;lt;none&amp;gt;                                                  32s
test-dep-dc-test-all-pods-service          ClusterIP   None             &amp;lt;none&amp;gt;        9042/TCP,8080/TCP,9103/TCP                              32s
test-dep-dc-test-service                   ClusterIP   None             &amp;lt;none&amp;gt;        9042/TCP,9142/TCP,8080/TCP,9103/TCP,9160/TCP            33s
test-dep-dc-test-stargate-service          ClusterIP   10.96.125.32     &amp;lt;none&amp;gt;        8080/TCP,8081/TCP,8082/TCP,8084/TCP,8085/TCP,9042/TCP   35s
test-dep-grafana                           ClusterIP   10.106.69.131    &amp;lt;none&amp;gt;        80/TCP                                                  35s
test-dep-kube-prometheus-s-operator        ClusterIP   10.100.170.208   &amp;lt;none&amp;gt;        443/TCP                                                 35s
test-dep-kube-prometheus-s-prometheus      ClusterIP   10.109.19.63     &amp;lt;none&amp;gt;        9090/TCP                                                35s
test-dep-seed-service                      ClusterIP   None             &amp;lt;none&amp;gt;        &amp;lt;none&amp;gt;                                                  32s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can port-forward these services as per your requirement&lt;/p&gt;

&lt;p&gt;Example: &lt;code&gt;kubectl port-foward svc/test-dep-grafana 80&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can use the &lt;a href="https://kube-forwarder.pixelpoint.io/"&gt;kube-forwarder&lt;/a&gt; tool to port-forward the services in your local machines&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>cassandra</category>
      <category>helm</category>
    </item>
    <item>
      <title>The impact of security in FOSS projects and the future</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Sat, 29 Jan 2022 14:40:30 +0000</pubDate>
      <link>https://forem.com/ieeecsvitc/the-impact-of-security-in-foss-projects-and-the-future-3jom</link>
      <guid>https://forem.com/ieeecsvitc/the-impact-of-security-in-foss-projects-and-the-future-3jom</guid>
      <description>&lt;p&gt;All of us have either heard of the &lt;code&gt;Faker.js&lt;/code&gt; debacle or have used the package in your repositories/projects. Faker JS has been very useful and convenient that one of the Amazon SDKs used them in some level. Unfortunately, due to the &lt;em&gt;rogue&lt;/em&gt; actions of the maintainer(who actually had control over their repository and were legally entitled to do so) the package got impacted. This incident has become a turning point in the history of FOSS and security&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop forking Open-Source software disgracefully
&lt;/h2&gt;

&lt;p&gt;It is of high importance that we address the concern of Big Tech companies using FOSS software without any contribution. Maintainers are really tired of maintaining large repositories when there are big tech companies who swoop in and take the projects for free. Elastic (the company behind the infamous Elastic Logstash and Kibana stack) had recently amended their license to prevent one of the major cloud provider(s) from using their open-source projects and it clearly reflects on the mentality of the maintainers who are tired of seeing this happen. It is clear that the Open source repository maintainers are expecting major tech companies to back them instead of forking without any contribution. &lt;/p&gt;

&lt;p&gt;The mentality of maintainers have evolved into :&lt;/p&gt;

&lt;h6&gt;
  
  
  Contribute to FOSS in any and all possible forms, Forking without contribution is disgraceful
&lt;/h6&gt;

&lt;h2&gt;
  
  
  Open Source is not equal to Secure
&lt;/h2&gt;

&lt;p&gt;The idea of open-source applications being &lt;code&gt;s3cure&lt;/code&gt; because of it being transparent has been disproved by this debacle and it can clearly be understood that, more time, attention, effort and money needs to go towards the security of Open Source applications. GitHub (which pioneers Open Source work) has rolled out useful features like &lt;code&gt;dependabot&lt;/code&gt; but let us address the reality, is dependabot enough to maintain repositories? Certainly not. All of us can agree that dependabot is amazing for small repositories but for the scales of applications like Firefox, VLC Media player or even Kubernetes, it is certainly not enough.&lt;/p&gt;

&lt;p&gt;This part of the story has a better ending than the previous part, Various tech giants have come together and committed 10 Million US  dollars to fund the OpenSSF organization which works and strives to ensure the security of Open source projects. As developers, I think we should also start contributing to the projects and initiatives of OpenSSF to have a more harmonious  tech-world.&lt;/p&gt;

&lt;p&gt;Post-Script: What the maintainer of &lt;code&gt;faker.js&lt;/code&gt; did was totally unacceptable and unfair though they were legally entitled to do so. It must be duly noted that they are not the only part of the community but their actions reflect the mindset of the community which runs the world. With that being said, there are FOSS projects which bring bread and butter to plates of the contributors and maintainers, it'd be really unfair for me(as the author) to not mention that perspective as well. Open Source community works on good-faith and acts of bad faith is detrimental to every stake holder of the community, including but not limited to itself.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to deploy any Python Web Application?</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Sun, 14 Nov 2021 18:17:01 +0000</pubDate>
      <link>https://forem.com/abhijithganesh/how-to-deploy-any-python-web-application-1707</link>
      <guid>https://forem.com/abhijithganesh/how-to-deploy-any-python-web-application-1707</guid>
      <description>&lt;p&gt;&lt;em&gt;Hey everyone👨‍💻&lt;/em&gt;&lt;br&gt;
In this blog post I will explain how you can deploy any &lt;em&gt;ASGI/WSGI compliant Python Web App.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  DISCLAIMER:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Only ASGI Compliant Frameworks can be deployed using this method, other frameworks can't be deployed.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  List of Tools I will be using:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;NGINX&lt;/li&gt;
&lt;li&gt;Hypercorn&lt;/li&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Now here, there are alternatives to Hypercorn and FastAPI&lt;/strong&gt;
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Alternatives to Hypercorn:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Gunicorn&lt;/li&gt;
&lt;li&gt;Uvicorn&lt;/li&gt;
&lt;li&gt;Daphne&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Other Frameworks that can be deployed:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Flask&lt;/li&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;Starlette&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Any ASGI/WSGI compliant framework&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step One:
&lt;/h3&gt;

&lt;p&gt;Setup your framework using the docs mentioned.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="//docs.djangoproject.com/"&gt;Django&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//fastapi.tiangolo.com/"&gt;FastAPI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://flask.palletsprojects.com/en/2.0.x/"&gt;Flask&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since I'll be using FastAPI, my &lt;code&gt;main.py&lt;/code&gt; looks like this&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="nn"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hello_world&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;"Hello World"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚀 We now have a FastAPI app ready, we now have to deploy it using &lt;em&gt;NGINX&lt;/em&gt;. ⚙️&lt;/p&gt;

&lt;h3&gt;
  
  
  Step Two:
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Depending upon your framework and choice of ASGI/WSGI Server, this process will be slightly different.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;For Django Devs:&lt;/u&gt; &lt;/p&gt;

&lt;p&gt;Your wsgi/asgi application would be called as &lt;code&gt;&amp;lt;application_name&amp;gt;.&amp;lt;a/w&amp;gt;sgi:application&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Choose ASGI or WSGI clearly and stay with that option throughout&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt; For Flask Devs:&lt;/u&gt; &lt;/p&gt;

&lt;p&gt;If your app is in main.py, it would be called as &lt;code&gt;main:app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In this step we'll be binding the web-server to UNIX socket. Learn more about UNIX Sockets. &lt;a href="https://www.ibm.com/docs/en/ztpf/1.1.0.15?topic=considerations-unix-domain-sockets"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am attaching the docs of Daphne, Uvicorn and Gunicorn down which use different flags to bind the application to a port.&lt;/p&gt;

&lt;p&gt;Run this command to bind it to the socket&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hypercorn &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="s1"&gt;'unix:/var/tmp/hypercorn.sock'&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; 4 main:app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this &lt;code&gt;-w&lt;/code&gt; defines the number of workers.&lt;br&gt;
Change &lt;code&gt;hypercorn.sock&lt;/code&gt; to the server which you choose to use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change the socket name according to your web server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🎇 Now we have our app listening on the &lt;code&gt;hypercorn.sock&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step Three:
&lt;/h3&gt;

&lt;p&gt;We've to proxy this socket to &lt;em&gt;NGINX&lt;/em&gt; and route &lt;em&gt;NGINX&lt;/em&gt; to listen to the &lt;code&gt;hypercorn&lt;/code&gt; socket.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;worker_processes&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;events&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;worker_connections&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;"localhost"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;/var/log/nginx/access.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;error_log&lt;/span&gt; &lt;span class="n"&gt;/var/log/error.log&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://unix:/var/tmp/hypercorn.sock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I'll briefly explain this config file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Worker_processes =&amp;gt; 1 worker process has been assigned for this specific task/process&lt;/li&gt;
&lt;li&gt;Worker connections =&amp;gt; Number of connections that can be handled by 1 process&lt;/li&gt;
&lt;li&gt;Listen =&amp;gt; Listens at the mentioned port&lt;/li&gt;
&lt;li&gt;Server Name =&amp;gt; Listens at this domain&lt;/li&gt;
&lt;li&gt;Access_log =&amp;gt; The file location at which access log is stored, access log stores requests made&lt;/li&gt;
&lt;li&gt;Error_log =&amp;gt; The file location at which error log is stored.&lt;/li&gt;
&lt;li&gt;Proxy Pass =&amp;gt; The socket/port which needs to be proxied.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This file should change based on your socket but the other configuration can be the same.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🚅 Save this file as nginx.conf&lt;/p&gt;

&lt;p&gt;Feel free to read about &lt;em&gt;NGINX&lt;/em&gt; &lt;a href="https://nginx.org/en/docs/"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once this file is made, save it at &lt;code&gt;/etc/nginx/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Either you can use docker to run a Linux server or shell into an instance.&lt;/p&gt;

&lt;p&gt;If you want to copy it to docker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; nginx.conf /etc/nginx/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💣 You are ready to launch except one last step&lt;/p&gt;

&lt;h3&gt;
  
  
  Step four
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You have now wonderfully setup your web-server and the NGINX proxy 🙌&lt;/li&gt;
&lt;li&gt;You are just one-step away from accessing the port, and perhaps this is the ✅ or ❌ step&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently, NGINX can't read or write from the socket, so we need to &lt;code&gt;change access mode&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To do this, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;777 /var/tmp/&amp;lt;socket&amp;gt; 
&lt;span class="nb"&gt;sudo &lt;/span&gt;service nginx restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🌟Now you can listen from the port 8080, &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you are using systemctl, please use this command instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Play around with NGINX config as you wish based on your application's requirements.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading🧑‍🚀&lt;/p&gt;

&lt;h6&gt;
  
  
  Docs:
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.uvicorn.org/deployment/#running-behind-nginx"&gt;Uvicorn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.gunicorn.org/en/stable/deploy.html"&gt;Gunicorn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/django/daphne"&gt;Daphne&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>nginx</category>
      <category>hypercorn</category>
    </item>
    <item>
      <title>How to configure your WSL resources?</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Tue, 02 Nov 2021 14:59:54 +0000</pubDate>
      <link>https://forem.com/abhijithganesh/how-to-configure-your-wsl-resources-594m</link>
      <guid>https://forem.com/abhijithganesh/how-to-configure-your-wsl-resources-594m</guid>
      <description>&lt;p&gt;In this simple tutorial, I will be explaining how to configure your windows subsystem for Linux efficiently and optimize your WSL performance when you're running applications through them.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why WSL firstly?
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt; Everyone has widespread access to windows but they may or maynot be savvy enough to run their favorite flavour of linux due to various constraints&lt;/li&gt;
&lt;li&gt;WSL2 really makes life easy for those devs who can't access linux through a cloud provider or locally run it on their devices.&lt;/li&gt;
&lt;li&gt;WSL has support for various distros like Debian, Arch and Ubuntu.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now coming to the interesting part, windows has all access to the CPU and memory resources in your device and it is built in a way which will optimize the resource utilization but how do you limit your linux subsystem, let  us say you'd like to manipulate the configuration to suit your needs the best, then you should follow these steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step one:
&lt;/h2&gt;

&lt;p&gt;Shut your current running instance of WSL using this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;wsl&lt;/span&gt; &lt;span class="nf"&gt;--shutdown&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Run this command through powershell as administrator&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step Two:
&lt;/h2&gt;

&lt;p&gt;Create a configuration file for WSL on your user profile directory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="nf"&gt;notepad&lt;/span&gt; &lt;span class="nf"&gt;"$env:USERPROFILE\.wslconfig"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step Three:
&lt;/h2&gt;

&lt;p&gt;&lt;u&gt; &lt;strong&gt;This is the most important step in this project, so please follow carefully&lt;/strong&gt; &lt;/u&gt;&lt;/p&gt;

&lt;p&gt;The following parameters define their corresponding resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;CPU&lt;/em&gt;  = &amp;gt; cores dedicated to WSL&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Memory&lt;/em&gt;  = &amp;gt; RAM allocated to WSL&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;AutoMount&lt;/em&gt;  = &amp;gt; Mount your default NTFS drive to your subsystem&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Boot&lt;/em&gt; =&amp;gt; defines your booting options for services&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Kernel&lt;/em&gt;  = &amp;gt; Custom kernel for linux&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;LocalhostForwarding&lt;/em&gt;  = &amp;gt; for port-forwarding your applications running on localhost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My configuration for CPU and memory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight postscript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;wsl2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;memory=9GB&lt;/span&gt;  
&lt;span class="nf"&gt;processors=4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how you can configure your resources for WSL 😀. Feel free to leave some comments down below⬇️.&lt;/p&gt;

&lt;p&gt;You can read this &lt;a href="https://docs.microsoft.com/en-us/windows/wsl/wsl-config"&gt;document&lt;/a&gt; for the reference&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devjournal</category>
      <category>wsl</category>
    </item>
    <item>
      <title>How to run Cassandra Container locally?</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Tue, 19 Oct 2021 16:45:32 +0000</pubDate>
      <link>https://forem.com/abhijithganesh/how-to-run-cassandra-container-locally-56bk</link>
      <guid>https://forem.com/abhijithganesh/how-to-run-cassandra-container-locally-56bk</guid>
      <description>&lt;p&gt;Most of us have heard about &lt;a href="https://github.com/apache/cassandra"&gt;Apache Cassandra&lt;/a&gt;, it is an open sourced distributed NoSQL Database which is used by large corporations like Facebook, Uber, etc&lt;/p&gt;

&lt;p&gt;I will be explaining how to create a container with cassandra and connect into it to execute the Cassandra Query Language(CQL) statements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cassandra offers various advantages like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Scalability&lt;/li&gt;
&lt;li&gt;  Maximum Fault Tolerance across NoSQL databases&lt;/li&gt;
&lt;li&gt;  Multi Data-Center support and Hybrid Cloud support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this tutorial, I will be explaining how to create an instance on Docker and execute basic cqlsh commands&lt;/p&gt;

&lt;p&gt;Basically, all docker containers can be established with a yaml, the compose file for this is&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.9'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cassandra-dev&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cassandra&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;9042:9042&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;CASSANDRA_USE_ASTRA&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false"&lt;/span&gt; 
      &lt;span class="na"&gt;CASSANDRA_USER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cassandra"&lt;/span&gt; 
      &lt;span class="na"&gt;CASSANDRA_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cassandra"&lt;/span&gt; 
      &lt;span class="na"&gt;CASSANDRA_LOCAL_DC&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;datacenter1"&lt;/span&gt; 
      &lt;span class="na"&gt;CASSANDRA_CONTACT_POINTS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;db:9042"&lt;/span&gt;
      &lt;span class="na"&gt;CASSANDRA_KEYSPACE_CQL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CREATE&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;KEYSPACE&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;test_keyspace&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;WITH&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;REPLICATION&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{'class':'SimpleStrategy','replication_factor':1};"&lt;/span&gt; 
      &lt;span class="na"&gt;MONITORING_PROMETHEUS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false"&lt;/span&gt;
      &lt;span class="na"&gt;MONITORING_GRAFANA&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false"&lt;/span&gt;
      &lt;span class="na"&gt;DISTRIBUTED_TRACING_ENABLED&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false"&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Once you've created this yaml, open your CLI and run the following command, I have explained what it does down below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a nutshell, this yaml tells docker to spin up a container with the following details&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Pull up the Cassandra Image&lt;/li&gt;
&lt;li&gt;  Spin it up on the container named “Cassandra-local”&lt;/li&gt;
&lt;li&gt;  Expose it on ports 9042&lt;/li&gt;
&lt;li&gt;  Create a Cassandra user with the following parameters&lt;/li&gt;
&lt;li&gt;           username: Cassandra, password: Cassandra&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://cassandra.apache.org/doc/latest/cassandra/cql/ddl.html"&gt;Create a keyspace&lt;/a&gt; (similar to database if you’re from a SQL background) , called test_keyspace
To access the database/keyspace you can access the shell by using the following command
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; cassandra-dev /bin/bash
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;cqlsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To create a keyspace use the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    CREATE KEYSPACE test_keyspace_2;
    USE test_keyspace_2;
    CREATE TABLE IF NOT EXISTS test_table(
      id         uuid,
      first_name text,
      last_name  text,
      address    text,
      city       text,
      telephone  text,
      PRIMARY KEY ((id))
    );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can consider using the &lt;a href="https://cassandra.apache.org/doc/latest/cassandra/data_modeling/data_modeling_rdbms.html"&gt;DDL and DML&lt;/a&gt; commands from the docs here&lt;/p&gt;

&lt;p&gt;The connection to docker has been successful and now you can connect it to learn CQL.&lt;/p&gt;

</description>
      <category>nosql</category>
      <category>hacktoberfest</category>
      <category>database</category>
      <category>docker</category>
    </item>
    <item>
      <title>How to deploy Django to Heroku</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Wed, 15 Sep 2021 09:50:37 +0000</pubDate>
      <link>https://forem.com/abhijithganesh/how-to-deploy-django-to-heroku-4ea3</link>
      <guid>https://forem.com/abhijithganesh/how-to-deploy-django-to-heroku-4ea3</guid>
      <description>&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;Most of you would’ve already seen n number of blogs on how to deploy Django projects to Heroku but in this article, I shall explain in simple words in a sequential manner without much confusion.&lt;/p&gt;

&lt;p&gt;We shall consider a simple project without any additional boiler plate code. I shall call the &lt;u&gt;&lt;em&gt;project&lt;/em&gt; as &lt;strong&gt;mysite&lt;/strong&gt; and &lt;em&gt;app&lt;/em&gt; as &lt;strong&gt;appOne&lt;/strong&gt;.&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;I shall start from scratch and attach this repository at the end of this tutorial.&lt;/p&gt;

&lt;h3&gt;
  
  
  For Linux Users:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv Environ
&lt;span class="nb"&gt;source &lt;/span&gt;Environ/bin/activate
python &lt;span class="nt"&gt;-m&lt;/span&gt; pip &lt;span class="nb"&gt;install &lt;/span&gt;django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  For Windows Users:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m venv Environ
cd Environ/Scripts/
activate
cd ../../
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuring Django
&lt;/h3&gt;

&lt;p&gt;Continuing this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;django-admin startproject mysite
&lt;span class="nb"&gt;cd &lt;/span&gt;mysite
django-admin startapp appOne
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;This is how your tree will look after running those commands successfully&lt;/em&gt; &lt;strong&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mysite
    │   manage.py
    │
    ├───appOne
    │   │   admin.py
    │   │   apps.py
    │   │   models.py
    │   │   tests.py
    │   │   views.py
    │   │   __init__.py
    │   │
    │   └───migrations
    │           __init__.py
    │
    └───mysite
            asgi.py
            settings.py
            urls.py
            wsgi.py
            __init__.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;u&gt;&lt;strong&gt;Steps to launch and deploy the project to Heroku:&lt;/strong&gt;&lt;/u&gt;
&lt;/h2&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Step One&lt;/em&gt;:
&lt;/h4&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="nn"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;BASE_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__file__&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parent&lt;/span&gt;
&lt;span class="n"&gt;SECRET_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="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'SECRET_KEY'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;DEBUG&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="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'DEBUG'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ALLOWED_HOSTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you've created the Django project, please add the security key to your Environment secrets and Config Vars.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r0msiy4v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/isnwdv9uul1u52bpkwei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r0msiy4v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/isnwdv9uul1u52bpkwei.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Step Two&lt;/em&gt;:
&lt;/h4&gt;

&lt;p&gt;We don’t have any static files for this project, but if needed you can use &lt;em&gt;whitenoise&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devcenter.heroku.com/articles/django-assets"&gt;Heroku's guide on whitenoise&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;MIDDLEWARE&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
   &lt;span class="s"&gt;'whitenoise.middleware.WhiteNoiseMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;STATICFILES_STORAGE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'whitenoise.storage.CompressedManifestStaticFilesStorage'&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;In config vars set &lt;em&gt;DEBUG_COLLECTSTATIC&lt;/em&gt; = 1.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Step Three&lt;/em&gt;:
&lt;/h4&gt;

&lt;p&gt;After configuring the project, we'll now be freezing the requirements and Procfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip freeze&amp;gt;requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  &lt;strong&gt;Procfile:&lt;/strong&gt;
&lt;/h6&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: manage.py makemigrations &amp;amp;&amp;amp; manage.py migrate
web: gunicorn mysite.wsgi:app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;em&gt;Step Four&lt;/em&gt;:
&lt;/h4&gt;

&lt;p&gt;Commit all these files to your git repository and push it to your source .&lt;br&gt;
I’ll be using &lt;em&gt;GitHub&lt;/em&gt; for this tutorial&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init &lt;span class="nb"&gt;.&lt;/span&gt; 
git add &lt;span class="nb"&gt;.&lt;/span&gt; 
git commit &lt;span class="nt"&gt;-m&lt;/span&gt;  “Initial Commit🚀”
git remote add origin &amp;lt;&lt;span class="nb"&gt;link&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;em&gt;Step Five&lt;/em&gt;:
&lt;/h4&gt;

&lt;p&gt;Go to dashboard and deploy &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JDXDx-aE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xz4b0w5mm1n2x12pned0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JDXDx-aE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xz4b0w5mm1n2x12pned0.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It should be working fine! Feel free to reach out if there are any issues.&lt;/p&gt;

&lt;p&gt;View the deployment here at: &lt;a href="https://testing-repos.herokuapp.com/"&gt;https://testing-repos.herokuapp.com/&lt;/a&gt;&lt;br&gt;
Repository at: &lt;a href="https://github.com/AbhijithGanesh/Tutorial-for-Heroku"&gt;https://github.com/AbhijithGanesh/Tutorial-for-Heroku&lt;/a&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>heroku</category>
      <category>python</category>
    </item>
    <item>
      <title>End of Discord.Py</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Fri, 03 Sep 2021 07:14:10 +0000</pubDate>
      <link>https://forem.com/abhijithganesh/end-of-discord-py-58pc</link>
      <guid>https://forem.com/abhijithganesh/end-of-discord-py-58pc</guid>
      <description>&lt;h1&gt;
  
  
  Beginning of a New Era?
&lt;/h1&gt;

&lt;p&gt;Well, to start it all off, R Danny(&lt;a href="https://github.com/Rapptz/"&gt;View&lt;/a&gt;) the sole maintainer of discord.py has decided to archive  the repository which supported all the python developers to make discord bots across the world.Since Python was the first-language to many young people across the world, they've readily capitalized  this library. They’ve decided to step down from the role of maintainer and it marks a sad end to the entire community. The API allowed us, the python-developers to quickly create bots with modern features like Asynchronous Python. Why did this Happen?&lt;/p&gt;

&lt;h1&gt;
  
  
  A Little Backstory:
&lt;/h1&gt;

&lt;p&gt;As mentioned in their gist github(&lt;a href="https://github.com/Rapptz/discord.py"&gt; Read the full article&lt;/a&gt;) Danny developed this years ago to after switching to Discord from IRC and Skype. They weren’t satisfied with the features of JavaScript to build a bot, subsequently they reverse engineered using the resources that were provided by Discord. That single idea which was implemented became a big boon to all the aspiring developers across the world who’ve used this library to rapidly develop bots to fulfill their needs. To all the experienced developers reading this, the maintainer initiated the idea of a python library for discord  and implemented it in a time where Discord did not use OAuth-2 to authorize Bots. This library was implemented in a time-frame where using bots in server used to be complicated. It was way ahead of its time.&lt;/p&gt;

&lt;p&gt;The project is relatively old,stable and it was one of the projects which the community utilized to a great extent. The maintainer had previously interacted with other bot-developers, discord-developers and contributors through the “dinfra”(discord infrastructure) server. The Maintainer in his gist has reported how there has been a major expectation mismatch. It has also been  mentioned that there has been a “bureaucratic disaster” and how there was a terrible mix-up when Discord had announced about giving “Verified Bot Developers” badges.&lt;/p&gt;

&lt;h1&gt;
  
  
  What Triggered this Event?
&lt;/h1&gt;

&lt;p&gt;Around July-August 2020, discord employees gave a heads up about the slash commands and it was a viral topic back then. When the maintainer tried to implement this in their library, issues were reported which were pertinent to permissions. The Slash Commands by-passed permissions and was heavily criticized by the community. Post the turn of events(bureaucratic issues, slash-command Controversy) there was an internal meeting according to the maintainer (It is legally bound by a NDA therefore I would suggest you to go by their words directly)&lt;/p&gt;

&lt;h4&gt;
  
  
  Quoting from their article:
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;The meeting was bound by an NDA, which made us reluctant to sign it, but since we believed and were told that this would be our &lt;br&gt;
final chance to get a seat at the table for this change, we all agreed with the sole purpose of convincing the developers that this direction was a bad idea.&lt;/p&gt;

&lt;p&gt;Unfortunately, due to being legally bound by this NDA, I cannot share too many details. However, I will mention that the morale from all the library developers fell quite fast.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The fall was imminent post this point because the maintainer couldn’t keep up with the changes. It must be duly noted that the maintainer couldn't keep up because of repeated and persistent issues which took a hit on their morale. The maintainer reported that the discord team is “sloppy and hasty” with changes. Since these promises and changes can’t be taken care of, they’ve stepped down. They’ve also suggested their opinion that the gateway API would be deprecated in the future and a HTTP based API would take over.&lt;/p&gt;

&lt;h1&gt;
  
  
  What Next?
&lt;/h1&gt;

&lt;p&gt;According to the maintainer, Discord has told that the bots will continue to work fine even after April 2022. As the author of this post, I don’t know how things will turn out for the Python community. There are alternatives to the retired library like Nextcord(&lt;a href="https://github.com/nextcord/"&gt;View&lt;/a&gt;). Also Danny R(&lt;a href="https://github.com/Rapptz"&gt;View their profile&lt;/a&gt;) has also mentioned that libraries for .NET, ruby and PHP have either partially implemented or not implemented the changes for slash commands. We might expect bigger havoc with the bots in the near future if discord decides to enforce the feature. I am unsure about how things will turn out and this might be a big blow to the users who used Python or intend to use Python for building bots. On an optimistic note, the project may be restored in the future because the maintainer is unsure about fully retiring this.&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>github</category>
      <category>javascript</category>
    </item>
    <item>
      <title>What does it take to build an unconventional REST API in Python?</title>
      <dc:creator>Abhijith Ganesh</dc:creator>
      <pubDate>Tue, 31 Aug 2021 15:48:13 +0000</pubDate>
      <link>https://forem.com/abhijithganesh/what-does-it-take-to-build-an-unconventional-rest-api-in-python-3oog</link>
      <guid>https://forem.com/abhijithganesh/what-does-it-take-to-build-an-unconventional-rest-api-in-python-3oog</guid>
      <description>&lt;h1&gt;
  
  
  What is this about?
&lt;/h1&gt;

&lt;p&gt;This is my first article/post on &lt;a href="https://dev.to"&gt;https://dev.to&lt;/a&gt;. So I would appreciate all suggestions and tips relevant to my article . Now diving into the topic.&lt;/p&gt;

&lt;p&gt;Let us say, you are assigned for a project and now you need to make an API along with a &lt;u&gt;Django backend&lt;/u&gt;. It needs to be RESTful in nature and your goal is speed. What would an ideal solution be?&lt;em&gt;(Graphene and related integration pertinent to GraphQL can be done, I might do it in the future and when I do, I shall update the community with another post)&lt;/em&gt; Most likely, everyone from your seniors to google would suggest Django-REST-Framework because it is more convenient and more widely used. &lt;br&gt;
But then why should you consider this option?&lt;/p&gt;

&lt;h2&gt;
  
  
  Reasons why you must give it a chance:
&lt;/h2&gt;


&lt;li&gt; Speed: &lt;/li&gt;
&lt;br&gt;
I know Python and Django are usually criticized for their speeds but FastAPI promises us something different. As such it is flexible, fast and intuitive. It is easier to make an API if you know how to make REST-API methods in python. It is quite similar to writing methods in Flask. It might be a little bit of a stretch when you are starting out with the models because you might need to translate a few parameters using Pydantic. After this is set up, all API endpoints and all HTTP methods can be converted into functions in python seamlessly.

&lt;p&gt;&lt;u&gt;It is a promising avenue where both rapid development and speed can be simultaneously achieved.&lt;/u&gt;&lt;/p&gt;


&lt;li&gt;Power of a Strong and Solid Back-end:&lt;/li&gt;
&lt;br&gt;
With this project , One can quickly utilize the features provided by the Django Framework without any additional worries. Sessions, User-Authentication, ORM and all other salient features can be seamlessly integrated with the power of FastAPI resulting in the best of the two worlds. Apart from this, you get the Django-Admin Panel which grants access to essential/data of higher relevance and importance

&lt;p&gt;&lt;u&gt;With little effort, One gets the best of the two worlds and a project which is truly reliable&lt;/u&gt;&lt;/p&gt;


&lt;li&gt;Documentation:&lt;/li&gt;
&lt;br&gt;
One can access the Documentation for the App they've developed through by going to &lt;em&gt; project-url/redoc&lt;/em&gt; and see an Open API documentation for the methods they've defined. Clearly an additional perk which will be helpful to all the stakeholders on the longer run.
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This project was an amazing journey in my opinion and I believe it might be used in some future projects and I believe this exploration has satisfied my quest. Nevertheless one must keep experimenting like this and try bringing something new to the world.&lt;/p&gt;

&lt;p&gt;To learn about the technical aspects of the project visit&lt;br&gt;
&lt;a href="github.com/AbhijithGanesh/FastAPI-Django-Integration"&gt; Click Here &lt;br&gt;
&lt;/a&gt;&lt;br&gt;
And to view the deployment (The UI is not optimized for Mobile Devices)&lt;br&gt;
&lt;a href="https://fastapi-django.herokuapp.com/Application"&gt; Click Here&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>webdev</category>
      <category>python</category>
    </item>
  </channel>
</rss>
