<?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"><channel><title><![CDATA[Sridhar Tech Stories]]></title><description><![CDATA[A developer, geek, enthusiast, who loves to solve problems and fix things with technology.I am working on 💻frontend web development with Javascript and I love ]]></description><link>https://ksridhar.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 10:21:21 GMT</lastBuildDate><atom:link href="https://ksridhar.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[NPM Tricks I Wish I Knew Sooner]]></title><description><![CDATA[Recently I have been working on migrating an old React application based on react-scripts to support Node.js 18. To make it work, I came across multiple npm tricks that helped solve these issues, so I am going to explain and document them in this blo...]]></description><link>https://ksridhar.dev/npm-tricks-i-wish-i-knew-sooner</link><guid isPermaLink="true">https://ksridhar.dev/npm-tricks-i-wish-i-knew-sooner</guid><category><![CDATA[Node.js]]></category><category><![CDATA[npm]]></category><category><![CDATA[npm packages]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Sat, 12 Jul 2025 08:36:20 GMT</pubDate><content:encoded><![CDATA[<p>Recently I have been working on migrating an old React application based on react-scripts to support Node.js 18. To make it work, I came across multiple npm tricks that helped solve these issues, so I am going to explain and document them in this blog.</p>
<h3 id="heading-dependencies-checks">Dependencies Checks</h3>
<pre><code class="lang-bash">npx depcheck
</code></pre>
<p>Analyzes the dependencies in a project to see how each dependency is used, which dependencies are unused, and which dependencies are missing from <code>package.json</code>.</p>
<h3 id="heading-why-events">Why Events</h3>
<pre><code class="lang-bash">npm why package_name
</code></pre>
<p>This command helps you understand why a package is installed in your project and where it comes from.</p>
<h3 id="heading-check-subdependencies">Check Subdependencies</h3>
<pre><code class="lang-bash">npm ls buffer
</code></pre>
<p>Prints all the versions of packages that are installed, as well as their dependencies.</p>
<h3 id="heading-find-duplicates">Find Duplicates</h3>
<pre><code class="lang-bash">npm find-dupes
</code></pre>
<p>Runs <code>npm dedupe</code> and outputs all the duplication changes without changing the package tree.</p>
<h3 id="heading-reduce-duplication">Reduce Duplication</h3>
<pre><code class="lang-bash">npm dedupe
</code></pre>
<p>Searches the local packages tree and attempts to simplify the overall structure by moving dependencies further up the tree, where they can be more effectively shared by multiple dependent packages.</p>
<h3 id="heading-clean-install">Clean Install</h3>
<pre><code class="lang-bash">npm ci
</code></pre>
<p>If you have already set up projects where you have <code>node_modules</code> and <code>package-lock.json</code>, using this command will remove them and perform a clean install.</p>
<h3 id="heading-resources">Resources:</h3>
<ul>
<li><p><a target="_blank" href="https://www.npmjs.com/package/depcheck">https://www.npmjs.com/package/depcheck</a></p>
</li>
<li><p><a target="_blank" href="https://docs.npmjs.com/cli/v11/commands">https://docs.npmjs.com/cli/v11/commands</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[My GitHub Setup, Tricks & Daily Commands]]></title><description><![CDATA[Over the years I have picked up a lot of GitHub tricks, ways that I work around GitHub. I mostly use some set of commands and want to make a list of it & have it for reference.
Setting Up SSH:
I think anyone who is working with Git & GitHub should se...]]></description><link>https://ksridhar.dev/my-github-setup-tricks-and-daily-commands</link><guid isPermaLink="true">https://ksridhar.dev/my-github-setup-tricks-and-daily-commands</guid><category><![CDATA[Git]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[General Programming]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Sun, 06 Jul 2025 06:59:00 GMT</pubDate><content:encoded><![CDATA[<p>Over the years I have picked up a lot of GitHub tricks, ways that I work around GitHub. I mostly use some set of commands and want to make a list of it &amp; have it for reference.</p>
<h3 id="heading-setting-up-ssh">Setting Up SSH:</h3>
<p>I think anyone who is working with Git &amp; GitHub should set up SSH on their machine, because it gives us more flexibility than anything. There are other ways to do it like personal access tokens, but those are hard to set up, and keys often get expired after some time. You need to store that token somewhere &amp; always have to copy &amp; paste whenever you need to. So why do that stuff? It’s better to set up SSH whenever you start working with GitHub.</p>
<ul>
<li><p>Go to your terminal from Linux or Mac, run the below command &amp; press enter. It will create two files: one is <code>id_rsa</code> &amp; the other is <code>id_rsa.pub</code>.</p>
</li>
<li><p>Now go to your profile settings on github.com &amp; add your SSH key contents from <code>id_rsa.pub</code> with a description.</p>
</li>
</ul>
<pre><code class="lang-bash">ssh-keygen -t rsa -b 4096 -C <span class="hljs-string">"your_github_email@example.com"</span>
</code></pre>
<ul>
<li>Now to authenticate whether you have added it correctly or not, from your terminal run this command &amp; type yes to authenticate. Now you can start using GitHub with SSH.</li>
</ul>
<pre><code class="lang-bash">ssh -T git@github.com
</code></pre>
<h3 id="heading-setting-up-multiple-github-accounts">Setting up multiple GitHub Accounts</h3>
<p>Over time I had to set up multiple GitHub accounts, so I have followed this approach to create it. Go to your terminal in your <code>.ssh</code> folder and check for a <code>config</code> file. If it is not there, create it.</p>
<ul>
<li><p>Open your <code>config</code> file in your favourite editor of choice (I like NVIM for these kinds of things).</p>
</li>
<li><p>Add the following content into your config file. You can change your host name as you like.</p>
</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-comment"># Sridhar 2nd GitHub account</span>
Host github.com-sridhar-2nd
     HostName github.com
     User git
     IdentityFile ~/.ssh/your_ssh_file_name
</code></pre>
<ul>
<li>Once you add the above configuration, whenever you want to clone or want to use your second GitHub account, you need to change your clone URL or git remote URLs.</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-comment"># this will be authenticated using my first SSH key</span>
git <span class="hljs-built_in">clone</span> git@github.com:sridhar02/pointing-poker.git

<span class="hljs-comment"># using second SSH key</span>
git <span class="hljs-built_in">clone</span> git@github.com-sridhar-2nd:sridhar02/pointing-poker.git

<span class="hljs-comment"># Remove remote origin — this command will remove your current repo origin</span>
git remote remove origin

<span class="hljs-comment"># Set remote origin — if the repo is already there, you can change it to use the 2nd account</span>
git remote add origin git@github.com-sridhar-2nd:sridhar02/pointing-poker.git
</code></pre>
<p>Setting up dual GitHub accounts is as simple as this. It is not a big thing at all.</p>
<h3 id="heading-branch-creation">Branch Creation</h3>
<p>When you work with Git, you create your own branches from your main or master branch. Use the below command to create from your current branch:</p>
<pre><code class="lang-bash">git checkout -b branch_name
</code></pre>
<h3 id="heading-change-branches">Change Branches:</h3>
<p>Sometimes you may need to hop from one branch to another. You can use the below command:</p>
<pre><code class="lang-bash">git checkout branch_name
</code></pre>
<blockquote>
<p>Note: If you are changing from main to your feature branch, easiest way to change is using the switch command. This will take you to your previous branch from your current branch. I got to know this from a friend when working with him &amp; from that time this has been one of my most used commands.</p>
</blockquote>
<pre><code class="lang-bash"><span class="hljs-comment"># Switch branches from current to previous</span>
git switch -
</code></pre>
<h3 id="heading-fundamental-commit-amp-stage-commands">Fundamental Commit &amp; Stage Commands:</h3>
<ul>
<li>Once you clone a repo from GitHub &amp; add changes, you can see your changes using the status command, which shows a list of files changed &amp; untracked file changes like adding new files.</li>
</ul>
<pre><code class="lang-bash">git status
</code></pre>
<ul>
<li>Once you have your changes ready, stage them using the below commands:</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-comment"># Stages all your current files</span>
git add .

<span class="hljs-comment"># If you only want to stage separate files, add them one by one</span>
git add file_name
</code></pre>
<ul>
<li>Once files are staged, add your commit message:</li>
</ul>
<pre><code class="lang-bash">git commit -m <span class="hljs-string">"add your commit message"</span>
</code></pre>
<h3 id="heading-push-amp-pull">Push &amp; Pull</h3>
<ul>
<li>Once you have staged &amp; committed your changes locally, now you need to push your changes to your origin. Use the below command:</li>
</ul>
<pre><code class="lang-bash">git push origin branch_name

<span class="hljs-comment"># Sometimes you will be asked to set upstream origin so then you can use:</span>
git push --set-upstream origin branch_name

<span class="hljs-comment"># Once upstream is set up you can just do:</span>
git push
</code></pre>
<ul>
<li>Sometimes you need to pull the latest changes from your branch from origin to local, then use this command:</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-comment"># Branch name can be anything — your current branch or main or master</span>
git pull origin branch_name
</code></pre>
<blockquote>
<p>Note: One thing I personally follow is not to pull main or other branches into your current branch as it disturbs the current commits that you have worked on &amp; adds extra commits instead of just yours. Best way to update your current branch is to rebase or merge. I prefer rebase as it gives a clean history (covering rebase next). Only use pull when someone has updated your branch directly on origin &amp; you don’t have those changes locally.</p>
</blockquote>
<h3 id="heading-rebase-amp-merge">Rebase &amp; Merge</h3>
<ul>
<li><strong>Rebase:</strong> When you work with multiple people, often code gets pushed to main or master continuously &amp; you might be working on your separate branch. When you often need to update your current branch in line with main or master, use rebase. The below command rebases your branch on top of the main branch. Most of the time it works easily, but when the same file is changed by multiple people, you may need to resolve merge conflicts &amp; stage them to continue the rebase until it finishes.</li>
</ul>
<pre><code class="lang-bash">git rebase origin/main
</code></pre>
<blockquote>
<p>Note: If your branch has 10 to 15 commits then one problem you may run into when rebasing is resolving merge conflicts after every commit, which can be tricky &amp; time-consuming. In those cases, you can opt for git merge which basically merges the current main into your branch (adds an extra commit). One more thing to add — whenever you rebase a branch, you need to force push that branch when pushing to origin. Use <code>--force-with-lease</code> only — don’t use just <code>--force</code> as it is the safer option.</p>
</blockquote>
<pre><code class="lang-bash"><span class="hljs-comment"># Force push with lease (safer)</span>
git push origin branch_name --force-with-lease

