<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Aaishika S Bhattacharya on Medium]]></title>
        <description><![CDATA[Stories by Aaishika S Bhattacharya on Medium]]></description>
        <link>https://medium.com/@aaishika?source=rss-8bfb9e3a72ea------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*WAX2Dex1htmWnoz_KwUNyA.png</url>
            <title>Stories by Aaishika S Bhattacharya on Medium</title>
            <link>https://medium.com/@aaishika?source=rss-8bfb9e3a72ea------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 09 Jun 2026 02:48:45 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@aaishika/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Snapshots in Cloud Computing and Why They are Useful]]></title>
            <link>https://aaishika.medium.com/snapshots-in-cloud-computing-and-why-they-are-useful-63e2fe8de43a?source=rss-8bfb9e3a72ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/63e2fe8de43a</guid>
            <category><![CDATA[backup]]></category>
            <category><![CDATA[snapshot]]></category>
            <category><![CDATA[cloud-security]]></category>
            <category><![CDATA[data-protection]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <dc:creator><![CDATA[Aaishika S Bhattacharya]]></dc:creator>
            <pubDate>Sun, 25 Jun 2023 13:37:35 GMT</pubDate>
            <atom:updated>2023-06-25T13:37:35.595Z</atom:updated>
            <content:encoded><![CDATA[<p>If you’ve ever landed in a situation where you wish you had taken a backup of your virtual machine or storage, you already know the pain. Read on to find out what Snapshots are, why they are useful, and why they are worth implementing on your VMs right away.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jYEQG3K65ivVUQwfzzexKw.jpeg" /></figure><h3>What are Snapshots?</h3><p>Snapshots are on-demand disc images of a server, virtual machine, or storage system at any given moment. As the name suggests, they are a “snap” of the files and/or configurations of the server at a specific time to preserve system settings for use in the future. In addition to enabling rollbacks, Snapshots are also pretty useful in replicating the settings for additional servers or storage.</p><h3>How are Snapshots Different from Backups?</h3><p>In cloud computing, Snapshots and Backups are often used in place of each other but serve different purposes. Snapshots are all about speed, flexibility, and efficiency and come in handy in situations where time is of the essence, like fail-safe rollbacks. However, Backups are a more comprehensive method for restoring data and system state. In exchange for immediacy, Backups help with data protection more efficiently than Snapshots, because, unlike a Snapshot, data is pulled and copied to create a Backup. Backups can also occasionally rely on Snapshots for speed and consistency, but they are always stored externally.</p><h3>Which one of the two should I pick?</h3><p>The core difference between a Snapshot and a Backup is the fact that Backups are generally stored externally, which adds a slight latency in comparison to Snapshots.</p><p>If your business use case revolves around speed and efficiency and you’re on the lookout for data protection and rollbacks that are quick, Snapshots are the best fit for you. Snapshots are highly useful for version control, as every single Snapshot segregates into a new branch to protect your infrastructure from potential damage in the middle of upgrades.</p><p>However, this should not stop you from <strong>also</strong> using Backups for regular protection and maintenance, as they store individual files that cannot be restored from Snapshots. Also, be mindful that Snapshots end up consuming a chunk of the primary storage capacity.</p><p>Instead of asking which one of the two is better, it’s always recommended to go for both, as they only complement each other to safeguard data and restore system state at the earliest.</p><h3>Snapshots on DigitalOcean</h3><p>In this blog, we are also going to check out how to create and use Snapshots on DigitalOcean. If you don’t have an account yet, you can create one for free using <a href="https://try.digitalocean.com/developer-cloud">this link</a> and get $200 worth of free credits while you’re at it.</p><p>The pricing of Snapshots on DigitalOcean depends entirely on the size of the same. There are no additional charges for making a snapshot available in multiple regions, and Snapshots are charged at $0.06 GB per month for Droplets and Volumes.</p><h4>Create a Snapshot of a Droplet:</h4><ol><li>Head over to the control panel and select the specific Droplet.</li><li>Shut down the Droplet using the Interface or execute the following in the console:</li></ol><pre>sudo shutdown -h now</pre><p>If you’re using the Interface of DigitalOcean, you’ll find the toggle button towards the top right of your screen.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KZLfrdyzJZjpfC1EeeOPUA.png" /><figcaption>Shut Down Droplet using the Interface</figcaption></figure><p>3. After shutting down the Droplet, in the menu, find the option that reads “Snapshots”, enter a name of your liking, and click “Take Live Snapshot”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cXsfh6HP2WjQFt1cjlVlbA.png" /><figcaption>Take a Snapshot of the Droplet</figcaption></figure><p>The process takes roughly a minute, and then you’re all set!</p><h4>Create a Snapshot of a Volume:</h4><p>You can take a Snapshot of a Volume from Control Panel &gt; <a href="https://cloud.digitalocean.com/volumes?i=d4c72b">Volumes</a> or you can do it directly from the Droplet’s Menu if the Volume is attached to your Droplet. For the Latter:</p><ol><li>On the same menu as the aforementioned one, select Volumes.</li><li>Click on the drop-down that reads “More” and select “Take Snapshot”.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fgEOKQawCB-1E3QC0NkfBg.png" /><figcaption>Take a Snapshot of a Volume</figcaption></figure><p>3. Give it a name of your liking and then select “Take Snapshot” one more time. Done!</p><h4>Create a New Droplet from a Snapshot:</h4><ol><li>Click on the green “Create” button towards the top right of the interface and from the drop-down select “Droplets”.</li><li>Choose the region and datacenter that you want to proceed with and then scroll down to the option that reads “Choose an Image”.</li><li>Now find the “Snapshots” tab and select the Snapshot that you wish to go ahead with.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*etSVu3nx1HAazNfF9Xy_hw.png" /><figcaption>Use Snapshots for Creating Droplets</figcaption></figure><p>4. Select the Size and CPU Options as per your requirements and then click on the “Create Droplet” button.</p><p>Your new Droplet created from a Snapshot should be ready in a couple of minutes!</p><h4>Create a New Volume from a Snapshot:</h4><ol><li>Click on the green “Create” button towards the top right of the interface and from the drop-down select “Volumes”.</li><li>In the pop-up that shows up, select the tab that reads “Create from Snapshot”, select the Snapshot you wish to use and click on “Next”.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*W5dsMZ-rnTUmx7kr_7sknA.png" /><figcaption>Use Snapshots for Creating Volumes</figcaption></figure><p>3. Select Volume Size and Droplet to attach to based on your requirements and give the Volume a name. Once through, click on “Create Volume” and that’s all!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R7Va9QP0LuZf0bsicpV5Ig.png" /></figure><p>The new Volume created from the Snapshot will be ready to use within a minute!</p><h3>Ending Notes</h3><p>Snapshots are a powerful tool in the world of Cloud Computing and can be very useful in situations where time is of the essence to recover and restore system state. Since each Snapshot branches out, version control can become really easy with these. However, if you wish to have a restorable copy of all the data on your architecture, also consider using Backups. It’s not Snapshots vs Backups, but Snapshots and Backups, since both are equally significant.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=63e2fe8de43a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Pokémon and Kubernetes: How are they connected?]]></title>
            <link>https://aaishika.medium.com/pok%C3%A9mon-and-kubernetes-how-are-they-connected-a68f928bc830?source=rss-8bfb9e3a72ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/a68f928bc830</guid>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[pokemon]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[pokémon-go]]></category>
            <dc:creator><![CDATA[Aaishika S Bhattacharya]]></dc:creator>
            <pubDate>Wed, 19 Jan 2022 08:32:22 GMT</pubDate>
            <atom:updated>2022-01-19T08:32:22.387Z</atom:updated>
            <content:encoded><![CDATA[<p>Niantic and Google Cloud collaborated to build Pokémon Go, but they ended up scaling the world’s favorite container platform too. Read on to find out how.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*kQK-qpJS1Zcdy5Nr.jpg" /></figure><p>Released back in 2016, Pokémon Go was an instant hit. As a matter of fact, the augmented-reality development, available for both Android and iOS devices, surged player traffic way past Niantic’s expectations within 15 minutes of its launch in Australia and New Zealand. Niantic chose to launch Pokémon Go over Google Cloud and the teams estimated 1X player traffic with the worst-case estimate of 5X of the same. Take a look at the image below to visualize the actual traffic in terms of Cloud Datastore Transactions per second shared by Google Cloud:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*O0cr3Wxq4xBYGw7L.PNG" /><figcaption>Cloud Datastore Transactions Per Second for Pokémon Go, shared by Google Cloud</figcaption></figure><p>Within a few hours of the launch, the actual player traffic touched ten times the worst-case estimate.</p><h3>Google Customer Reliability Engineering</h3><p>Google introduced Customer Reliability Engineering (CRE), a new engagement model in which technical staff from Google integrates with customer teams, creating a shared responsibility for the reliability and success of critical cloud applications.</p><p>CRE’s first client was Niantic and their first assignment was monitoring and stabilizing the launch of Pokémon Go in the US. Niantic reached out to the CRE Team for reinforcements.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*uZ4PmufqIVny_xNY.jpg" /></figure><h3>Google Cloud Technologies Involved</h3><p>Pokémon Go was a container-based application and used many services across Google Cloud, but <a href="https://cloud.google.com/datastore/">Cloud Datastore</a> became a direct proxy for the game’s overall popularity given its role as the game’s primary database for capturing the Pokémon game world. The transactions per second surged to 50 times the initial target. The Google CRE Team seamlessly provisioned extra capacity on behalf of Niantic to stay well ahead of their record-setting growth. The Team worked hand-in-hand with Niantic to review every part of their architecture, tapping the expertise of core Google Cloud engineers and product managers — all against a backdrop of millions of new players pouring into the game. The application logic for the game runs on <a href="https://cloud.google.com/container-engine/">Google Container Engine (GKE)</a> powered by the open-source Kubernetes project.</p><h3>What and Why Kubernetes</h3><p>Kubernetes is an open-source container-orchestration system for automating computer application deployment, scaling, and management. It was originally designed by Google and is now maintained by the Cloud Native Computing Foundation.</p><p>Resources like deployments help to automate and manage clusters of applications effortlessly with very little downtime. Deployments keep an eye on the pods and if any of the pods go down due to failure, it tries to get the pod back online. This eliminated the need to keep on monitoring every container on every node on which the application is running.</p><p>Back in 2016, Niantic chose GKE for its ability to orchestrate its container cluster at a planetary scale, freeing its team to focus on deploying live changes for their players.</p><blockquote>Pokémon Go is the largest Kubernetes deployment ever on Google Container Engine.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*rrRG3F4MQyJ4eMYH.jpeg" /></figure><h3>How Kubernetes Benefitted in the Process</h3><p>During the US launch, things did not unfold as expected and a lot of issues emerged around the game’s stability.</p><p>Niantic and the Google CRE team had to upgrade to a newer version of GKE that would allow for more than a thousand additional nodes to be added to its container cluster, in preparation for the highly anticipated launch in Japan just a few days later. Careful measures were taken to avoid disrupting existing players, cutting over to the new version while millions of new players signed up and joined the Pokémon game world.</p><p>A side benefit of the experience was that due to the scale of the container cluster and accompanying throughput, a multitude of bugs were identified, fixed, and merged into the Kubernetes open-source project, adding to its popularity amongst developers.</p><p>On top of this upgrade, the engineers worked in concert to replace the network load balancer, deploying the newer and more sophisticated HTTP/S load balancer in its place. The HTTP/S load balancer is a global system tailored for HTTP/S traffic, offering higher throughput for the amount and types of traffic Pokémon Go was seeing.</p><h3>The Outcome</h3><p>Improving upon the US launch, generous capacity provisioning, the architectural swap to the latest version of Container Engine powered by Kubernetes, along with the upgrade to the HTTP/S Load Balancer paid off when the game launched without any incidents in Japan, where the number of new users signing up to play tripled the US launch two weeks earlier.</p><p>Google’s global network helped reduce the overall latency for Pokémon Trainers inhabiting the game’s shared world. Game traffic travels Google’s private fiber network through most of its transit, delivering reliable, low-latency experiences for players worldwide.</p><h3>Ending Notes</h3><p>Niantic and Google Cloud — spanning CRE, SRE, development, product, support, and executive teams — collectively built Pokémon Go from the ground up. Without Google Cloud’s SRE team in place, I doubt if Pokémon Go would be as popular, even more than 5 years after its launch. One of the most widely played games of all time, the number of players are rising once again, especially now that people are able to start going outside post-pandemic. Who knew Pokémons would help Kubernetes grow?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a68f928bc830" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introduction to Auth0 Actions]]></title>
            <link>https://aaishika.medium.com/introduction-to-auth0-actions-8a1b95873339?source=rss-8bfb9e3a72ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/8a1b95873339</guid>
            <category><![CDATA[auth0]]></category>
            <category><![CDATA[authentication]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Aaishika S Bhattacharya]]></dc:creator>
            <pubDate>Sat, 15 Jan 2022 13:04:24 GMT</pubDate>
            <atom:updated>2022-01-17T10:22:08.665Z</atom:updated>
            <content:encoded><![CDATA[<p>Actions are used to customize and extend Auth0’s capabilities with custom logic, read on to see how you can implement it effortlessly in your project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Dq78KRtbAUHLIVwuLrchzg.png" /></figure><h3><strong>What are Auth0 Actions?</strong></h3><p>Actions are secure, tenant-specific, <a href="https://auth0.com/docs/customize/actions/manage-versions">versioned</a> functions written in Node.js that execute at certain points during the Auth0 runtime. In short, an Action is a programmatic way to add custom business logic into your login flow. With Actions, you can add a customized mandatory logic to your login and identity flows that satiate your needs. The service also allows you to connect external integrations that complement the overall extensibility experience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*WGzGAxLcecYUeu67" /></figure><p>In the aforementioned flow, you can observe that as the user tries logging into the system, a trigger is initiated to verify the user’s identity using Onfido, and then the user’s consent is confirmed using OneTrust before completing the login flow and issuing the token.</p><h3>Why Auth0 Actions?</h3><ul><li><strong>Observability: </strong>When Actions are executed, Auth0 will capture key metrics about them and link them to Auth0 Logs.</li><li><strong>Extensibility:</strong> Auth0 Actions is built to give developers more tooling and a better experience in their login workflows.</li><li><strong>Multiple actions on every trigger: </strong>Every Action trigger supports multiple independent Actions.</li><li><strong>Version Control:</strong> You have the ability to store a history of individual Action changes and the power to revert back to previous versions as needed.</li><li><strong>Access to NPM Packages: </strong>Nearly all public NPM packages are available to be used within Actions.</li><li><strong>Pre-Production Testing: </strong>Your personal Actions can be drafted, reviewed, and tested before deploying into production.</li><li><strong>Improved Developer Experience: </strong>The flow editor lets you visually build custom workflows with drag and drop Action blocks for complete control.</li></ul><h3>Implementation</h3><p>We will be creating an Auth0 Action similar to the flow we saw at the beginning of this article using React. We’ll basically be creating an Action to make Multi-Factor Authentication (MFA) mandatory. You’ll need the following:</p><ol><li>An Auth0 Account (if you don’t have one yet, visit <a href="https://a0.to/signup-for-auth0">this link</a> and create one for free)</li><li>Any Code Editor of your choice. I’d recommend Visual Studio Code.</li></ol><h3>Getting Started with Auth0</h3><ol><li>Assuming that you already have an Auth0 Account, scroll down to find the option that says “Create Application”.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XVXPGF4CZ9WI7X6O.png" /></figure><p>2. In the modal that follows, add the name of the application and then select Single Page Web Applications as its type.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AdEJSU2JjwoEL2RTg1pbPg.png" /></figure><p>3. Click the Create button which will redirect you to the “Quick start” section. In the new modal, select “React”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Tpgv_8nrWL1cRGy8pWSX0A.png" /></figure><p>4. You should see a screen that’s similar to the one below. Proceed to download the code selecting the appropriate option.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Bgus92EXIDagm9waDOC11g.png" /></figure><p>5. Click on the Setting tab to change the configuration of your Auth0 application. We’ll also be borrowing some data from this tab, precisely the Domain, and Client ID. I won’t be covering the theory of different URLs and origins but if you are interested in reading more about them, refer to <a href="https://systemweakness.com/implementing-user-authentication-with-auth0-in-react-99324ebdbce2">this similar article</a> that I drafted a while back.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-ef9cRYNrpg7Fqb8Ds4dIQ.png" /></figure><p>6. Add your localhost URL which will be http://localhost:3000 unless you have changed it, to the following fields in the Settings Page.</p><ul><li>Allowed Callback URLs</li><li>Allowed Logout URLs</li><li>Allowed Web Origins</li></ul><h3>Setting Up Users and Roles</h3><ol><li>Click on the User Management Tab in the sidebar. Click on the Users tab followed by the Create User Option. We’ll create 2 Users for our Action.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ln2Z9cL3LbxSUQjjkgqXiA.png" /></figure><p>2. Now go to the Roles Tab and click on Create Role Button. We’ll name the role Admin. Once created go to the user tab and assign it to the Admin user we created previously.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zx_KZp1Hj_YSE5TIoLZrEA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bo96zpurmtNqk07oqhO6QA.png" /></figure><p>We are through with setting up roles and users. Now let’s return to our actual Application.</p><h3>Setting Up the React App</h3><ol><li>Unzip the file we downloaded a while back and open the folder in a code editor of your choice. In src/auth_config.json add the details of your application from the Auth0 Dashboard, specifically the domain and Client ID.</li><li>To run the code, we first need to install the dependencies. Execute npm installfor the same. Execute the following to run the application in development mode npm run dev. You’ll see a Single Page Application like the one below built using React.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*f5jRWrGdMSTuFYtm" /></figure><p>You can choose to log in using the credentials we created for Users.</p><h3>Setting Up Actions</h3><p>Setting up Actions is easy.</p><ol><li>Click on the Actions tab in the sidebar towards your left. Go to the Flows Category to set up the flow of our Login. Select Login Flow. This will run the flow of action once the trigger is executed.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bIbc5WHSzg9Z2aVg0bUrrg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0hlgShDSNMbBowAy22hoQA.png" /></figure><p>2. Click on the + Button in front of Add Action and select Build Custom. Add a name, leave everything else as is and click on Create.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/858/1*UrjfLUYx0atxTnZigvv8NQ.png" /></figure><p>Once done, you’re redirected to a screen that looks like the one below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zmhoODbAcPprDj9jRkd1_A.png" /></figure><p>3. Find the onExecutePostLogin function and add the following snippet to it:</p><pre>if (event.authorization != undefined &amp;&amp; event.authorization.roles.includes(&quot;Admin&quot;)) {<br>      api.multifactor.enable(&quot;any&quot;);<br>  };</pre><p>What this simply does is verify if the user has an Admin role and if in case it does, asks the User to go through MFA. On the left side of the code editor, you can see a play button that will emulate a testing environment for your action. You will find the event object in which you can test the actions flow by adding Admin to the authorization.roles array.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bRTjCieTMQtFzAOSZdRuCw.png" /></figure><p>When you run the function with an Admin role, you will see a response as follows and when it’s not present you get an empty array.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wfXU6eraAOItgoh5ZRAIdw.png" /></figure><p>4. Click on Save Draft followed by Deploy. Now go back to the flow and click on the Custom tab towards the right and you will be able to drag and drop the Authentication Action into the flow. Click on Apply and the new flow will be integrated into your Application.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gC7JXZmfDnZ43r8aIINTrA.png" /></figure><p>5. Now we need to enable Multi-Factor Authenticationin the Auth0 dashboard. In the Security Tab that you can find in the sidebar, choose Multi-factor Auth. In the following screen enable One-time Password. This will allow users to use applications like Google Authenticator for a one-time password. There are other factors as well that you can enforce such as SMS or Email-based OTP.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5amGzDHM8cT9SUTgoVPU5Q.png" /></figure><p>In the Define Policiessection leave everything as is and save.</p><h3>Running the Application</h3><p>No spoilers here. Just hit npm startand you’re all set. When you try to login into the Application with the Admin account, you’ll be asked to complete the MFA flow we created.</p><p>You’ll basically be asked to consent to share your data with the Application and will only be allowed to proceed further after you share the required things. Try to log in with both the users we created previously to see the difference. The Action we created checks if the user trying to log in has the Admin role and if so, it triggers an MFA workflow with any of the enabled MFA use cases of the tenant.</p><h3>Ending Notes</h3><p>In a few steps, this is how we can effectively boost the security of our Application using Auth0 Actions. If you are interested in knowing more about the different sorts of triggers, head over to this <a href="https://auth0.com/docs/actions/triggers/">link</a>. You can also find the official documentation right <a href="https://auth0.com/docs/actions">here</a>.</p><p>This article is based upon the following blog post — <a href="https://blog.rohitjmathew.space/intro-to-auth0-actions">How to Extend Your Login Flow with Auth0 Actions</a>, drafted by Rohit Mathew, a fellow Auth0 Ambassador.</p><p>Implementing Auth0 is relatively easy in comparison to other services available in the market, which is why I prefer working with it. In case of any doubts or queries, please feel free to open a discussion below.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8a1b95873339" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Implementing User Authentication with Auth0 in React]]></title>
            <link>https://systemweakness.com/implementing-user-authentication-with-auth0-in-react-99324ebdbce2?source=rss-8bfb9e3a72ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/99324ebdbce2</guid>
            <category><![CDATA[authentication]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[auth0]]></category>
            <category><![CDATA[identity]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Aaishika S Bhattacharya]]></dc:creator>
            <pubDate>Thu, 13 Jan 2022 07:57:44 GMT</pubDate>
            <atom:updated>2022-01-14T08:41:01.015Z</atom:updated>
            <content:encoded><![CDATA[<p>Let’s check out how Auth0 can help with User Authentication when it comes to Web Applications built with React and how it’s better in comparison to market competitors.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aeCdUFTKTFcR8AdfPq3MKg.png" /></figure><h3>What is Auth0?</h3><p><strong>Auth0</strong> is an easy-to-implement, adaptable authentication and authorization platform. In short, it is a highly customizable platform that provides authentication and authorization as a service that can help in securing your application with tools that offer seamless integration.</p><p>Using Auth0 for authentication with client-side apps means that Auth0 is going to be responsible for issuing an access token after the user’s identity has been verified. There are several ways to verify a user’s identity, out of those, two common authentication mechanisms found abundantly today are via credentials given by the user (the traditional email or username combination with a password) or through a social identity provider.</p><p>Find out more about Auth0, <a href="https://auth0.com/docs/">here</a>.</p><h3>Why Auth0?</h3><ul><li><strong>Single Sign-On</strong> with support for over 40 different Identity Providers. SSO allows users to simply log in once and use all applications they have been granted access to. You could use your Google account to authenticate yourself with an application that decided to delegate the responsibility to create, maintain, and protect your username and password to Google.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*A7ILWtjoK1zTl-ox" /></figure><ul><li><strong>Universal Login</strong>, which significantly improves user experience while boosting security and consistency. Since authentication takes place on the same domain as the login, credentials are not sent across origins, increasing security and protecting against phishing and bucket brigade attacks, also known as man-in-the-middle (MITM) attacks.</li><li><strong>Multi-Factor Authentication</strong> provides an additional layer of security, decreasing the likelihood of unauthorized access.</li><li><strong>Anamoly Detection</strong> detects anomalies and stops malicious attempts to access your application. Auth0 offers two different kinds of shields, Brute-force protection and breached password detection.</li></ul><p>If you want to read about these features in detail, head over to this <a href="https://auth0.com/blog/auth0-features-to-fall-in-love-with/">link</a>.</p><h3>Setting up the React App</h3><p>In a terminal window, execute the following commands:</p><pre>npx create-react-app auth0-authentication<br>cd auth0-authentication<br>npm i react-router react-router-dom</pre><p>The first command will create a new React app for you while the second one navigates you into the directory. The two libraries that we installed in the third command will handle the navigation of our app. Run npm startto see what the app looks like before we make any changes. The command will start a development server that listens at port 3000 and will open the new app in your default web browser.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*459v53BNHSCI-XwqoeLSAA.png" /></figure><p>Now let’s update the index.js file. Simply add the following code snippet to the file:</p><pre>import { BrowserRouter } from &#39;react-router-dom&#39;;</pre><pre>ReactDOM.render(<br>&lt;BrowserRouter&gt;&lt;App /&gt;&lt;/BrowserRouter&gt;, document.getElementById(&#39;root&#39;));</pre><pre>serviceWorker.unregister();</pre><p>What we did was import BrowserRouter from the react-router-dom library, and encapsulate the App component inside this router. That’s pretty much it for kickstarting React Router.</p><h3>Getting Started with Auth0</h3><ol><li>To integrate Auth0 in our Application, we first need an Auth0 account. To create an account, click <a href="https://auth0.com/signup">here</a> and sign up for free.</li><li>Once you’re done with this, scroll down to find the option that says “Create Application”.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*PTvGV9SyWbmiULNLNqS72A.png" /></figure><p>3. In the modal that follows, add the name of the application and then select Single Page Web Applications as its type.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ImJ6p7PVix0aonEHTrZFfA.png" /></figure><p>4. Click the Create button which will redirect you to the “Quick start” section.</p><p>5. Click on the Setting tab to change the configuration of your Auth0 application. We’ll also be borrowing some data from this tab, precisely the Domain, and Client ID.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cZWdAQt7sgjVX0rtF5hGUg.png" /></figure><p>6. Search for the Allowed Callback URLs field and insert <a href="http://localhost:3000/callback">http://localhost:3000/callback</a> on it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KiM8OgflVNYJVp2kgukThA.png" /></figure><p>While authenticating the app using Auth0, users will be redirected to the Universal Login Page of the app and after the authentication process regardless of being successful or not, they will be redirected back to your application. Auth0 will redirect users only to URLs registered on the Allowed Callback URLs for security reasons.</p><p>7. Now we need to add Allowed Web Origins and Allowed Logout URLs. As the app is going to issue a request to Auth0, we will need to add http://localhost:3000 to Allowed Web Origins. Without this value, Auth0 would deny any incoming request coming from the app. To enable users to end their session at Auth0, we need to call the Logout URL. Similar to the authorization endpoint which is Allowed Web Origins, in this case, the log-out endpoint only redirects users to whitelisted URLs after the process. Hence, we’ll add http://localhost:3000 here as well.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gLecN73K5xSpRcvVf-OaOA.png" /></figure><p>And that’s pretty much it for setting up things over Auth0.</p><h3>Integrating Auth0 with the React App</h3><p>We’ll be using the official Auth0 Library now to integrate and secure the app we just created. Simply return to the terminal and execute the following command.</p><pre>npm install auth0-js</pre><p>We’ll now create a class that will store the Auth0 authentication functionality. We simply need to create a new file Auth.js inside the src folder of our react app and add the following lines of code:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/1ff4ab16227975ad556256e416b1d17e/href">https://medium.com/media/1ff4ab16227975ad556256e416b1d17e/href</a></iframe><p>As described above, we simply create an instance of auth0.WebAuth with our Auth0 values and define some other important configurations. Do NOT forget to replace the data from Line 7 to 9 with the one in your dashboard to make the app work.</p><p>Now to handle the callback route (http://localhost:3000/callback), we’ll define a component, create a new file called Callback.js inside the src directory. Simply add this code to the newly created file:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/cc19cae67bc913ed503469c249a083e0/href">https://medium.com/media/cc19cae67bc913ed503469c249a083e0/href</a></iframe><p>All this component does is call the handleAuthentication method to fetch the user information that is shared by Auth0. It also redirects users to the home page (history.replace(&#39;/&#39;)) after finishing the handleAuthentication process. The component also shares a message which reads “Authentication with Auth0 works!” to let you know that you’re on the right path.</p><h3>Changes in the Front End</h3><p>To reflect all the changes we made onto our front end, we need to update the App.js file and create a new file Home.js inside src folder. Home.js validates if the user is authenticated or not.</p><p>Check out both the files and make amendments.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/267dd61aea7a3bb063af0d494ca221b9/href">https://medium.com/media/267dd61aea7a3bb063af0d494ca221b9/href</a></iframe><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/c3e033d60b5aa684f3288219245a331e/href">https://medium.com/media/c3e033d60b5aa684f3288219245a331e/href</a></iframe><p>After making and saving all the changes, execute npm start. Your React app with Auth0 User Authentication is ready.</p><h3>Ending Notes</h3><p>The app we just created can be reused for any React+Auth0 App you plan on building. Go through the official documentation of Auth0 to make it better and read about all the other services and tools offered by the Organization. Personally, I prefer Auth0 over Firebase simply because of the Single Sign-On Feature with access to a plethora of Identity Providers.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=99324ebdbce2" width="1" height="1" alt=""><hr><p><a href="https://systemweakness.com/implementing-user-authentication-with-auth0-in-react-99324ebdbce2">Implementing User Authentication with Auth0 in React</a> was originally published in <a href="https://systemweakness.com">System Weakness</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ORMs and Why I Recommend Prisma]]></title>
            <link>https://aaishika.medium.com/orms-and-why-i-recommend-prisma-8eb71dc35fea?source=rss-8bfb9e3a72ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/8eb71dc35fea</guid>
            <category><![CDATA[database]]></category>
            <category><![CDATA[nextjs]]></category>
            <category><![CDATA[orm-services]]></category>
            <category><![CDATA[orm]]></category>
            <category><![CDATA[prisma]]></category>
            <dc:creator><![CDATA[Aaishika S Bhattacharya]]></dc:creator>
            <pubDate>Mon, 10 Jan 2022 20:15:14 GMT</pubDate>
            <atom:updated>2022-01-10T20:15:14.884Z</atom:updated>
            <content:encoded><![CDATA[<p>Before you init Prisma onto your Next.js Project, read on to find out what an ORM exactly is, why it’s useful, and also why Prisma is the best ORM out there:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*ibiGogNTINS1A8okc9jQ8Q.jpeg" /><figcaption>I’ll just leave this here…</figcaption></figure><p>If you’ve previously written database queries for Relational Databases you probably understand that it’s not a cakewalk for someone from an OOPs background. This is where ORM or Object Relational Mapping jumps in, allowing us to query and manipulate data from a database through an object-oriented programming language of our choice. Traditionally, if I were to interact with my database, I’d have to write SQL queries. Using an ORM I can simply communicate with the same using code written in JavaScript, for example. In a nutshell, an ORM is nothing but a layer between your code and your database, facilitating communication using methods declared within the framework.</p><h3>What’s the benefit of using an ORM?</h3><p>The biggest advantage that you get out of implementing an ORM is that you get to write your queries comfortably in the language of your choice. This minimizes the constraints you have in terms of development tremendously. For someone like me who absolutely detests query languages, ORM adds a lot of flexibility in terms of the usage of database(s) as well. Moreover, you can easily reuse your code with minor to no changes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fPkZPoXWhKd_ILtbVVR9pw.png" /></figure><h3>What is Prisma?</h3><blockquote><strong>Prisma</strong> is a server-side library that helps your app read and write data to the database in an intuitive and safe way. Prisma supports MongoDB, PostgreSQL, MySQL, and SQL Servers amidst a lot of other databases. You have the option to either start a new database with Prisma or connect an existing database to Prisma.</blockquote><p>In short, it’s an open-sourced ORM segregated into three services, namely:</p><ol><li><strong>Prisma Client</strong>: A query builder that gets auto-generated from the Prisma schema with types tailored to your application.</li><li><strong>Prisma Migrate</strong>: A service that automatically generates SQL database migrations, that are fully customizable. For quick data model prototyping in development,prisma db push lets you make changes to the database without generating migration files.</li><li><strong>Prisma Studio</strong>: A visual database browser that opens in your browser to graphically view and edit the data.</li></ol><p>For more details about Prisma, click <a href="https://www.prisma.io/">here</a>.</p><h3>How does it work?</h3><p>Every project that uses a tool from the Prisma toolkit starts with a Prisma schema file. This Prisma schema file is the main configuration file for your Prisma setup. It is typically called schema.prisma and consists of Data Sources, Generators, and Data Model Definition. It allows developers to define their application models in an intuitive data modeling language. Whenever a prisma command is invoked, the CLI typically reads some information from the schema file, which contains the connection to a database and defines a generator.</p><p>Find the documentation <a href="https://www.prisma.io/docs/">here</a>.</p><h3>Installing Prisma</h3><ol><li>In order to get started, we’ll install the Prisma CLI tool as a development dependency using npm install —-dev prisma.</li><li>Now we’ll set up our Prisma project by creating the Prisma schema file template with npx prisma init. This creates a /prismafolder with a schema.prisma file at the root of the project. There’s also new /.env that you should add to .gitignore.</li><li>To connect your database, you need to set the url field of the datasource block in your Prisma schema to your database connection URL. The format of the connection URL for your database depends on the database you use.</li><li>With the npx prisma db pullcommand, Prisma can pull the pre-existing database schema and on its own copy and refactor it into the schema.prisma file. Alternatively, you can also install and generate Prisma Client. Simply run npm install @prisma/client, followed by npx prisma generate. This command reads your Prisma schema and generates your Prisma Client library.</li></ol><h3>Why Prisma?</h3><blockquote>Prisma’s main goal is to make application developers more productive when working with databases.</blockquote><p>It is an upgraded ORM that mitigates many problems of traditional ORMs, such as bloated model instances, mixing business with storage logic, lack of type-safety, or unpredictable queries.</p><p>It uses the Prisma schema to define application models in a declarative way. Prisma Migrate then allows to generate SQL migrations from the Prisma schema and executes them against the database. CRUD queries are provided by Prisma Client, a lightweight and entirely type-safe database client for Node.js and TypeScript.</p><h3>Ending Notes</h3><p>ORM is advantageous for the folks who have a stronger background in OOPs and not SQL or query languages. Only consider implementing this system if you’re ready to learn more about the ORM library, what it offers and how to set it up error-free, otherwise, you might end up wasting your time instead of trying to save it. Even if you dive into ORM, continue to practice and have a good hold over SQL and other query languages.</p><p>Of all the different kinds of ORMs out there, I felt that Prisma was way ahead of all the competitors, thanks to the vast beginner-friendly documentation and this <a href="https://www.prisma.io/docs/concepts/more/comparisons">comparison</a> page too.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8eb71dc35fea" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[DigitalOcean Kubernetes Challenge: Deploy an Internal Container Registry]]></title>
            <link>https://aaishika.medium.com/digitalocean-kubernetes-challenge-deploy-an-internal-container-registry-c7bf73a39387?source=rss-8bfb9e3a72ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/c7bf73a39387</guid>
            <category><![CDATA[kubernetes-cluster]]></category>
            <category><![CDATA[digitalocean]]></category>
            <category><![CDATA[kubernetes]]></category>
            <dc:creator><![CDATA[Aaishika S Bhattacharya]]></dc:creator>
            <pubDate>Thu, 09 Dec 2021 17:40:41 GMT</pubDate>
            <atom:updated>2022-01-10T20:21:56.526Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Digital Ocean x Kubernetes" src="https://cdn-images-1.medium.com/max/1024/1*4N01XG1-fQi28QLe_-1T1Q.jpeg" /></figure><p>I recently got on board as a Navigator and that’s how I came across the DigitalOcean Kubernetes Challenge, a challenge to sharpen your DevOps skills, learn more about Cloud Native Computing Foundation (CNCF) projects, and win various vouchers amidst a lot of other things. In this article, I’m going to document my submission and share how I built it.</p><h3>About the Challenge</h3><p>The DigitalOcean Kubernetes Challenge gives developers an opportunity to level-up their K8s skill set.</p><p>Kubernetes is an open-source container-orchestration system for automating computer application deployment, scaling, and management. It was originally designed by Google and is now maintained by the Cloud Native Computing Foundation.</p><p>DigitalOcean Kubernetes (DOKS) is a managed Kubernetes service that helps us to deploy Kubernetes clusters hassle free without needing to handle the control panel and containerised infrastructure. Clusters are compatible with standard Kubernetes toolchains and integrate natively with DigitalOcean Load Balancers and block storage volumes.</p><p>Find more details about the same here: <a href="https://www.digitalocean.com/community/pages/kubernetes-challenge">https://www.digitalocean.com/community/pages/kubernetes-challenge</a></p><h3>The Prizes</h3><p>Those who successfully finish the challenge, receive the following prizes:</p><ul><li>$150 to donate to your project of choice in <a href="https://opencollective.com/">Open Collective</a></li><li>$100 gift card to be used at the <a href="https://store.digitalocean.com/doswag">DigitalOcean Swag Store</a></li><li>$50 gift card to be used at the <a href="https://store.cncf.io/products/gift-card">CNCF Swag Store</a></li></ul><h3>My Submission</h3><p>I decided to go ahead with the “<strong>Deploy an internal container registry</strong>” Challenge, housed under the “New to Kubernetes” category, as I still consider myself pretty new to DevOps. To try the aforementioned challenge, I received $60 worth of DigitalOcean Credits that I used to deploy the Internal Container Registry using <a href="https://goharbor.io/docs/2.4.0/install-config/">Harbor</a>.</p><h4>Creating a Kubernetes Cluster</h4><p>Over DigitalOcean, Kubernetes Clusters can be created in many ways, using the Dashboard, doctl CLI and so on. I used the DigitalOcean Dashboard to create it, specifically the Kubernetes Create Cluster Dashboard. Here are the specifications that I used:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IzGsZsbPesCFNehsbjpPyA.jpeg" /><figcaption>Cluster Specifications</figcaption></figure><ul><li>Kubernetes Version: 1.21.5-do.0</li><li>Datacentre Region: I went with the default, though it’s advisable to select the one that’s nearest.</li><li>Cluster Capacity; Machine Type, Node Count, Node Plan: I rolled with the lowest possible values for these so I could keep the monthly rate low, which allowed me to experiment around!</li></ul><p>The process takes a while, for me the cluster was up and running in a few minutes.</p><h4>Connecting to the Cluster</h4><p>I was greeted with a pretty dashboard, the one below:</p><figure><img alt="DigitalOcean K8s Dashboard" src="https://cdn-images-1.medium.com/max/1024/1*5Axz6HY8aLFFORmjAYfDBQ.jpeg" /><figcaption>Getting Started with the Kubernetes Cluster</figcaption></figure><p>Towards the bottom of this dashboard I found the doctl command to run that automatically saves the Kubernetes configuration on your local machine;</p><pre>doctl kubernetes cluster kubeconfig save *cluster_details*</pre><p>After saving the auth config using the aforementioned command, I moved ahead with the installation of the image repository as well as the ingress using kubectl.</p><h4>Setup</h4><p>I used <a href="https://helm.sh/">Helm</a>, the Package Manager for Kubernetes, to setup <a href="https://doc.traefik.io/traefik/">Traefik</a> Ingress.</p><pre>helm install \<br>--namespace traefik \<br>--create-namespace \<br>--values charts/traefik/values.yml \<br>traefik traefik/traefik</pre><p>The next step is to setup Harbor.</p><pre>PASS=$(openssl rand -hex 8)<br>KEY=$(openssl rand -hex 8)<br>helm install \<br>--namespace harbor \<br>--create-namespace \<br>--values charts/harbor/values.yml \<br>--set-string &quot;secretKey=$KEY&quot; \<br>--set-string &quot;harborAdminPassword=$PASS&quot; \<br>harbor harbor/harbor</pre><p>apply manages applications through files defining Kubernetes resources. It creates and updates resources in a cluster through running kubectl apply. So I created the following examples to deploy my submission:</p><pre>kubectl apply -f yml/nginx-example.yml<br>kubectl apply -f yml/traefik-dashboard.yml</pre><p>This looks super easy but it took me a while to be done with this!</p><h3>Learnings</h3><ul><li>I’ve always wanted to dive deeper into the world of DevOps, this challenge gave me the push that I truly needed!</li><li>Apart from that, I was able to learn a lot about DOKS. I absolutely hate going through documentations but it was fun reading through doctl and kubectl without confusing between both.</li><li>I had to choose between Harbor and Trow and my decision was influenced by the wider availability of documentation for Harbor. As a registry, it looks amazing.</li></ul><h3>Why Kubernetes though?</h3><p>I pitched this question to myself everytime I failed to deploy the container but hey, it offers:</p><ul><li>Auto Scaling</li><li>Automated Rollbacks</li><li>Load Balancing</li><li>Self Healing</li></ul><p>It’s a good bargain after a few hiccups! Once you get the hang of K8s it’s a good tool that helps you be more productive, though it can sometimes be an overkill for simple applications! I loved the dashboard offered by DigitalOcean which highlights insights in an amazing way. Take a look:</p><figure><img alt="DOKS Insights" src="https://cdn-images-1.medium.com/max/1024/1*ZX7Cwh1Frkinc3TQqMvw-w.jpeg" /><figcaption>DOKS Insights</figcaption></figure><h3>Ending Notes</h3><p><strong>Kubernetes provides an easy way to scale your application</strong> compared to virtual machines. It keeps code operational and speeds up the delivery process. Kubernetes API allows the automation of a lot of resource management and provisioning tasks. I would recommend taking up the DigitalOcean Kubernetes Challenge if you’re looking forward to upskilling!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c7bf73a39387" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Getting Started with SRE using Ghidra]]></title>
            <link>https://aaishika.medium.com/getting-started-with-sre-using-ghidra-559776eb15b7?source=rss-8bfb9e3a72ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/559776eb15b7</guid>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[tutorial]]></category>
            <category><![CDATA[ghidra]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[reverse-engineering]]></category>
            <dc:creator><![CDATA[Aaishika S Bhattacharya]]></dc:creator>
            <pubDate>Sat, 09 Oct 2021 16:23:11 GMT</pubDate>
            <atom:updated>2021-12-10T08:31:37.780Z</atom:updated>
            <content:encoded><![CDATA[<p>If you are new to Software Reverse Engineering, popularly known as SRE, read on to dive deeper into the same with an Open-source tool, Ghidra. Before we get started, let’s understand what exactly SRE is and why do we use it.</p><figure><img alt="Ghidra" src="https://cdn-images-1.medium.com/max/1024/1*-Om1GClRFfrVZ3gdwI9WHQ.png" /></figure><h3><strong>Brief Introduction to SRE</strong></h3><blockquote>“The basic concept of reverse engineering is breaking something down to understand it and make it better.”</blockquote><p>Reverse engineering was initially limited to hardware but today, we apply it to software, database, and even human DNA. What started as a learning tool is now being harnessed as a process to break things and make them better. When we specifically talk about Software Reverse Engineering, it helps developers build cheaper, more efficient, and interoperable systems. The purpose of reverse engineering is to facilitate maintenance work by improving the understandability of a system and producing the necessary documents for a legacy system. Reverse-engineering can also expose security flaws and questionable privacy practices.</p><h3><strong>What is Ghidra?</strong></h3><p>Ghidra is a software reverse engineering (SRE) framework created and maintained by the National Security Agency Research Directorate. This framework includes a suite of full-featured, high-end software analysis tools that enable users to analyze compiled code on a variety of platforms including Windows, macOS, and Linux. Capabilities include disassembly, assembly, decompilation, graphing, and scripting, along with hundreds of other features. Ghidra supports a wide variety of processor instruction sets and executable formats and can be run in both user-interactive and automated modes. Users may also develop their own Ghidra extension components and/or scripts using Java or Python.</p><p>Get your copy of Ghidra <a href="https://github.com/NationalSecurityAgency/ghidra/releases/tag/Ghidra_10.0.4_build">here</a>.</p><h3><strong>Installing Ghidra</strong></h3><p>Installation is easy. Unlike other programs that use a traditional installer, the Ghidra distribution file is simply extracted in-place on the filesystem. This simply means that administrative privilege is not required to install Ghidra for personal use, hence there are no updates to the OS Configuration. A downside of the same is that Ghidra will not automatically create a shortcut on the desktop or appear in application start menus.</p><p>Using the aforementioned link, download the distribution and follow these steps for <strong>Windows 10</strong>:</p><ol><li>Extract the JDK by right-clicking on the .zip file and then selecting “Extract All”.</li><li>Open Environment Variables Window by right-clicking on the Windows start button, and then click “System”. Then select “Advanced System Settings”, followed by “Environment Variables”.</li><li>Add the JDK bin directory to the PATH variable by highlighting “Path” under System Variables. Simply at the end of the Variable value field, add a semicolon followed by &lt;path of extracted JDK dir&gt;\bin. You’re all set.</li><li>Restart any open Command Prompt windows for changes to take effect.</li></ol><p><strong>If you’re using Linux or macOS, the process is fairly similar.</strong> Extract the JDK distribution (.tar.gz file) to your desired location, and add the JDK’s bin directory to your PATH using the following commands:</p><pre>tar xvf &lt;JDK distribution .tar.gz&gt;</pre><pre>vi ~/.bashrc</pre><pre>export PATH=&lt;path of extracted JDK dir&gt;/bin:$PATH</pre><p>Save the file and restart for the changes to take effect.</p><h3><strong>Getting Started with SRE using Ghidra</strong></h3><p>Now that installation is complete, let’s reverse engineer a Portable Executable file for starters! Download the PE File <a href="https://drive.google.com/file/d/1UyML1CEnSiMKN232WVNVhf7tgUAYtwGW/view?usp=sharing">here</a>.</p><p>We now need to open the file in Ghidra and set up the analysis. Follow these steps to get it up and running in no time:</p><ol><li>Open Ghidra and click on File &gt; New Project.</li><li>Select Non-Shared Project and choose a Directory as well as Name for your project.</li><li>Once done, click on Import File and choose the Executable file shared above. As you’re through with this, your screen should resemble the one given below.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1RFsonm8WadL2s4qlLiNHg.png" /></figure><p>Now all you need to do is drag the file onto the Dragon-shaped icon in the Tool Chest. This will open the Code Browser Window where the remainder of the process will take place!</p><p>In the prompt which asks you if you want to analyze the file, select “Yes”. In the same prompt, uncheck PDB and Windows x86 PE RTTI Analyzer which won’t be necessary at the moment.</p><blockquote>PDB is a file that supports the debugger but since our file does not require it, we won’t be using the tool. As for the other tool, it populates push instructions with comments which might help us make sense of the binary file more easily. We won’t be needing the Windows x86 PE RTTI Analyzer either.</blockquote><p>If you have followed all the steps correctly, you’ll see a screen that is similar to this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bUcs-NGfplfKEg2zcg24ZQ.png" /></figure><p>What you see on the <strong>Decompile</strong> window is the code for Function Entry. In the same window, as you scroll down, you’ll see the following:</p><pre>_Code = FUN_00401000()</pre><p>This is nothing but the main function! This is an optional step but consider renaming it to <em>main</em> so you can easily track it in the future. To do so, simply right-click on FUN_00401000() and select Rename. You can also follow this for renaming variables, which makes your job easier!</p><p><strong>Give yourself a pat on your back as by following these steps, you have successfully reverse-engineered the given executable file using Ghidra!</strong></p><h3>Ending Notes</h3><p>The Portable Executable File that we are using is actually a CTF Prompt so feel free to crack it!</p><p>SRE if done manually, would consume a lot of time and labor, which is why we use various automated tools to make our job easier. Reverse Engineering has its own pros and cons. Use Ghidra wisely to learn and grow as a developer.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=559776eb15b7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why you should sign up for a Campus Ambassador Program Today!]]></title>
            <link>https://aaishika.medium.com/why-you-should-sign-up-for-a-campus-ambassador-program-today-54224340d64f?source=rss-8bfb9e3a72ea------2</link>
            <guid isPermaLink="false">https://medium.com/p/54224340d64f</guid>
            <category><![CDATA[ambassador-program]]></category>
            <category><![CDATA[university]]></category>
            <category><![CDATA[careers]]></category>
            <category><![CDATA[opportunity]]></category>
            <category><![CDATA[students]]></category>
            <dc:creator><![CDATA[Aaishika S Bhattacharya]]></dc:creator>
            <pubDate>Sun, 11 Apr 2021 22:37:38 GMT</pubDate>
            <atom:updated>2021-04-11T22:43:38.256Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KWr48KfWIK_3dcJuAih2nA.jpeg" /><figcaption>Credits: Internshala</figcaption></figure><p>If you are active on LinkedIn or in Technical Communities around you, you must have come across at least one Campus Ambassador for an XYZ Organization. But, first, who is a Campus Ambassador and second, why would anyone want to be one? If these questions have you rummaging around, read on!</p><h3><strong>Who is a Campus Ambassador?</strong></h3><p>Campus Ambassadors are students that serve as a link between the organization they are associated with and their institution. In a nutshell, they are the voice of a company in their University and are in charge of raising awareness about the same. Campus Ambassadors are leaders who take charge of marketing and evangelizing upcoming events or specific products or programs!</p><h3><strong>Now, why would anyone want to be a <em>Campus Ambassador</em>?</strong></h3><p>The answer to this question is simple, to gain exposure to the corporate world. It’s an amazing opportunity to work on your soft skills including your leadership and marketing skills as well as team management and event organization skills, all of this while also expanding your network exponentially. It gives you an opportunity to add an extra pointer to your resume and make it stand out from the rest. Being a Campus Ambassador also helps you earn some extra bucks in the form of incentives based upon your performance as one. Moreover, one gets the opportunity to be a part of a community that can help you out with your technical doubts as well! In most Campus Ambassador Programs (especially the ones that I’m a part of), the mentors are extremely knowledgeable and don’t leave a stone unturned to help the students who are associated with their organization!</p><h3><strong>Why YOU should sign up to be one?</strong></h3><p>Take the following pointers into consideration if you want a better perspective:</p><ul><li>You get an insight into how the corporate world functions. It helps you understand the working of organizations.</li><li>You get the opportunity to build your network and work on your soft skills, here note that most recruiters value soft skills just as much as a candidate’s hard/technical skills. Skills here include your leadership, communication, and team-building skills as well as marketing skills and work etiquette.</li><li>While you explore the world of digital marketing and evangelism, in the process you also learn how to pitch yourself in a better manner. Now during your interviews, you don’t just talk about your technical skills, you sell your resume to your interviewer and if you are good at presenting yourself, consider yourself shortlisted!</li><li>Campus Ambassador Programs open doors to new opportunities. If you are a part of a community with other Ambassadors, you get a chance to connect with like-minded individuals. Most of the other Ambassadors share knowledge and guidance amidst a lot of other resources including details of technical or non-technical internship opportunities and if you are active in your community, you stand a really good chance at bagging one!</li><li>You get access to resources shared by the Organization you are associated with and may get invited to exclusive events and webinars that will definitely help you boost your career.</li><li>Last but not the least, you get industry certified with a Letter of Recommendation or a Certificate stating your association with the Organization. You may also receive incentives based upon your performance! Ambassador exclusive swags are counted!</li></ul><p>If these pointers do not tempt you into filling up applications for being a Campus Ambassador for different organizations, I really don’t know what will.</p><h3><strong>What would be your responsibilities if you choose to be a Campus Ambassador?</strong></h3><p>I’m glad that you are considering it. As a Campus Ambassador for any organization, your responsibility will solely be to endorse the company or the products offered/events organized. To give you a better insight, here’s a list of things that you might have to do:</p><ul><li>Raise awareness about the brand.</li><li>Organize or help organize events on your campus and manage the promotions for the same.</li><li>Come up with new and innovative ideas for marketing, you’ll be rewarded for sure if you come up with exceptional ones.</li><li>Develop strategic connections with clubs or communities around you or upcoming events to promote your brand.</li></ul><h3><strong>My experience as a Campus Ambassador.</strong></h3><p>I currently am a Campus Ambassador for several reputed organizations like Auth0, HackerEarth, Hack Club, Coding Blocks, and AngelHack. I also am a GitHub Campus Expert and an Alexa Student Influencer and I don’t think I could’ve gotten in without the exposure that I received at the aforementioned organizations. I’ve been associated with Bolt IoT and Coding Ninjas as well but there wasn’t much to take home from these organizations hence I dropped out.</p><p>I started applying for Campus Ambassador Programs during my semester break post my first semester. I was pretty bored and the incentives seemed attractive! With each application, I could feel the bar of confidence in me rising, step by step I was learning how to be a better version of myself.</p><p>Not a promotion, but being a part of the Coding Blocks Superheroes Community helped me excel at content writing and the constant support that I have received from my mentors has helped me be better at digital marketing and graphic designing. The students who are a part of the community have tremendously helped me upskill my technology stack by sharing a zillion resources over trending technologies. Being a part of HackerEarth has helped me become a better coder. I’m elated to share that I’ve gotten technical internship opportunities through networking in the communities that I am a part of, I’ve received guidance for hackathons and I’ve also received the opportunity to mentor several students!</p><h3><strong>Finally, a list of Organizations you should consider if you are interested in being a Campus Ambassador!</strong></h3><p>The following list is in no particular order. Apply for one, apply for all! Just make sure that you divide your time smartly. I am not asking you to ditch working on your hard/technical skills. A reminder that soft skills are as important as hard skills. Here you go!</p><ul><li>Coding Blocks (highly recommended if you are a fresher)</li><li>Microsoft Learn Student Ambassador (amazing opportunities, and Microsoft)</li><li>GeeksForGeeks</li><li>OnePlus</li><li>Intel</li><li>HackerEarth</li><li>Verzeo (you may get a free course)</li></ul><p>After gaining some experience as an ambassador, try applying for these Community-Oriented Programs as well!</p><ul><li>GitHub Campus Expert</li><li>Developer Circles by Facebook</li><li>AWS Educate by Amazon</li><li>Developer Student Clubs by Google</li><li>Auth0</li><li>Mozilla Representative/Student Ambassadors</li></ul><p>I personally would not recommend the following and I’ll highlight the reasons for the same.</p><ul><li>Internshala — You don’t really have anything to take home, no technical guidance or support in any form from what I’ve heard from Internshala Ambassadors.</li><li>Coding Ninjas — Personally had a not-so-good experience as an Ambassador, ended up resigning.</li><li>Bolt IoT — They just want you to run WhatsApp “drip” campaigns and have you convince your friends to buy the IoT Kit. If you somehow manage to persuade one, only then you’ll be eligible for a Certificate of Completion. Incentives are a bit messed up.</li></ul><h3><strong>Ending notes.</strong></h3><p>I really hope that this post helps you have a better perspective over the Campus Ambassador Programs around you. Devote your time efficiently, do not overdo stuff, make sure you don’t sign up for too many programs at once. It’s not a compulsion to necessarily be a Campus Ambassador, it’s a choice and it entirely is up to you if you wish to add this experience to your list of responsibilities. Choose wisely, a humble request. If it takes a toll on you professionally, talk to your mentor or manager and take a break, it’s absolutely fine. For any queries, feel free to reach out and I’d love to guide you! I am open to feedbacks and additions to this post!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=54224340d64f" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>