<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Subodh Shetty</title>
    <description>The latest articles on DEV Community by Subodh Shetty (@ssh-tty).</description>
    <link>https://dev.to/ssh-tty</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1882074%2Fb1c0c58e-b4e2-460e-89ef-f91de5e46042.jpg</url>
      <title>DEV Community: Subodh Shetty</title>
      <link>https://dev.to/ssh-tty</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ssh-tty"/>
    <language>en</language>
    <item>
      <title>17 Practical Terminal Commands Every Developer Should Know</title>
      <dc:creator>Subodh Shetty</dc:creator>
      <pubDate>Fri, 19 Sep 2025 18:22:57 +0000</pubDate>
      <link>https://dev.to/ssh-tty/17-practical-terminal-commands-every-developer-should-know-4dd9</link>
      <guid>https://dev.to/ssh-tty/17-practical-terminal-commands-every-developer-should-know-4dd9</guid>
      <description>&lt;p&gt;We all use the terminal every day-but most of us only scratch the surface with cd, ls, or git.&lt;/p&gt;

&lt;p&gt;There are hidden gems that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save you from retyping long commands&lt;/li&gt;
&lt;li&gt;Fix typos instantly&lt;/li&gt;
&lt;li&gt;Reuse arguments without copy-paste&lt;/li&gt;
&lt;li&gt;Debug “port already in use” errors&lt;/li&gt;
&lt;li&gt;Check what’s eating up disk space&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my latest write-up, I pulled together 17 practical terminal commands that every developer should know.Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;!! to rerun the last command&lt;/li&gt;
&lt;li&gt;!$ to reuse the last argument&lt;/li&gt;
&lt;li&gt;tee to see output and save it at the same time&lt;/li&gt;
&lt;li&gt;lsof -i :8080 to see which process is using a port&lt;/li&gt;
&lt;li&gt;cd - to jump back to your previous directory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 You can read the full article here:&lt;br&gt;
&lt;a href="https://medium.com/stackademic/practical-terminal-commands-every-developer-should-know-84408ddd8b4c?sk=934690ba854917283333fac5d00d6650" rel="noopener noreferrer"&gt;Practical Terminal Commands Every Developer Should Know&lt;/a&gt;&lt;/p&gt;

</description>
      <category>coding</category>
      <category>programming</category>
      <category>programmers</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Spring Scheduler Made Simple: A Guide for Junior Devs</title>
      <dc:creator>Subodh Shetty</dc:creator>
      <pubDate>Fri, 19 Sep 2025 01:27:03 +0000</pubDate>
      <link>https://dev.to/ssh-tty/spring-scheduler-made-simple-a-guide-for-junior-devs-4k0</link>
      <guid>https://dev.to/ssh-tty/spring-scheduler-made-simple-a-guide-for-junior-devs-4k0</guid>
      <description>&lt;p&gt;When I was starting out, I once wrote a background loop with Thread.sleep() just to send a reminder at fixed times. It worked, but barely.&lt;/p&gt;

&lt;p&gt;Spring Boot has a much cleaner way: Spring Scheduler.&lt;br&gt;
With just an annotation or two, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run tasks every few seconds.&lt;/li&gt;
&lt;li&gt;Delay tasks until the last one finishes.&lt;/li&gt;
&lt;li&gt;Schedule jobs with cron expressions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post, I’ll walk through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to enable scheduling in Spring Boot.&lt;/li&gt;
&lt;li&gt;The difference between fixedRate, fixedDelay, and cron.&lt;/li&gt;
&lt;li&gt;Why a thread pool matters.&lt;/li&gt;
&lt;li&gt;Common mistakes (like tasks silently stopping).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A demo project you can clone and run.&lt;/p&gt;

&lt;p&gt;👉 Full article here: &lt;a href="https://medium.com/javarevisited/spring-scheduler-explained-how-to-run-background-jobs-in-spring-boot-without-cron-c89097047156?sk=10ca2cd006aca4ccba90c6cbe74e4c76" rel="noopener noreferrer"&gt;Spring Scheduler Made Simple&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>java</category>
      <category>springboot</category>
    </item>
    <item>
      <title>How I handled 100K requests hitting AWS Lambda at once</title>
      <dc:creator>Subodh Shetty</dc:creator>
      <pubDate>Fri, 05 Sep 2025 18:41:26 +0000</pubDate>
      <link>https://dev.to/ssh-tty/how-i-handled-100k-requests-hitting-aws-lambda-at-once-5575</link>
      <guid>https://dev.to/ssh-tty/how-i-handled-100k-requests-hitting-aws-lambda-at-once-5575</guid>
      <description>&lt;p&gt;One night ~100K requests landed on our API in under a minute.&lt;br&gt;