<span class="hljs-comment"># Force push (not safer)</span>
git push origin branch_name --force
</code></pre>
<ul>
<li><strong>Merge:</strong> This is also another way to update your current branch with main or master. This merges your main changes into your current branch. (You can explore some advanced things as well in merge when you add new commit messages &amp; other options — explore that on your own.)</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-comment"># merge main into current branch</span>
git merge origin/main
</code></pre>
<h3 id="heading-stashes">Stashes</h3>
<p>I think this is my most used command in Git, as I often work on something I can’t push or want to just keep locally. Stash command is the most useful.</p>
<pre><code class="lang-bash"><span class="hljs-comment"># Git stash your current changes</span>
git stash 

<span class="hljs-comment"># Git stash with custom message &amp; untracked files</span>
git stash save -u <span class="hljs-string">"stash message"</span>

<span class="hljs-comment"># Git stash list</span>
git stash list
</code></pre>
<ul>
<li>Once you stash some changes, then comes the part to apply or pop those changes into your current branch. Apply means applying stashed changes while keeping them in the stash list. Pop means applying and removing the stash from the list.</li>
</ul>
<pre><code class="lang-bash"><span class="hljs-comment"># Apply stash, 0 or whatever index you want from stash list</span>
git stash apply stash@{0}

<span class="hljs-comment"># Pop stash</span>
git stash pop
</code></pre>
<blockquote>
<p>Note: One better option is to use <code>stash apply</code> instead of <code>pop</code> if you think you'll need those changes again. I mainly use <code>pop</code> for instant updates to the current branch or when rebasing for a quick turnaround.</p>
</blockquote>
<h3 id="heading-cherry-pick">Cherry Pick</h3>
<p>This is the best way to move commits from one branch to another. I often work with release &amp; main branches where I merge commits to main, then cherry-pick and merge them to release branches. Switch to the branch where you want to add the commit, copy the commit ID you want to cherry-pick &amp; run the below command:</p>
<pre><code class="lang-bash">git cherry-pick commit_hash_id
</code></pre>
<h3 id="heading-reflog">Reflog</h3>
<p>To view your recent Git commit history (including branch changes, resets, rebases, etc.), you can use the following command in the terminal. Personally, I’m not a fan of logs from terminal — I just use Git Graph extension from VSCode.</p>
<pre><code class="lang-bash"><span class="hljs-comment"># Extra --oneline parameter gives a nice list in one-liners</span>
git reflog --oneline
</code></pre>
<h3 id="heading-conclusion">Conclusion</h3>
<p><strong>Git is one of those tools that sticks with you through every project.</strong> Learn it once, understand it well, and it’ll make your daily workflow smoother, faster, and less frustrating.</p>
<h3 id="heading-resources">Resources</h3>
<p>These are some extensions I use with VSCode &amp; guides I refer to when I need to know something:</p>
<ul>
<li><p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph">Git Graph VSCode Extension</a></p>
</li>
<li><p><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens">Git Lens VSCode Extension</a></p>
</li>
<li><p><a target="_blank" href="https://ksridhar.dev/how-to-setup-ssh-for-github-in-linux">How to setup SSH for Github in Unix from Scratch?</a></p>
</li>
<li><p><a target="_blank" href="https://www.atlassian.com/git">Getting Git right by Atlassian</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Supercharge Your Terminal Workflow with Atuin]]></title><description><![CDATA[The terminal is essential software for any developer or engineer. It is one of their daily drivers, so a terminal with better tools will not only save you time but also increase productivity. These are some key features that make Atuin stand out in y...]]></description><link>https://ksridhar.dev/supercharge-your-terminal-workflow-with-atuin</link><guid isPermaLink="true">https://ksridhar.dev/supercharge-your-terminal-workflow-with-atuin</guid><category><![CDATA[terminal]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[cli]]></category><category><![CDATA[tools]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Sun, 27 Oct 2024 17:49:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1730051193727/cd218ace-73b9-4368-8694-c64583778b67.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The terminal is essential software for any developer or engineer. It is one of their daily drivers, so a terminal with better tools will not only save you time but also increase productivity. These are some key features that make Atuin stand out in your terminal workflow:</p>
<ol>
<li><p>Terminal History</p>
</li>
<li><p>Terminal commands search</p>
</li>
<li><p>Terminal history sync</p>
</li>
</ol>
<h3 id="heading-setting-up-atuin">Setting up Atuin:</h3>
<ul>
<li>Open your preferred terminal and run the following command on your Unix system</li>
</ul>
<pre><code class="lang-bash">curl --proto <span class="hljs-string">'=https'</span> --tlsv1.2 -LsSf https://setup.atuin.sh | sh
</code></pre>
<ul>
<li><p>If you prefer to install manually, follow the documentation <a target="_blank" href="https://docs.atuin.sh/guide/installation/#manual-installation">here</a></p>
</li>
<li><p>Once the installation is done you can import your current bash or zsh or fish shell history into atuin using this command</p>
</li>
</ul>
<pre><code class="lang-bash">atuin import auto
</code></pre>
<p>That's all you need to set up Atuin and make your terminal more powerful.</p>
<h3 id="heading-using-atuin">Using Atuin</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1730036965504/caf62f8e-e925-4997-a576-6e939cdf5ebd.gif" alt class="image--center mx-auto" /></p>
<p>Here's a basic usage guide. For a more detailed guide, check out the Atuin documentation <a target="_blank" href="https://docs.atuin.sh/">here</a>.</p>
<ul>
<li><p>In your terminal, pressing the up arrow, Ctrl-R, or Command-R opens a search TUI where you can type text to find related commands.</p>
</li>
<li><p>Pressing <code>Enter</code> or <code>Return</code> on any command in the Atuin search UI will execute it immediately. To enter the highlighted command without executing, press <code>Tab</code> to modify it.</p>
</li>
<li><p>You can check which commands you use most frequently with the <code>atuin stats</code> command, which shows your stats for the full history. To check stats for a specific day, follow the steps <a target="_blank" href="https://docs.atuin.sh/reference/stats/#1-day-stats">here</a>.</p>
</li>
</ul>
<pre><code class="lang-bash">atuin stats
</code></pre>
<ul>
<li>To view stats for a single day, refer to the documentation <a target="_blank" href="https://docs.atuin.sh/reference/stats/#1-day-stats">here</a></li>
</ul>
<p>If you use multiple systems and want to sync your Atuin history, follow the steps <a target="_blank" href="https://docs.atuin.sh/self-hosting/server-setup/">here</a>. To set up self-hosting, refer to this <a target="_blank" href="https://docs.atuin.sh/self-hosting/server-setup/">guide</a>.</p>
<p><strong>Interesting links about Atuin:</strong></p>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=uyRmV19qJ2o">Atuin: magical shell history with Rust by Ellie Huxtable</a></p>
</li>
<li><p><a target="_blank" href="https://ellie.wtf/posts/i-quit-my-job-to-work-full-time-on-my-open-source-project">I quit my job to work full time on my open source project</a></p>
</li>
</ul>
<p>Thank you for reading. Feel free to subscribe to my blog and connect on <a target="_blank" href="https://www.linkedin.com/in/sridhar02/">LinkedIn</a> or <a target="_blank" href="https://twitter.com/ksridhar02">Twitter</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Big Companies vs. Small Startups: What's the Difference?]]></title><description><![CDATA[I have worked mostly in small & early-stage startups but got an opportunity to work at a large organization like Amazon. Listing down the different processes that are followed in both the organizations describing the development process & release pro...]]></description><link>https://ksridhar.dev/big-companies-vs-small-startups-whats-the-difference</link><guid isPermaLink="true">https://ksridhar.dev/big-companies-vs-small-startups-whats-the-difference</guid><category><![CDATA[Career]]></category><category><![CDATA[Startups]]></category><category><![CDATA[mnc]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Wed, 31 Jan 2024 18:23:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/VBLHICVh-lI/upload/f54e7c487e3a534973ddb70153ea10ce.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I have worked mostly in small &amp; early-stage startups but got an opportunity to work at a large organization like Amazon. Listing down the different processes that are followed in both the organizations describing the development process &amp; release process in them.</p>
<h3 id="heading-startup-work-life">Startup work life:</h3>
<p>In the startups where I worked, we had lean teams (mostly 4-5 developers) who actively worked on development and a few designers with whom we collaborated. The development process mostly involved setting up the codebase locally and asking questions about it to get clarity on certain patterns in the initial days. Mostly, I worked in 2-week sprints where we were assigned development tasks around the product, like enhancing a page UI or creating a functionality according to the designs. Once you are done with the implementation, you would raise a PR (Pull Request), which would be reviewed by senior team members. Then, you would address any comments by them and merge the PR. The feature might go live initially in a staging environment, which would be tested by other developers or designers to validate that the feature is working correctly. If everything is okay, we will release the feature to production along with other features in a week.</p>
<h3 id="heading-amazon-work-life">Amazon work life:</h3>
<p>It took me almost 20 days or more to properly set up my work laptop as you need to follow a lot of steps. Mostly, we followed 10-day sprints which included retro meetings to discuss any feedback. The product manager and managers would decide the priority of the feature for the sprints. Based on that, you would start working on the feature and raise a Change Request (CR). Once you raise a CR, the code is tested against previously configured tests for your project. If any test fails, you need to fix them. The CR will be reviewed by at least 2 reviewers, but sometimes a 3rd reviewer gets added to it if the feature is large. If the approach is correct, they will approve the CR, or else you need to have meetings with the team and decide on the approach to finalize it. If everything looks good after multiple reviews, or depending on comments, they will approve the CR, and you need to merge it to the mainline.</p>
<blockquote>
<p>If you need to update a CR after a review, you will have to raise another revision for the CR. For performance reviews, how many revisions occurred for your CRs will also be taken into account, both for the reviewer and for you. So, it is recommended to close it in 2 revisions.</p>
</blockquote>
<p>The release process at Amazon is very different from the companies I have worked with. The top management decides on particular dates for a release, usually 2-week or 3-week release cycles. Before a week from the release date, you need to merge your changes to the mainline. They will go for QA testing. Once everything is finalized by QA, then only it will go to production, or if they find a bug, you need to fix it and merge it into the release branch for the release date.</p>
<h3 id="heading-summary">Summary:</h3>
<p>I felt that working at both a startup and Amazon is challenging; you have to keep up with deadlines and deliver features on time. I think when you have a streamlined approach to doing things, you can perform better and manage the expectations of the management. Eventually, any startup or large organization will create their streamlined approaches.</p>
<blockquote>
<p>PS: Actively seeking frontend/fullstack JavaScript roles. If you have openings that match my skills, please connect with me on <a target="_blank" href="https://www.linkedin.com/in/sridhar02/">LinkedIn</a>. Let’s discuss opportunities!</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[My 2023: A Year of Challenges and Triumphs]]></title><description><![CDATA[2023 has been a rollercoaster ride for me. I faced a layoff early in the year from my last company, Hootboard, but bounced back and joined Amazon. Even though it is a contract role, it was the best decision I made. I traveled to the React Nexus confe...]]></description><link>https://ksridhar.dev/my-2023-a-year-of-challenges-and-triumphs</link><guid isPermaLink="true">https://ksridhar.dev/my-2023-a-year-of-challenges-and-triumphs</guid><category><![CDATA[yearinreview]]></category><category><![CDATA[Year End Summary]]></category><category><![CDATA[Year in a Review]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Tue, 02 Jan 2024 19:22:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/FHnnjk1Yj7Y/upload/64a9c257bba5ea04d9dd6997d599580a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>2023 has been a rollercoaster ride for me. I faced a layoff early in the year from my last company, Hootboard, but bounced back and joined Amazon. Even though it is a contract role, it was the best decision I made. I traveled to the React Nexus conference with Zubair in July and after the conference trekked to Skandagiri Hills. Completing the trek was challenging, but with persistence and the help of others, I succeeded. I also visited Anthargiri Hills in September with Nomadic Gurukul, which was a fantastic experience.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1704221971134/f754ac7f-f723-4667-b780-342defdd845f.jpeg" alt="Photo collage" class="image--center mx-auto" /></p>
<h2 id="heading-work">Work:</h2>
<ul>
<li><p>Experienced a layoff in February from Hootboard.</p>
</li>
<li><p>Joined Amazon MiniTV in April.</p>
</li>
<li><p>Worked on a large codebase at Amazon, improving SEO performance by correcting headers, meta descriptions, and adding footer links.</p>
</li>
<li><p>Also learned HTTP status redirections 301 &amp; 302.</p>
</li>
<li><p>Also learned how server-driven UI will make your app load faster &amp; configure every section from the backend.</p>
</li>
<li><p>Key learnings at Amazon:</p>
<ul>
<li><p>The importance of thorough code documentation.</p>
</li>
<li><p>The a need for well-structured documentation when proposing ideas to the team, including a comparative analysis of libraries, along with their advantages, drawbacks, and recommended approaches.</p>
</li>
<li><p>The significance of writing effective Product Requirement Documents (PRDs).</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-outside-work">Outside Work:</h2>
<ul>
<li><p>Initially felt discouraged after the layoff, grappling with doubt fullness. However, in hindsight, it was the best thing that happened to me this year, considering the accomplishments I achieved thereafter.</p>
</li>
<li><p>Attended the React Nexus conference in July &amp; met great people at the conference.</p>
</li>
<li><p>Successfully trekked Skandagiri Hills. Although challenging due to my fitness level, I was supported by trek friends to the top. This was my second trek, following a previous one to Kudurumuka with another friend Nava in 2022.</p>
</li>
<li><p>Met many incredible people at React Nexus, including Vivek from ARC Browser &amp; Tejas.</p>
</li>
<li><p>Purchased an M1 MacBook and an iPhone for personal use.</p>
</li>
<li><p>Learned swimming during the summer.</p>
</li>
<li><p>Also did an aerial yoga workshop along with my brother, hopefully, next year want to try scuba driving in Andaman or some other place.</p>
</li>
<li><p>Attended numerous meetups in Hyderabad. Notable ones include Web, Cloud &amp; Go Multi-Track DevDays at IIIT Hyderabad, AI &amp; ML Multi-Track event at ServiceNow, and a Temporal meetup at Microsoft.</p>
</li>
</ul>
<p>I also wanted to write my experiences of meetups &amp; conferences, I will try to do it after this blog. <em>If you have read till the end, consider writing your own retrospective and sharing it</em></p>
<p>Some more year in reviews you may like to read &amp; which inspired me to write my own</p>
<ul>
<li><p><a target="_blank" href="https://una.im/2023-in-review/">https://una.im/2023-in-review/</a></p>
</li>
<li><p><a target="_blank" href="https://addyo.substack.com/p/23-lessons-in-2023">https://addyo.substack.com/p/23-lessons-in-2023</a></p>
</li>
<li><p><a target="_blank" href="https://blog.cassidoo.co/post/bye-bye-2023/">https://blog.cassidoo.co/post/bye-bye-2023/</a></p>
</li>
<li><p><a target="_blank" href="https://blog.vramana.com/posts/2023_retrospective/">https://blog.vramana.com/posts/2023_retrospective/</a></p>
</li>
<li><p><a target="_blank" href="https://duttakapil.com/posts/year-in-review-2023">https://duttakapil.com/posts/year-in-review-2023</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Cracking the Code: My Senior Software Engineer Interview Experience at Codecademy]]></title><description><![CDATA[This is my interview experience at Codecademy, I want this to be a guide for others that could help others ace their interviews at product companies.
Company Info

Website: https://www.codecademy.com/

Location: Remote

Process for Role: Senior Softw...]]></description><link>https://ksridhar.dev/cracking-the-code-my-senior-software-engineer-interview-experience-at-codecademy</link><guid isPermaLink="true">https://ksridhar.dev/cracking-the-code-my-senior-software-engineer-interview-experience-at-codecademy</guid><category><![CDATA[interview]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[software]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Mon, 16 Oct 2023 19:20:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1697483521951/73f7a55e-cf07-4063-bea7-4350218f510c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is my interview experience at Codecademy, I want this to be a guide for others that could help others ace their interviews at product companies.</p>
<h2 id="heading-company-info">Company Info</h2>
<ul>
<li><p><strong>Website:</strong> <a target="_blank" href="https://www.codecademy.com/">https://www.codecademy.com/</a></p>
</li>
<li><p><strong>Location:</strong> Remote</p>
</li>
<li><p><strong>Process for Role:</strong> Senior Software Engineer - Labs</p>
</li>
<li><p><strong>Job Role Link:</strong> <a target="_blank" href="https://www.codecademy.com/about/job/4278254005">https://www.codecademy.com/about/job/4278254005</a></p>
</li>
<li><p><strong>Status:</strong> Not Selected</p>
</li>
</ul>
<h2 id="heading-interview-process-summary">Interview Process Summary</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Rounds</strong></td><td>7</td></tr>
<tr>
<td><strong>Scripted Questions?</strong></td><td>No</td></tr>
<tr>
<td><strong>Typical DS and Algo Questions?</strong></td><td>No</td></tr>
<tr>
<td><strong>Live Coding?</strong></td><td>Yes</td></tr>
<tr>
<td><strong>Asked Current CTC?</strong></td><td>Yes</td></tr>
</tbody>
</table>
</div><h2 id="heading-rounds-description">Rounds Description</h2>
<p><strong>1. Codecademy Recruiter Screen:</strong></p>
<p>In this round, you will converse with the Hiring Recruiter. You will be asked about yourself, your current place of employment, your reasons for seeking a new opportunity, your current CTC, and your expected CTC. The recruiter will then provide further details about the role for which you have applied.</p>
<p><strong>2.Hiring manager Screen:</strong></p>
<p>In this round, you will speak with the technical hiring manager about the role. You will need to discuss your past work experiences, highlight specific projects, and describe what you are seeking in your next position.</p>
<p><strong>3.Frontend Take Home Assignment:</strong></p>
<p>In this round, you will receive a CodeSandbox link containing a <a target="_blank" href="http://readme.md"><code>readme.md</code></a> file with instructions for the front-end coding exercise, which will be closely related to a business use case. You will have 5 to 6 days to submit your solution. If you require additional time, you may request an extension.</p>
<p><strong>4.Backend Coding Exercise:</strong></p>
<p>In this round, you will be tested on your backend knowledge, specifically concerning HTTP request/response dynamics and other core backend-related topics. This round will primarily focus on real use cases that arise in Codecademy. Concentrate more on backend basics concepts don't think too complex. Please try to complete the coding before the time limit.</p>
<p><strong>5.Take Home Assignment Review:</strong></p>
<p>In this round, you will provide an outline of the code you wrote for the take-home assignment. Following that, you will be asked about potential improvements in your solution, possible UI enhancements, and data flow optimizations. Additionally, you will face some questions based on the specifics of the project.</p>
<p><strong>6.Frontend Design &amp; Architecture:</strong></p>
<p>In this round, you will be asked to use Excalidraw to examine various UI screens from Codecademy. Dive deep into each screen to identify common components, local states, API call request/response structures, and server-side states. Endeavor to explore in detail. In excalidraw mark common components &amp; write the json responses as much as possible. Ask as many questions as necessary to thoroughly understand the requirements for the UI.</p>
<p>Failed in this Round.</p>
<p><strong>7.Hiring Manager Interview:</strong></p>
<p>In this round, you will be asked about the company's core values, which include teamwork, feedback, transparency, and evolution. Please focus primarily on the <a target="_blank" href="https://codecademy.github.io/engineering-competencies/">Engineering Values matrix</a>. Additionally, reflect on your past work, especially instances where you took the initiative to improve the codebase or user experiences. Discuss how you managed deadlines and how you overcame challenges faced while implementing new features.</p>
<h2 id="heading-overall-experience">Overall Experience</h2>
<p>I had a very good Interview experience at Codecademy, recruiter was very kind and assisted in answering all the questions I had before the interview. They also clarified what was expected of me in each round. The coding questions asked ranged from easy to moderate, and each interview focused on business use cases. If you have a strong foundation in the fundamentals of JavaScript and React, you should be able to tackle them with ease.</p>
<h2 id="heading-resourcestips">Resources/Tips</h2>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=BjXyGgrYNQA">A similar interview process by Codecademy recruiter</a></p>
</li>
<li><p>Make sure you try to give your best in each &amp; every round possible.</p>
</li>
</ul>
<p>I would like to tell people to start sharing their interview experiences to order using these platforms so that it would help others to ace their interviews. If you want some kind of template to document this then use this <a target="_blank" href="https://github.com/kamleshchandnani/awesome-interview-processes/blob/master/src/template.mdx">template</a> &amp; refer to this <a target="_blank" href="https://github.com/kamleshchandnani/awesome-interview-processes">awesome-interview-experinces-repo</a>. For blog cover credits go to [Coverview](<a target="_blank" href="https://coverview.vercel.app/">https://coverview.vercel.app/</a>)</p>
<blockquote>
<p>If you need more info regarding this article or anything related to tech or software engineering in general, drop a comment here or you can message me here <a target="_blank" href="https://twitter.com/ksridhar02">ksridhar02</a></p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[What is Local Storage in browsers and How can you use it?]]></title><description><![CDATA[Basic Definition:


The read-only localStorage property allows you to access a Storage object for the Document's origin; the stored data is saved across browser sessions. localStorage is similar to sessionStorage, except that while data stored in loc...]]></description><link>https://ksridhar.dev/what-is-local-storage-in-browsers-and-how-can-you-use-it</link><guid isPermaLink="true">https://ksridhar.dev/what-is-local-storage-in-browsers-and-how-can-you-use-it</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[storage]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Fri, 20 Jan 2023 09:04:50 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1674206340665/ca522710-5f5b-4721-b18a-c399432171b9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ul>
<li><strong>Basic Definition:</strong></li>
</ul>
<blockquote>
<p>The read-only localStorage property allows you to access a Storage object for the Document's origin; the stored data is saved across browser sessions. localStorage is similar to sessionStorage, except that while data stored in localStorage has no expiration time, data stored in sessionStorage gets cleared when the page session ends that is when the page is closed.</p>
</blockquote>
<ul>
<li>Data stored in either localStorage is specific to the protocol of the page. In particular, data stored by a script on a site accessed with HTTP (e.g., http://example.com) is put in a different localStorage object from the same site accessed with HTTPS (e.g.https://example.com).</li>
</ul>
<p>The simplest way to access local storage from our browser local like this</p>
<pre><code class="lang-js"><span class="hljs-built_in">window</span>.localStorage
</code></pre>
<p>which returns an object with the data stored in our browser's local storage.</p>
<ul>
<li><p>The type of data you want to store in local storage should be key-value pairs which are always in the UTF-16 <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/DOMString">DOMString format</a>, which uses two bytes per character. If you want to store objects and arrays they can also be stored by converting them into strings.</p>
</li>
<li><p><strong>Methods available on storage object:</strong></p>
</li>
</ul>
<ol>
<li>Setting data to storage object:</li>
</ol>
<pre><code class="lang-bash">window.localStorage.setItem(<span class="hljs-string">"mode"</span>,<span class="hljs-string">"dark"</span>);
</code></pre>
<p>Using the above method you can set a key to a value, here I am setting mode to a value called dark.</p>
<ol>
<li>Getting data from storage object:</li>
</ol>
<pre><code class="lang-bash">window.localStorage.getItem(<span class="hljs-string">"mode"</span>);
</code></pre>
<p>Using the above method you can get the value of the mode key that we previously set in the storage object.</p>
<ol>
<li>Removing data from storage object:</li>
</ol>
<pre><code class="lang-bash">window.localStorage.removeItem(<span class="hljs-string">'mode'</span>);
</code></pre>
<p>Using this we can remove the value of the particular key from the storage object.</p>
<ol>
<li>Remove all the items from the storage object:</li>
</ol>
<pre><code class="lang-bash">window.localStorage.clear();
</code></pre>
<p>Using this method we can remove all the key-value pairs from the storage object. This can use in cases where the user logs out from the application.</p>
<ul>
<li>Now we will see how you can set an object or an array to the storage object:</li>
</ul>
<pre><code class="lang-js"><span class="hljs-keyword">let</span> user = {
      <span class="hljs-attr">name</span>: <span class="hljs-string">"sridhar"</span>,
      <span class="hljs-attr">city</span>: <span class="hljs-string">"Hyderabad"</span>
}
or 
<span class="hljs-keyword">let</span> numbers = [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]
</code></pre>
<p>To store these kinds of object user or numbers array, you have to convert them to strings by <code>JSON.stringify</code> method.</p>
<pre><code class="lang-bash">const User = JSON.stringify(user);
window.localStorage.setItem(<span class="hljs-string">'user'</span>,User);
</code></pre>
<ul>
<li>To access the above kind of data from the storage object you have to parse the data coming from the storage object like this</li>
</ul>
<pre><code class="lang-js"><span class="hljs-built_in">JSON</span>.parse(<span class="hljs-built_in">window</span>.localStorage.getItem(<span class="hljs-string">"user"</span>));
</code></pre>
<h3 id="heading-let-me-show-a-small-demo">Let me show a small Demo:</h3>
<ul>
<li>Here I am using the chrome browser in Incognito mode, where I am showing where you see the local storage in your browser and how you can interact with it.</li>
</ul>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/h7_3kQlYsm4">https://youtu.be/h7_3kQlYsm4</a></div>
<p> </p>
<h3 id="heading-references">References:</h3>
<p>MDN Docs links:</p>
<p>https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage</p>
<p>https://developer.mozilla.org/en-US/docs/Web/API/DOMString</p>
<blockquote>
<p>If you have any doubts related to this article or anything related to tech or software engineering in general, drop a comment here or you can message me here <a class="user-mention" href="https://hashnode.com/@sridhar02">sridhar katta</a></p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[How to deploy a Nodejs application to a server from scratch with an HTTPS URL?]]></title><description><![CDATA[Today we are going to see how to deploy a Nodejs application to a Linode Nanode 1GB instance with an SSL certificate using a caddy server to one of my sub-domain https://twitter.server.ksridhar.xyz
Prerequisites:
Before we dive into the code, below a...]]></description><link>https://ksridhar.dev/how-to-deploy-a-nodejs-application-to-a-server-from-scratch-with-an-https-url</link><guid isPermaLink="true">https://ksridhar.dev/how-to-deploy-a-nodejs-application-to-a-server-from-scratch-with-an-https-url</guid><category><![CDATA[Node.js]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Linux]]></category><category><![CDATA[deployment]]></category><category><![CDATA[server hosting]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Thu, 24 Feb 2022 05:24:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1645679846671/BCKogUoPa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today we are going to see how to deploy a Nodejs application to a Linode Nanode 1GB instance with an SSL certificate using a caddy server to one of my sub-domain <code>https://twitter.server.ksridhar.xyz</code></p>
<h2 id="heading-prerequisites">Prerequisites:</h2>
<p>Before we dive into the code, below are some things you should know:</p>
<ul>
<li>You are familiar with JavaScript, Node.js in general</li>
<li>You are familiar with Git and GitHub</li>
<li>You are familiar with Linux systems and commands</li>
<li>You are familiar with Linode</li>
</ul>
<h2 id="heading-first-lets-see-how-to-create-an-instance-on-linode">First let's see how to create an instance on Linode:</h2>
<ul>
<li><p>Create a free Linode account using this <a target="_blank" href="https://www.linode.com/lp/podcasts/?ifso=syntax">link</a> you will get 60 days $100 credit and log in to Linode and click on create Linode button.</p>
</li>
<li><p>Create a Linode instance from this <a target="_blank" href="https://cloud.linode.com/linodes">page</a> where you need to choose the
operating system(choose the one you are most comfortable with I am choosing ubuntu), server location(choose the nearest location to your place),  now select a plan I am choosing the shared CPU section and selecting the Nanode 1 GB instance for my project.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1645443576990/6KSJGVyAd.png" alt="image.png" /></p>
<ul>
<li>Add a password to your instance and add the ssh key if you want to use ssh to your server, then click on create Linode button it will create an instance for you in a few minutes and It will assign you an IP address for you to use.</li>
</ul>
<h2 id="heading-lets-see-how-to-deploy-your-application-to-your-server">Let's see how to deploy your application to your server:</h2>
<ul>
<li>First ssh into your server using this command from your Unix terminal.</li>
</ul>
<pre><code><span class="hljs-attribute">ssh</span> username<span class="hljs-variable">@ipaddresss</span>
</code></pre><ul>
<li><p>Once you ssh into your it is a new system for you to use, so we have to update our system drivers and install certain dependencies such as git, Nodejs, neovim and net-tools.</p>
</li>
<li><p>Update your system using this command</p>
</li>
</ul>
<pre><code>sudo apt<span class="hljs-operator">-</span>get update <span class="hljs-operator">&amp;</span><span class="hljs-operator">&amp;</span> sudo apt<span class="hljs-operator">-</span>get upgrade
</code></pre><ul>
<li>Install git, neovim(to edit files in the server) &amp; net-tools(net-tools are used to see what ports are running in your server).</li>
</ul>
<pre><code><span class="hljs-attribute">sudo</span> apt install git net-tools neovim
</code></pre><ul>
<li>Install Nodejs, I am using volta to install nodejs you can use other ways as well.</li>
</ul>
<pre><code># install Volta
curl https://<span class="hljs-keyword">get</span>.volta.sh | bash

# install Node
volta install node

# <span class="hljs-keyword">start</span> <span class="hljs-keyword">using</span> Node
node

# <span class="hljs-keyword">check</span>  Node <span class="hljs-keyword">version</span>
node -v

# <span class="hljs-keyword">check</span> Npm <span class="hljs-keyword">version</span>
npm -v
</code></pre><ul>
<li>Once you install nodejs, clone your project into the server in my case I am using this <a target="_blank" href="https://github.com/sridhar02/twitter-clone-backend">nodejs project</a></li>
</ul>
<pre><code>git <span class="hljs-keyword">clone</span> repository link
</code></pre><ul>
<li>Now change the directory into the project and install the dependencies</li>
</ul>
<pre><code>cd projectName <span class="hljs-operator">&amp;</span><span class="hljs-operator">&amp;</span> npm i
</code></pre><ul>
<li>Start the project using your script in your project</li>
</ul>
<pre><code>npm <span class="hljs-keyword">start</span>
</code></pre><ul>
<li><p>If you visit your IP: port in the browser (example: http://156.46.42.207:8000),  you can see use your project is running but this way does not work once you close your terminal from the server so you have to use <a target="_blank" href="https://pm2.keymetrics.io/">pm2</a> which is a node process manager to run your project.</p>
</li>
<li><p>To use pm2, you have to install the pm2 globally first</p>
</li>
</ul>
<pre><code><span class="hljs-attribute">volta</span> install pm<span class="hljs-number">2</span>
</code></pre><ul>
<li>Once pm2 is installed you can create a <code>ecosystem.config.js</code> file to list your env variables and other things but I am not doing that in my project. Instead, i am directly starting the project and creating an env file, and adding my environment variables.</li>
</ul>
<pre><code><span class="hljs-comment"># create an env file</span>
<span class="hljs-attribute">touch</span>  .env

<span class="hljs-comment">#Edit the file using neovim</span>
nvim .env

<span class="hljs-comment">#Start the pm2 process in my case the file is preset in src/server.js</span>
pm2 start src/server.js
</code></pre><ul>
<li>Now you see the logs and see the process using the following commands.</li>
</ul>
<pre><code><span class="hljs-comment">#To list all the pm2 process</span>
pm2 list

<span class="hljs-comment">#To see the logs run</span>
pm2 log processNumber

<span class="hljs-comment">#You can also restart the server using this</span>
pm2 restart processNumber

<span class="hljs-comment">#You can also monitor using this command</span>
pm2 monit 0

<span class="hljs-comment">#To flush all process logs</span>
pm2 <span class="hljs-keyword">flush</span>

<span class="hljs-comment">#To flush logs only certain process</span>
pm2 <span class="hljs-keyword">flush</span> processNumber
</code></pre><ul>
<li><p>If you visit your <code>IPAddress: port</code>(port is your application running port number) number you check your endpoints but know we will convert this HTTP into HTTPS with caddy and a sub-domain to my domain <code>ksridhar.xyz</code></p>
</li>
<li><p>First, we will install caddy from this <a target="_blank" href="https://caddyserver.com/docs/install">caddy docs install link</a>, so I am running ubuntu on my server so I am using these commands:</p>
</li>
</ul>
<pre><code class="lang-sh">sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

curl -1sLf <span class="hljs-string">'https://dl.cloudsmith.io/public/caddy/stable/gpg.key'</span> | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc

curl -1sLf <span class="hljs-string">'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt'</span> | sudo tee /etc/apt/sources.list.d/caddy-stable.list

sudo apt update

sudo apt install caddy
</code></pre>
<ul>
<li>After installing Caddy we can use the following commands:</li>
</ul>
<pre><code><span class="hljs-comment">#To check the caddy status</span>
systemctl status caddy

<span class="hljs-comment">#To stop caddy you can use this command:</span>
sudo systemctl <span class="hljs-keyword">stop</span> caddy

<span class="hljs-comment">#To start cady you use this command:</span>
sudo systemctl <span class="hljs-keyword">start</span> caddy
</code></pre><ul>
<li>we need to add a DNS record to your domain provider, I am using Cloudflare as domain manager so I am adding <code>A</code> record to my sub-domain <code>twitter.server</code> with the content field as my server IP Adress</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1645614222333/mooFnZeVh.png" alt="FireShot Capture 003 - DNS - ksridhar.xyz - Kattasridhar02@gmail.com's Account - Cloudflare_ - dash.cloudflare.com(1).png" /></p>
<blockquote>
<p>Tip: If you are using Cloudflare free account then turn off the proxy status for your record which will cause some issue for your domain, you can also check your website SSL certificates from your terminal using the following command</p>
<pre><code><span class="hljs-comment">#Here I am using my domain but you can use any web address to check their SSL certificates</span>
<span class="hljs-attribute">curl</span> https://ksridhar.xyz -v
</code></pre></blockquote>
<ul>
<li>Once you added a sub-domain you need to add this line into your caddy file which can be opened and changed by the following commands:</li>
</ul>
<pre><code><span class="hljs-comment">#To open caddy in you system</span>
<span class="hljs-attribute">nvim</span> /etc/caddy/Caddyfile

<span class="hljs-comment">#Add this sub-domain with the following object </span>

twitter.ksridhar.xyz {
    <span class="hljs-attribute">reverse_proxy</span> localhost:PORT
}
</code></pre><ul>
<li>PORT is your application running port number</li>
</ul>
<blockquote>
<p>Tip: similarly, you can add any number of domains and sub-domains into the <code>Caddyfile</code> in your server with respective ports, once you reload caddy it will create all the HTTPS URLs.</p>
</blockquote>
<ul>
<li>All you need to do know is to reload the caddy using this command:</li>
</ul>
<pre><code><span class="hljs-attribute">sudo</span> systemctl reload caddy
</code></pre><ul>
<li>Know check for any errors in the caddy server with the status command, if there are no errors then your application is converted to HTTPS with the sub-domain, this is how the status logs show if it is successful.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1645525556746/c86tQcX3X.png" alt="image.png" /></p>
<h2 id="heading-thank-you-for-reading-and-lets-connect">Thank you for reading, and let's connect!</h2>
<p>Thank you for reading my blog. Feel free to subscribe to my blog and connect on <a target="_blank" href="https://www.linkedin.com/in/sridhar02/">LinkedIn</a> or <a target="_blank" href="https://twitter.com/ksridhar02">Twitter</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Introduction to Ionic-react?]]></title><description><![CDATA[Hi everyone
Today I am going to explain how to get started with ionic framework to build different hybrid mobile application using your web technologies.
What is the ionic framework?
Ionic Framework is an open-source UI toolkit for building performan...]]></description><link>https://ksridhar.dev/introduction-to-ionic-react</link><guid isPermaLink="true">https://ksridhar.dev/introduction-to-ionic-react</guid><category><![CDATA[Ionic Framework]]></category><category><![CDATA[React]]></category><category><![CDATA[hashnodebootcamp]]></category><category><![CDATA[beginner]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Tue, 10 Nov 2020 17:35:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1605028865847/h4dqiWKtd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone</p>
<p>Today I am going to explain how to get started with ionic framework to build different hybrid mobile application using your web technologies.</p>
<h3 id="what-is-the-ionic-framework">What is the ionic framework?</h3>
<p>Ionic Framework is an open-source UI toolkit for building performant, high-quality mobile and desktop apps using web technologies — HTML, CSS, and JavaScript — with integrations for popular frameworks like Angular, React, and Vue.JS.</p>
<p>Today we are going to cover how to use React and ionic to create a hybrid mobile application.</p>
<h3 id="install-ionic-cli-from-your-terminal">Install ionic-cli from your terminal</h3>
<pre><code class="lang-shell">npm install -g @ionic/cli
</code></pre>
<ul>
<li>Like we create a React app using <code>create-react-app</code>  we can create react app using ionic/cli from your terminal</li>
</ul>
<pre><code class="lang-shell">ionic start
</code></pre>
<ul>
<li>Then you will be asked to select a framework you want to use for your application, I am choose to react but you can choose whatever you are comfortable.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1604982661864/qhtY-0MVV.png" alt="image.png" /></p>
<ul>
<li><p>After you choose framework you are asked to enter a name for your project </p>
</li>
<li><p>After choosing the framework and project name you will be asked to select a template from the following list</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605024964962/OUm4BMZoH.png" alt="image.png" /></p>
<ul>
<li><p>Templates are as follows</p>
<ul>
<li>blank - An empty project with a single page</li>
<li>list     - A list based layout application </li>
<li>sidemenu - A sidemenu based layout </li>
<li>tabs - A tabs based layout</li>
<li>my-first-app - A tabs based fully functional photo Gallery application using native camera elements for android and IOS</li>
<li>conference  - A kitchen-sink application that shows off all Ionic features </li>
</ul>
</li>
<li><p>Out of the above templates two are fully functional application those are my-first-app which is a photo gallery app, conference apps is a kitchen-sink application which show how much we can do with ionic framework using native elements from ionic.</p>
</li>
<li><p>For this tutorial I am choosing the my-first-app template and file structure will look like this.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605027860572/RCEROuxcz.png" alt="image.png" /></p>
<ul>
<li>After the creation of template change the directory to the project folder and start the  project using the following command</li>
</ul>
<pre><code class="lang-shell">ionic serve
</code></pre>
<ul>
<li><p>Now you can see the server started at <code>http://localhost:8100</code> and will open in your default browser the UI look something like this</p>
</li>
<li><p>By default the application opens tab1 which will look something like this</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605029207256/iOGAqFB7s.png" alt="image.png" /></p>
<ul>
<li>If you go to tab 2 where you can see the camera button floating, click on it will open your webcam and you can take a picture which will be stored locally memory. </li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605029303301/GHtXWpfJ8.png" alt="image.png" /></p>
<ul>
<li>Open browser dev tools,view the application different devices you can feel the native look, I have taken a simple photo using the webcam from my computer and all the images will be displayed in a grid format.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1605027629814/oo10VSSNG.png" alt="image.png" /></p>
<ul>
<li>Utill now we only created a web application so in order to create a native hybrid application you need to add either capacitor or Cordova for the project. We will look at those in the next part of this series and much more about ionic in general.</li>
</ul>
<h2 id="resources">Resources</h2>
<ul>
<li><a target="_blank" href="https://ionicframework.com/docs/">Ionic-docs</a></li>
</ul>
<blockquote>
<p>If you have any doubts related to this article or anything related to tech or software-engineering in general, drop a comment here or you can message me on twitter <a target="_blank" href="https://twitter.com/ksridhar02">@ksridhar02</a>.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[What is clamp function in CSS?]]></title><description><![CDATA[Hi everyone, today I going to explain the importance of an inbuilt CSS function called clamp() which can be used most of the time in building responsive web pages without the need of media queries.
What is a clamp function?
The clamp() CSS function c...]]></description><link>https://ksridhar.dev/what-is-clamp-function-in-css</link><guid isPermaLink="true">https://ksridhar.dev/what-is-clamp-function-in-css</guid><category><![CDATA[CSS]]></category><category><![CDATA[HTML]]></category><category><![CDATA[Responsive Web Design]]></category><category><![CDATA[2Articles1Week]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Thu, 15 Oct 2020 03:25:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1602731908181/o_8911oEF.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone, today I going to explain the importance of an inbuilt CSS function called <code>clamp()</code> which can be used most of the time in building responsive web pages without the need of media queries.</p>
<h3 id="what-is-a-clamp-function">What is a clamp function?</h3>
<p>The <code>clamp()</code> CSS function clamps a value between an upper and lower bound. clamp() enables selecting a middle value within a range of values between a defined minimum and maximum. </p>
<p>While it’s a related idea to min() and max() it is different in specific ways:</p>
<ul>
<li>Order matters</li>
<li><p>It only takes 3 parameters</p>
</li>
<li><p>Those 3 parameters are</p>
<p> 1.The minimum</p>
<p> 2.The target value (ideally a relative unit)</p>
<p> 3.The maximum</p>
</li>
</ul>
<pre><code class="lang-css"> <span class="hljs-selector-tag">clamp</span>(<span class="hljs-selector-tag">MIN</span>, <span class="hljs-selector-tag">VAL</span>, <span class="hljs-selector-tag">MAX</span>)
</code></pre>
<ul>
<li><p><code>clamp()</code> can be used for any of the following data types:</p>
<ul>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/length"><code>&lt;length&gt;</code></a></li>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/frequency"><code>&lt;frequency&gt;</code></a></li>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/angle"><code>&lt;angel&gt;</code></a></li>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/time"><code>&lt;time&gt;</code></a></li>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/percentage"><code>&lt;percentage&gt;</code></a></li>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/number"><code>&lt;number&gt;</code></a></li>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/integer"><code>&lt;integer&gt;</code></a></li>
</ul>
</li>
</ul>
<h3 id="clamp-function-in-action">Clamp function in action:</h3>
<ul>
<li>Font size control using a <code>clamp()</code> with using a single media query</li>
</ul>
<iframe height="318" style="width:100%" src="https://codepen.io/sridhar-katta/embed/NWrxvXo?height=318&amp;theme-id=dark&amp;default-tab=html,result">
  See the Pen <a href="https://codepen.io/sridhar-katta/pen/NWrxvXo">fontSize-control-with-clamp()</a> by Sridhar Katta
  (<a href="https://codepen.io/sridhar-katta">@sridhar-katta</a>) on <a href="https://codepen.io">CodePen</a>.