The stack looked like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Gateway → Lambda → RDS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It worked fine… until it didn’t:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambda maxed out concurrency.&lt;/li&gt;
&lt;li&gt;RDS was about to collapse under too many connections.&lt;/li&gt;
&lt;li&gt;Cold starts started spiking latency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fix wasn’t fancy-just an old systems trick: put a buffer in the middle.&lt;/p&gt;

&lt;p&gt;We moved to API Gateway → SQS → Lambda, with a few AWS knobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reserved concurrency&lt;/strong&gt; (cap Lambda at safe levels)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DLQ&lt;/strong&gt; (so we didn’t lose poison messages)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudWatch alarms&lt;/strong&gt; (queue depth + message age)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RDS Proxy&lt;/strong&gt; (to stop Lambda → DB connection storms)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s what the reserved concurrency config looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws lambda put-function-concurrency \
  --function-name ProcessOrders \
  --reserved-concurrent-executions 50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That way, even if 100K requests pile up, we never overwhelm the DB.&lt;/p&gt;




&lt;p&gt;⚡ But this only works for asynchronous APIs (where the client can accept a 202 ACK).&lt;br&gt;
If the API must be synchronous, you need other tools: rate limiting, provisioned concurrency, or even containers.&lt;/p&gt;

&lt;p&gt;I wrote a full breakdown with diagrams, configs, and lessons learned here: &lt;a href="https://medium.com/aws-in-plain-english/how-to-stop-aws-lambda-from-melting-when-100k-requests-hit-at-once-e084f8a15790?sk=5b572f424c7bb74cbde7425bf8e209c4" rel="noopener noreferrer"&gt;Read on Medium&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Question for Dev.to readers:&lt;/strong&gt;&lt;br&gt;
How do you handle sudden API spikes in your setup - buffer with queues, scale containers, or something else?&lt;/p&gt;

</description>
      <category>aws</category>
      <category>programming</category>
      <category>lambda</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Git Rebase: The Most Misunderstood Git Command (Explained Simply)</title>
      <dc:creator>Subodh Shetty</dc:creator>
      <pubDate>Fri, 05 Sep 2025 18:13:06 +0000</pubDate>
      <link>https://dev.to/ssh-tty/git-rebase-the-most-misunderstood-git-command-explained-simply-pa5</link>
      <guid>https://dev.to/ssh-tty/git-rebase-the-most-misunderstood-git-command-explained-simply-pa5</guid>
      <description>&lt;p&gt;If you’ve ever worked on a branch while your teammates kept pushing to main, you’ve probably seen your history get messy. That’s where git rebase comes in.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What is Git Rebase?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rebase&lt;/strong&gt; = “&lt;em&gt;take my commits and replay them on top of another branch, as if I started from there.&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;Think of it like cutting commits from one place and pasting them on top of the latest main branch.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Why bother?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keeps history linear (no merge bubbles).&lt;/p&gt;

&lt;p&gt;Easier to read logs.&lt;/p&gt;

&lt;p&gt;Reviewers see your work as if it came after the latest main changes.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without rebase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main:   A---B---C---F
feature:        D---E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With git rebase main:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main:   A---B---C---F---D'---E'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your commits get replayed cleanly after main.&lt;/p&gt;

&lt;p&gt;Golden rules&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-&amp;gt;&lt;/strong&gt;  Rebase your own branch before opening a pull request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-X&lt;/strong&gt;  Don’t rebase branches others are already using.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-&amp;gt;&lt;/strong&gt;  Use git pull --rebase to sync with remote without messy merge commits.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Interactive Rebase (bonus trick)&lt;/strong&gt;&lt;br&gt;
With:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git rebase -i HEAD~3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can squash, edit, or reorder commits before sharing them.&lt;br&gt;
Great for cleaning up “oops, typo fix” commits.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Visual comic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also drew a simple comic that shows a dev literally cutting and pasting commits on top of main - it usually makes juniors go “ahh, now I get it.”&lt;/p&gt;

&lt;p&gt;Read the full article + comic &lt;a href="https://medium.com/stackademic/git-rebase-explained-like-youre-new-to-git-263c19fa86ec?sk=2f9110eff1239c5053f2f8ae3c5fe21e" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Question for you&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do you prefer merge commits (history preserved) or rebasing (cleaner history) in your team’s workflow?&lt;/p&gt;

</description>
      <category>git</category>
      <category>webdev</category>
      <category>programming</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