</iframe>

<ul>
<li><code>Clamp()</code> for controlling Image width</li>
</ul>
<iframe height="500" style="width:100%" src="https://codepen.io/sridhar-katta/embed/gOMPxro?height=500&amp;theme-id=dark&amp;default-tab=result">
  See the Pen <a href="https://codepen.io/sridhar-katta/pen/gOMPxro">clamp-function-css</a> by Sridhar Katta
  (<a href="https://codepen.io/sridhar-katta">@sridhar-katta</a>) on <a href="https://codepen.io">CodePen</a>.
</iframe>

<h2 id="resources">Resources:</h2>
<ul>
<li><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/CSS/clamp">Mozilla Docs</a></li>
</ul>
<blockquote>
<p>If you have any doubts related to this article or anything related to tech or software-engineering in general, drop a comment here or you can message me on twitter <a target="_blank" href="https://twitter.com/ksridhar02">@ksridhar02</a>.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[What is Mixed content block and how can we create a proxy server?]]></title><description><![CDATA[Hi everyone, recently I have encountered a problem when working on a react project. I created the project with a basic login and a dashboard page. I have deployed it to Heroku, now started to test in my browser visiting the URL and entering the login...]]></description><link>https://ksridhar.dev/what-is-mixed-content-block-and-how-can-we-create-a-proxy-server</link><guid isPermaLink="true">https://ksridhar.dev/what-is-mixed-content-block-and-how-can-we-create-a-proxy-server</guid><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Fri, 18 Sep 2020 15:44:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1600458352255/MYaJEiIiJ.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone, recently I have encountered a problem when working on a react project. I created the project with a basic login and a dashboard page. I have deployed it to Heroku, now started to test in my browser visiting the URL and entering the login credentials there got an error alert on my login screen then went to developer tools and checked what is the error in the network tab.</p>
<p>I got these two errors in dev tools saying mixed content block restricted.</p>
<ul>
<li>Network tab errors</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1600445970241/JRGT7Rbky.png" alt="image.png" /></p>
<ul>
<li>Browser console errors</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1600445836036/IBxZz56HR.png" alt="image.png" /></p>
<ul>
<li>Now I began to wonder what is a mixed content block, I have never encountered it till now, so began to search what is it in <a target="_blank" href="https://developer.mozilla.org/en-US/">MDN</a> as it is the best where can find answers about any issue related to web applications. I will explain the gist of it now.</li>
</ul>
<ul>
<li>What is Mixed content block?</li>
</ul>
<blockquote>
<p>When a user visits a page served over HTTPS, their connection with the webserver is encrypted with TLS and is therefore safeguarded from most sniffers and man-in-the-middle attacks. An HTTPS page that includes content fetched using cleartext HTTP is called a mixed content page. Pages like this are only partially encrypted, leaving the unencrypted content accessible to sniffers and man-in-the-middle attackers. That leaves the pages unsafe.</p>
</blockquote>
<ul>
<li>There are two types of mixed content blocks here :</li>
</ul>
<p>1.<strong>Mixed passive/display content:</strong></p>
<p>Mixed passive/display content is content served over HTTP that is included in an HTTPS webpage, but that cannot alter other portions of the webpage.</p>
<ul>
<li><strong>Passive content list</strong></li>
</ul>
<p>This section lists all types of HTTP requests which are considered passive content:</p>
<ul>
<li><code>&lt;img&gt;</code>(src attribute)</li>
<li><code>&lt;audio&gt;</code>(src attribute)</li>
<li><code>&lt;video&gt;</code>(src attribute)</li>
<li><code>&lt;object&gt;</code>subresources (when an  performs HTTP requests) </li>
</ul>
<p>2.<strong>Mixed active content:</strong></p>
<p>Mixed active content is content that has access to all or parts of the Document Object Model of the HTTPS page. This type of mixed content can alter the behavior of the HTTPS page and potentially steal sensitive data from the user. Hence, in addition to the risks described for mixed display content above, mixed active content is vulnerable to a few other attack vectors.</p>
<ul>
<li><strong>Active content examples</strong></li>
</ul>
<p>This section lists some types of HTTP requests which are considered active content:</p>
<ul>
<li><code>&lt;script&gt;</code>(src attribute)</li>
<li><code>&lt;link&gt;</code>(href attribute) (this includes CSS stylesheets)</li>
<li><code>&lt;iframe&gt;</code>(src attribute)</li>
<li><code>XMLHttpRequest</code> requests</li>
<li><code>fetch()</code> requests</li>
<li>All cases in CSS where a <code>&lt;url&gt;</code> value is used (<code>@font-face</code>,<code>cursor</code>, <code>background-image</code>, and so forth).</li>
<li><code>&lt;object&gt;</code>(data attribute)</li>
<li><code>Navigator.sendBeacon</code> (url attribute)</li>
</ul>
<p>Here I got problem mainly due to my backend server having HTTP IP Adress and the browser is blocking the HTTP calls due to MIxed content.</p>
<p>For this type of errors, we can create a proxy for our IP address. Now what happens is we make a request from the browser it calls our HTTPS proxy address that in turn calls an HTTP address. This works perfectly because the browser will only know that we are calling HTTPS to HTTPS it won't know the other HTTP call we are making from the proxy server.</p>
<ul>
<li><p>Now we can create a simple proxy server using these </p>
</li>
<li><p>create a <code>package.json</code> using <code>npm init</code> command </p>
</li>
<li><p>Now install an npm package called <a target="_blank" href="https://www.npmjs.com/package/http-proxy">http-proxy npm package</a>. </p>
</li>
<li><p>create a <code>server.js</code> file write the following code</p>
</li>
</ul>
<pre><code><span class="hljs-keyword">const</span> http = <span class="hljs-keyword">require</span>(<span class="hljs-string">"http"</span>);
<span class="hljs-keyword">const</span> httpProxy = <span class="hljs-keyword">require</span>(<span class="hljs-string">"http-proxy"</span>);

<span class="hljs-keyword">const</span> PORT = process.env.PORT || <span class="hljs-number">8080</span>;
httpProxy.createProxyServer({ target: <span class="hljs-string">"http://139.XX.0.96:XXX"</span> }).listen(PORT);
</code></pre><ul>
<li><p>Now run the server using <code>node server.js</code>.</p>
</li>
<li><p>Now our proxy server is ready. we can request any type of request from our local to sever to the HTTP server.</p>
</li>
<li><p>we can deploy either in AWS or Heroku or any other platform. we can use that server IP to call our HTTP address.</p>
</li>
</ul>
<h3 id="references">References</h3>
<p>MDN Docs links: </p>
<p>https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content/How_to_fix_website_with_mixed_content</p>
<p>https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content</p>
<p>NPM package link : </p>
<p>https://www.npmjs.com/package/http-proxy</p>
<blockquote>
<p>If you have any doubts related to this article or anything related to tech or software-engineering in general, drop a comment here or you can message me on twitter <a target="_blank" href="https://twitter.com/ksridhar02">@ksridhar02</a>.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[How to setup the Integration of LinkedIn API with OAuth?]]></title><description><![CDATA[Hi everyone, I have recently worked on a project where we need to sync the user data using linkedIn, so to set up a sign in via LinkedIn I visited the LinkedIn developer documentation but there are no clear instructions, so I want the explain how can...]]></description><link>https://ksridhar.dev/how-to-setup-the-integration-of-linkedin-api-with-oauth</link><guid isPermaLink="true">https://ksridhar.dev/how-to-setup-the-integration-of-linkedin-api-with-oauth</guid><category><![CDATA[React]]></category><category><![CDATA[serverless]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[app development]]></category><category><![CDATA[oauth]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Mon, 07 Sep 2020 02:12:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1599444000751/isaZbQEFD.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone, I have recently worked on a project where we need to sync the user data using linkedIn, so to set up a sign in via LinkedIn I visited the LinkedIn developer documentation but there are no clear instructions, so I want the explain how can you set up easy login or sync user data through LinkedIn API.</p>
<ul>
<li>Many of us may have encountered on different websites, where you can log in with Facebook, Github, Google, and LinkedIn. These are operations are called the OAuth authorization setup. They are very similar to each other and everyone follows the same way. so now I going to explain setting up OAuth with linkedIn. This is the OAuth flow for the application </li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1599444635045/nvLNSwwHP.png" alt="image.png" /></p>
<p>Steps:</p>
<ul>
<li>Visit the LinkedIn <a target="_blank" href="https://www.linkedin.com/developers/">developers website</a> from your profile and now you will be able to see a create app button on the main page click on it.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1598762877198/gtAZSX_mS.png" alt="image.png" /></p>
<ul>
<li>After clicking on the page you will be able to see this page where you need to specify the app name, you have to enter the LinkedIn page name of the company which you will be associating the with the application you are building, enter any Privacy policy URL for your associated application, upload the company logo and create the application. </li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1598763028307/mZoczMEag.png" alt="image.png" /></p>
<ul>
<li>After that, you will be given a client id and client secret which we will be using later in your application in the Auth tab of the next page, here you also need to specify the redirect URL, which will be used to redirect to your application after login. </li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1598763673930/Jjx65u_Wi.png" alt="image.png" /></p>
<ul>
<li>Now  the main step is to get the data required for your application, for this, you need to have access to the user profile scopes such as r_basicprofile,r_fullprofile, and r_emailaddress, these are field which you will be able to access from the LinkedIn API which will be added based on the products you add in your application </li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1598770936187/Hu_Bl1Mse.png" alt="image.png" /></p>
<ul>
<li>Now you need to configure the products for your application, the image below you need to select sign in with LinkedIn product so that u will get the basic profile and email address from the logged-in user. If you need to get all the user-related education, any other you need to set up other products or you need to apply for the different <a target="_blank" href="https://developer.linkedin.com/partner-programs/apply">partnership programs</a> with LinkedIn to get the user full details.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1598770801452/m-pOzi_e-.png" alt="image.png" /></p>
<ul>
<li>I have added the sign in with the LinkedIn product for my application which will get me r_liteprofile and r_emailaddress in your scopes.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1599407717691/iI6o0pujv.png" alt="image.png" /></p>
<h4 id="i-have-created-a-react-application-with-nextjs-and-serverless-functions-for-this-use-case-this-is-the-sample-websitehttpslinkedin-oauth-examplevercelapp-i-have-created-which-will-get-you-your-profile-name-and-profile-picture">I have created a react application with Nextjs and serverless functions for this use case. This is the sample <a target="_blank" href="https://linkedin-oauth-example.vercel.app/">website</a>. I have created which will get you your profile name and profile picture.</h4>
<h4 id="references">References:</h4>
<p>LinkedIn developers URL: https://www.linkedin.com/developers/</p>
<p>Repo Link: https://github.com/sridhar02/LinkedIn-OAuth-example</p>
<p>sample website link: https://linkedin-oauth-example.vercel.app/</p>
<p>LinkedIn Documentation : https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow?context=linkedin/compliance/context</p>
<blockquote>
<p>If you have any doubts related to this article or anything related to tech or software-engineering in general, drop a comment here or you can message me on twitter <a target="_blank" href="https://twitter.com/ksridhar02">@ksridhar02</a>.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Some of the famous Podcasts in Tech?]]></title><description><![CDATA[Hi everyone!. Today lets talk about podcasts, I think they are a very important part of software engineers life as we tend to write code listing to some podcast or music which help you to focus more on the work we do in a particular block of time. I ...]]></description><link>https://ksridhar.dev/some-of-the-famous-podcasts-in-tech</link><guid isPermaLink="true">https://ksridhar.dev/some-of-the-famous-podcasts-in-tech</guid><category><![CDATA[Web Development]]></category><category><![CDATA[technology]]></category><category><![CDATA[2Articles1Week]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Wed, 19 Aug 2020 17:45:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1597859267849/L6Q-x1gy4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone!. Today lets talk about podcasts, I think they are a very important part of software engineers life as we tend to write code listing to some podcast or music which help you to focus more on the work we do in a particular block of time. I find them so much interesting some times we learn a topic from the podcast while coding at the same time and listing them online they also provide great notes which we can refer to after listing to them passively. </p>
<ul>
<li>This is the general  Wikipedia definition of a podcast <blockquote>
<p>A podcast is an episodic series of spoken word digital audio files that a user can download to a personal device for easy listening. Streaming applications and podcasting services provide a convenient, integrated way to manage a personal consumption queue across many podcast sources and playback devices.</p>
</blockquote>
</li>
</ul>
<p>These are some of my favorite podcasts I listen   </p>
<p>1.<a href="https://syntax.fm/">Syntax</a>: The best web development podcasts by Wesbos and Scott. They cover a wide variety of topics regarding web development. They also have Potluck questions where you send a question to them they will answer them in the show. They are play games during podcasts. I love this show and in some episodes, they provide SIIIIICK ××× PIIIICKS.</p>
<p>2.<a href="https://reactpodcast.simplecast.com/">Reactpodcast</a>: This is also one of the favorite ones by chantastic, where he invites one guest to the show and explain about the of the recent topics.</p>
<p>3.<a href="https://www.ladybug.dev/">LadyBug podcast</a>: This is done by Emma Bostian, Kelly Vaughn, and Ali Spittel - three seasoned software developers working in different sectors. The discussions around how to start coding, the hot technologies right now, how to get your first developer job, and more!</p>
<p>4.<a href="https://rework.fm/">Rework</a>: This is a company podcast called Basecamp, they discuss remote work, how they value employees in basecamp, they are an awesome company and I value them a lot like my ideal remote company.</p>
<p>5.<a href="https://learningcurve.dev/">Learning Curve Podcast</a>: This is not a famous one but started by two developers from India, I really like them as I find them as two friends talking casually to each other with some meaning full insights about career, tech, and some great advice to others.i compare them as mini syntax.</p>
<p>They are a lot of podcasts other than these choose the one which you like and inculcate them in your daily life as we code and at the same time, we can learn new things. Not only to Tech they are a lot of areas which are covered in different podcasts search them listen to them. </p>
<ul>
<li><strong>Please do mention your favorite podcast in the comments I would love to try them.</strong></li>
</ul>
<blockquote>
<p>If you have any doubts related to this article or anything related to tech or software-engineering in general, drop a comment here or you can message me on twitter <a href="https://twitter.com/ksridhar02">@ksridhar02</a>.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[Some Commonly used React Patterns?]]></title><description><![CDATA[These are some of the commonly used react patterns:
1.Element

Elements are anything inside angle brackets.

<div></div>
<App />


Components return elements. 

2.Component 

These are nothing but functions which return a React Element

function App(...]]></description><link>https://ksridhar.dev/some-commonly-used-react-patterns</link><guid isPermaLink="true">https://ksridhar.dev/some-commonly-used-react-patterns</guid><category><![CDATA[React]]></category><category><![CDATA[2Articles1Week]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[javascript framework]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Sun, 16 Aug 2020 03:06:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1597546877334/ArZlpY8Z7.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>These are some of the commonly used react patterns:</p>
<p>1.<strong>Element</strong></p>
<ul>
<li>Elements are anything inside angle brackets.</li>
</ul>
<pre><code class="lang-js">&lt;div&gt;<span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">App</span> /&gt;</span></span>
</code></pre>
<ul>
<li>Components return elements. </li>
</ul>
<p>2.<strong>Component</strong> </p>
<ul>
<li>These are nothing but functions which return a React Element</li>
</ul>
<pre><code class="lang-js"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">return</span>  <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span> Hello World!!!<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
}</span>
</code></pre>
<p>3.<strong>Expressions</strong></p>
<ul>
<li>use curly braces to embed expression in JSX</li>
</ul>
<pre><code class="lang-js"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Greeting</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">let</span> name = <span class="hljs-string">"sridhar"</span>;

  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>Hi {name}!<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>;</span>
}
</code></pre>
<p>4.<strong>defaultProps</strong></p>
<ul>
<li>Specify default values for props with <strong>defaultProps</strong>.</li>
</ul>
<pre><code class="lang-js"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params">props</span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>Hi {props.name}!<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>;</span>
}
App.defaultProps = {
  name: <span class="hljs-string">"Guest"</span>
};
</code></pre>
<p>5.<strong>Destructuring Props</strong></p>
<ul>
<li>Destructuring is an ES6 feature which will be used commonly in react used to destructure objects and arrays.</li>
</ul>
<pre><code class="lang-js"><span class="hljs-keyword">let</span> person = { name: <span class="hljs-string">"sridhar"</span>}
<span class="hljs-keyword">let</span> { name} = person
</code></pre>
<ul>
<li>Similarly, we can destructure Arrays</li>
</ul>
<pre><code class="lang-js"><span class="hljs-keyword">let</span> things = [<span class="hljs-string">"one"</span>, <span class="hljs-string">"two"</span>];
<span class="hljs-keyword">let</span> [first, second] = things;
</code></pre>
<ul>
<li>Destructuring is used a lot in functional components. These component declarations are as below</li>
</ul>
<pre><code class="lang-js"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Greeting</span>(<span class="hljs-params">props</span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>Hi {props.name}!<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>;</span>
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Greeting</span>(<span class="hljs-params">{ name }</span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>Hi {name}!<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>;</span>
}
</code></pre>
<ul>
<li>There's is a syntax for collecting props into an object. It is <a href="https://developer.mozilla.org/en- 
US/docs/Web/JavaScript/Reference/Functions/rest_parameters">react parameter syntax</a> and it looks like this</li>
</ul>
<pre><code class="lang-js"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Greeting</span>(<span class="hljs-params">{ name, ...restProps }</span>) </span>{
  <span class="hljs-keyword">return</span> <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>Hi {name}!<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>;</span>
}
</code></pre>
<ul>
<li>Those three dots (...) take all the remaining properties and assign them to the object restProps.</li>
</ul>
<p>6.<strong>Conditional rendering</strong> </p>
<ul>
<li><p>You can't use if/else statements inside component declarations. So conditional (ternary) operator and short-circuit evaluation are your friends.</p>
<p><strong>If</strong></p>
</li>
</ul>
<pre><code>{
  condition &amp;&amp; &lt;span&gt;Rendered <span class="hljs-keyword">when</span> `<span class="javascript">truthy</span>`&lt;/span&gt;;
}
</code></pre><p> <strong>unless</strong></p>
<pre><code>{
  condition || &lt;span&gt;Rendered <span class="hljs-keyword">when</span> `<span class="javascript">falsy</span>`&lt;/span&gt;;
}
</code></pre><p><strong>if-else</strong></p>
<pre><code>{
  condition ? (
    &lt;span&gt;Rendered <span class="hljs-keyword">when</span> `<span class="javascript">truthy</span>`&lt;/span&gt;
  ) : (
    &lt;span&gt;Rendered <span class="hljs-keyword">when</span> `<span class="javascript">falsy</span>`&lt;/span&gt;
  );
}
</code></pre><blockquote>
<p>If you have any doubts related to this article or anything related to tech or software-engineering in general, drop a comment here or you can message me on twitter <a href="https://twitter.com/ksridhar02">@ksridhar02</a>.</p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[From Petroleum Engineering to Software Eng?]]></title><description><![CDATA[Hi everyone, I hope everyone is fine in these uncertain times, today in this post I am going to explain how I changed my career path after my of graduation of B.Tech from Petroleum engineering.

I am just a regular guy who thought of engineering is a...]]></description><link>https://ksridhar.dev/from-petroleum-engineering-to-software-eng</link><guid isPermaLink="true">https://ksridhar.dev/from-petroleum-engineering-to-software-eng</guid><category><![CDATA[Career]]></category><category><![CDATA[2Articles1Week]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Mon, 10 Aug 2020 14:31:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1597066894944/VkxPcYKw_.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="hi-everyone-i-hope-everyone-is-fine-in-these-uncertain-times-today-in-this-post-i-am-going-to-explain-how-i-changed-my-career-path-after-my-of-graduation-of-b-tech-from-petroleum-engineering-">Hi everyone, I hope everyone is fine in these uncertain times, today in this post I am going to explain how I changed my career path after my of graduation of B.Tech from Petroleum engineering.</h3>
<ul>
<li><p>I am just a regular guy who thought of engineering is a great option after my intermediate education, but after 4 years realized that it is just a degree. So right after my graduation, I realized my interest in software, so I have started to learn the software with the help of my brother who is already a remote software developer.</p>
</li>
<li><p>My journey in software started with learning a simple language called <a href="https://golang.org/">Golang</a>, which is very to pick up and understand easily it is similar to C language.After understanding the basics of the <a href="https://golang.org/">Golang</a>,then I am came across this best resource called <a href="https://www.freecodecamp.org/">FreeCodeCamp</a> with a curriculum , so i followed the curriculum with learning the HTML,CSS,JavaScript,ReactJS with practice and reading the documentation in <a href="https://developer.mozilla.org/en-US/">MDN</a> and official <a href="https://reactjs.org/">React documentation</a>.</p>
</li>
<li><p>Learning the languages alone wouldn't help anyone so I started to build personal projects with Reactjs and Golang. My first project was to clone Github functionality as much as possible. I have used Nextjs for the frontend development, Golang for the backend API's and Postgres as a database, which is called <a href="https://github.com/sridhar02/issue-tracker">issue-tracker</a> and similarly I built my second project which is Flipkart clone with the same stack with some basic functionality which is called <a href="https://github.com/sridhar02/ecommerce">ecommerce</a>.</p>
</li>
<li><p>The whole process took me a minimum of 6 months of time, a serious amount to concentration and hard work, so I started applying to companies which my knowledge after a long search for a job. Finally, a first success came to me in terms of a Job in Cambridge Technologies, Hyderabad as JavaScript developer in January.</p>
</li>
<li><p>First Job experience, I was very excited to work in the software industry as of now I am a self-learned software developer. I worked on a web application for the construction domain for a US-based Client with a great team. As everything was going good then a sudden disappointing surprise came to me as COVID hit the world and the construction domain was greatly effected, so the client was in huge losses, I was in my probation period and I have been laid off at the end of April. It was a great journey from Jan to April and 4 months of a great experience. </p>
</li>
<li><p>I was bit little disappointed but everyone is affected by corona, so I have to keep moving for my self, later in May and June, I have applied to a couple of jobs, I was able to clear the interviews in some companies, but there was no good culture so rejected some offers, in the meantime, I explored technologies like Graphql, React Native and did some personal projects using them. At the end of June, I realized that I was wasting a lot of time applying to jobs and doing the test but not learning anything from them so thought of taking a break from applying to jobs and to work on any open-source which would help me to gain some experience. </p>
</li>
<li><p>In July I started to work on an open-source project called <a href="https://mattermost.com/">mattermost</a>. It is an alternative to slack. I started to look into the project and picked a few issues. At first, I was unable to solve the simple issue, It was harder because the codebase was huge, I was unable to understand, after many up and downs with help of matter most team and community I was able to submit my first PR and got it merged. At the end of July, I was working on 4 to 5 issues which are a bit difficult but I kept pushing my limits and some of the issues got merged. I have gained a good amount of experience working on a huge codebase. </p>
</li>
</ul>
<h2 id="conclusion-">Conclusion:</h2>
<ul>
<li>My goal was to settle in a Product based company as a remote developer and to work on a modern stack. I hope to find a good job in the coming future in a month or two. In the meantime, I am going to work a lot more harder on my self and work on opens Sorce projects to gain experience.</li>
</ul>
<h3 id="things-to-remember-">Things to remember:</h3>
<ul>
<li>Keep Working Hard until you find your success and keep pushing yourself.</li>
<li>Software is not Hard, anyone can learn and get a job in software but you have to work hard and practice a lot not watching <strong>videos tutorials</strong>.</li>
<li>Learn with passion and interest, anything is possible.</li>
<li>Everyone will struggle and fumble while learning but don't ever give up, keep pushing yourself. </li>
</ul>
<p>I think this a big article but it would be an inspiration to someone who just started to code or is struggling to learn the software. Anyone wanted to connect with me feel free to ping me by any method and feel free to comment on your views to this post.</p>
]]></content:encoded></item><item><title><![CDATA[How to setup SSH for Github in Linux?]]></title><description><![CDATA[The developer's most used tool was Github, so every time you push your changes you will be asked to enter your Github details which is a tiresome work so setting an ssh key to your Github will make your life a lot easier.
Through the following comman...]]></description><link>https://ksridhar.dev/how-to-setup-ssh-for-github-in-linux</link><guid isPermaLink="true">https://ksridhar.dev/how-to-setup-ssh-for-github-in-linux</guid><category><![CDATA[Linux]]></category><category><![CDATA[ssh]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[2Articles1Week]]></category><dc:creator><![CDATA[Sridhar Katta]]></dc:creator><pubDate>Fri, 07 Aug 2020 02:55:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1596769482723/8s9HEN-M6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The developer's most used tool was Github, so every time you push your changes you will be asked to enter your Github details which is a tiresome work so setting an ssh key to your Github will make your life a lot easier.</p>
<h2 id="heading-through-the-following-commands-you-can-easily-setup-ssh-for-github-in-linux">Through the following commands you can easily setup ssh for GitHub in Linux</h2>
<ul>
<li>Open Your terminal and set the following</li>
</ul>
<pre><code class="lang-bash">git config --global user.name <span class="hljs-string">'Your GitHub username'</span>
git config --global user.email <span class="hljs-string">'your GitHub associated email'</span>
</code></pre>
<ul>
<li>After this step check if you have any SSH keys present locally by this commad.</li>
</ul>
<pre><code class="lang-bash">ls ~/.ssh
</code></pre>
<ul>
<li>Now you have to generate ssh key in your terminal with the following command and click as enter for all the options as default values willl be enough for creating a ssh key</li>
</ul>
<pre><code class="lang-bash">ssh-keygen -t rsa -b 4096 -C <span class="hljs-string">"your_github_email@example.com"</span>
</code></pre>
<ul>
<li><p>Now you have to copy the ssh and paste it in your github ssh settings, we can copy the ssh key easily using xclip.</p>
</li>
<li><p>First install XCLIP through the following command</p>
</li>
</ul>
<pre><code class="lang-bash">sudo apt-get install xclip
</code></pre>
<ul>
<li>Now copy your ssh key using xclip by this command</li>
</ul>
<pre><code class="lang-bash">xclip -sel clip &lt; ~/.ssh/id_rsa.pub
</code></pre>
<ul>
<li><p>Now open your GitHub account in the browser go to settings and select SSH and GPG Keys from the left sidebar.</p>
</li>
<li><p>Now Click New SSH Key button.</p>
</li>
<li><p>Now enter Your title and enter the copied ssh key from earlier.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1596766804138/cu6uDDZyr.png" alt="Screenshot from 2020-08-07 07-49-47.png" /></p>
<ul>
<li>Now open your terminal and Check the ssh key using this command.</li>
</ul>
<pre><code class="lang-bash">ssh -T git@github.com
</code></pre>
<ul>
<li>After this, you will be prompted with this text</li>
</ul>
<pre><code class="lang-bash">Hi Username! You<span class="hljs-string">'ve successfully authenticated, but Github does not support shell access.</span>
</code></pre>
<h3 id="heading-refernce">Refernce</h3>
<p>If you are struck anywhere, please refer to this video tutorial https://www.youtube.com/watch?v=HfTXHrWMGVY.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Please try to use SSH for GitHub as it makes a life a lot easier and secure. If you are struck anywhere feel free to comment below I can help you to set up or some can help with your problem.</p>
]]></content:encoded></item></channel></rss>