<?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: Pragmatic Programmer </title>
    <description>The latest articles on DEV Community by Pragmatic Programmer  (@ravishan16).</description>
    <link>https://dev.to/ravishan16</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%2F252924%2Fca535556-7b02-4c64-9b78-273cdd1abc73.jpeg</url>
      <title>DEV Community: Pragmatic Programmer </title>
      <link>https://dev.to/ravishan16</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ravishan16"/>
    <language>en</language>
    <item>
      <title>Inbox Zero Workflow: Filters, Labels, and Shortcuts That Actually Work</title>
      <dc:creator>Pragmatic Programmer </dc:creator>
      <pubDate>Sat, 12 Apr 2025 01:12:58 +0000</pubDate>
      <link>https://dev.to/ravishan16/inbox-zero-workflow-filters-labels-and-shortcuts-that-actually-work-4ib5</link>
      <guid>https://dev.to/ravishan16/inbox-zero-workflow-filters-labels-and-shortcuts-that-actually-work-4ib5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: This workflow was originally created in 2016 and is being edited/republished in 2025.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the early days of email—AOL, Yahoo, Hotmail—it felt exciting to get a message.&lt;br&gt;&lt;br&gt;
Now, email is mostly noise. Work threads, newsletters, order confirmations, social updates, and spam pile up quickly. The inbox becomes unusable.&lt;/p&gt;

&lt;p&gt;At one point, I had thousands of unread messages. Important emails would get buried.&lt;br&gt;&lt;br&gt;
I needed a system—not a one-time cleanup, but a way to keep it under control.&lt;br&gt;&lt;br&gt;
Gmail’s built-in features—&lt;strong&gt;filters&lt;/strong&gt;, &lt;strong&gt;labels&lt;/strong&gt;, and &lt;strong&gt;keyboard shortcuts&lt;/strong&gt;—turned out to be enough.&lt;br&gt;&lt;br&gt;
What used to take an hour now takes minutes.&lt;/p&gt;

&lt;p&gt;This post shares how I use those features, with examples and a workflow that helps me get through email quickly every day.&lt;br&gt;&lt;br&gt;
I have been sharing this cheat sheet with friends and family for years now.&lt;br&gt;&lt;br&gt;
Here it is for everyone—I hope this helps.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Gmail Settings Tip:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
To use keyboard shortcuts, you need to enable them in Gmail settings first.&lt;br&gt;&lt;br&gt;
Go to &lt;strong&gt;Gmail → Settings (⚙) → See all settings → General tab → Keyboard shortcuts → Turn ON&lt;/strong&gt;,&lt;br&gt;&lt;br&gt;
then scroll down and click &lt;strong&gt;Save Changes&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Foundation: Filters and Labels
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Labels&lt;/strong&gt; are like folders, but more flexible. You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply &lt;strong&gt;multiple&lt;/strong&gt; labels to a single message&lt;/li&gt;
&lt;li&gt;Create &lt;strong&gt;nested labels&lt;/strong&gt; (e.g., &lt;code&gt;orders/amazon&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Assign &lt;strong&gt;colors&lt;/strong&gt; for quick visual scanning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Filters&lt;/strong&gt; are rules that automatically sort incoming email based on sender, subject, keywords, attachments, etc.&lt;/p&gt;

&lt;p&gt;I use filters and auto-labels to prioritize my inbox.&lt;br&gt;&lt;br&gt;
This helps me visually scan and take action on important emails while filtering out routine or low-priority messages.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note on Archiving&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The &lt;strong&gt;Inbox&lt;/strong&gt; in Gmail shows only messages that are not archived.&lt;br&gt;&lt;br&gt;
When you &lt;strong&gt;archive&lt;/strong&gt; an email, it's removed from the inbox but &lt;em&gt;not deleted&lt;/em&gt;.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So when a filter applies &lt;strong&gt;“Skip the Inbox” + “Apply label”&lt;/strong&gt;, the message is out of sight, but still retrievable.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Workflow
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If the selected email is...&lt;/th&gt;
&lt;th&gt;Action to Take&lt;/th&gt;
&lt;th&gt;Shortcut / Method&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Junk / No longer needed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Delete it&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;#&lt;/code&gt; (Shift + 3)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Useful for reference, but needs no action&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Archive it&lt;/strong&gt; (remove from inbox)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;e&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Belongs in a specific project/topic&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Move to label&lt;/strong&gt; (archives + labels)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;v&lt;/code&gt; → type label name, &lt;code&gt;Enter&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Needs action, but not right now&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Snooze it&lt;/strong&gt; (hide until needed)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;b&lt;/code&gt; (then choose time)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Pro Tip: Star (&lt;code&gt;s&lt;/code&gt;) it first&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;I use this for tickets, appointments, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Important / Needs follow-up (not snoozed)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Star it&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;s&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Needs to be read fully&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Open it&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;o&lt;/code&gt; or &lt;code&gt;Enter&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finished with it&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Archive / Delete / Move / Snooze&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;e&lt;/code&gt; / &lt;code&gt;#&lt;/code&gt; / &lt;code&gt;v&lt;/code&gt; / &lt;code&gt;b&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go back to inbox list&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Return to inbox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;u&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schedule a task/meeting from it&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Create calendar event&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Open → &lt;code&gt;⋮ More&lt;/code&gt; → &lt;code&gt;Create event&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Made a mistake (archive/delete)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Undo the last action&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;z&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The Gmail Keyboard Shortcut Cheatsheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key / Feature&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Notes / My Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;j&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Move selection &lt;strong&gt;down&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Navigate email list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;k&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Move selection &lt;strong&gt;up&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Move back up the list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;o&lt;/code&gt; / &lt;code&gt;Enter&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Open&lt;/strong&gt; conversation&lt;/td&gt;
&lt;td&gt;Read full email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;u&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Return to inbox list&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;After opening or acting on email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Toggle selection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;For bulk action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Archive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;My most-used shortcut&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;#&lt;/code&gt; (Shift + 3)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Remove irrelevant mail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Snooze&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hide now, show up later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Move to...&lt;/strong&gt; label&lt;/td&gt;
&lt;td&gt;Archive + label in one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;l&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Label as...&lt;/strong&gt; (no archive)&lt;/td&gt;
&lt;td&gt;Tag without moving&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Star / Unstar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Flag for later / mark important&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;!&lt;/code&gt; (Shift + 1)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Report as spam&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;For junk / phishing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;z&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Undo last action&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quick recovery from misclick&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;?&lt;/code&gt; (Shift + /)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Show shortcut help&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;View all shortcuts in Gmail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This isn’t a complete system or productivity advice.&lt;br&gt;&lt;br&gt;
Just what I do to keep email under control.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Filters&lt;/strong&gt; reduce inbox clutter
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shortcuts&lt;/strong&gt; speed up triage
&lt;/li&gt;
&lt;li&gt;It took a bit of practice, but now it’s second nature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not about perfection—I still occasionally have hundreds of emails.&lt;br&gt;&lt;br&gt;
But the system helps me stay clear on what needs attention and what doesn’t.&lt;/p&gt;

&lt;p&gt;Over time, &lt;strong&gt;muscle memory builds&lt;/strong&gt;, and the process becomes natural.&lt;br&gt;&lt;br&gt;
This isn’t rigid. It’s just structure that helps keep email manageable.&lt;/p&gt;

&lt;p&gt;Use what’s useful. Skip what isn’t.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>google</category>
      <category>shortcut</category>
      <category>keyboard</category>
    </item>
    <item>
      <title># Automate Your Mac Setup: A Developer’s Guide</title>
      <dc:creator>Pragmatic Programmer </dc:creator>
      <pubDate>Thu, 03 Apr 2025 18:42:40 +0000</pubDate>
      <link>https://dev.to/ravishan16/-automate-your-mac-setup-a-developers-guide-2c03</link>
      <guid>https://dev.to/ravishan16/-automate-your-mac-setup-a-developers-guide-2c03</guid>
      <description>&lt;p&gt;Setting up a new Mac for development can be tedious. Installing tools, configuring the shell, and tweaking settings by hand often takes hours and can vary between machines. After years of doing this manually across multiple devices, I created an automated setup to handle it more efficiently.&lt;/p&gt;

&lt;p&gt;This post outlines a tool that cuts Mac setup time to about an hour. It’s something I’ve used myself and shared with others, like when I set up my son’s Mac mini. You can find it on GitHub at &lt;a href="https://github.com/ravishan16/dotFile" rel="noopener noreferrer"&gt;ravishan16/dotFile&lt;/a&gt;. Feel free to try it, tweak it, or suggest improvements.&lt;/p&gt;

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

&lt;p&gt;Manual setups have drawbacks. Automation offers a few clear advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Saves Time:&lt;/strong&gt; Drops setup from several hours to roughly one by handling repetitive tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keeps Things Consistent:&lt;/strong&gt; Applies the same configuration every time, avoiding differences between machines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplifies Replication:&lt;/strong&gt; Makes it easy to set up new devices or assist someone else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracks Changes:&lt;/strong&gt; Uses Git to manage your environment, so you can see or undo modifications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speeds Recovery:&lt;/strong&gt; Re-runs quickly if you reset your system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teaches Skills:&lt;/strong&gt; Shows how shell scripting and configuration work if you dig into the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These points come from real experience, not hypotheticals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s in the Setup?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository (ravishan16/dotFile) includes scripts and files to automate a developer environment on macOS. Here’s what it covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Installation Scripts (scripts/):&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Homebrew:&lt;/strong&gt; Manages CLI tools and GUI apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI Tools:&lt;/strong&gt; Adds &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;node&lt;/code&gt;, &lt;code&gt;ripgrep&lt;/code&gt;, and more (check &lt;code&gt;02_install_brew_core.sh&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GUI Apps:&lt;/strong&gt; Installs VS Code, iTerm2, Docker, Raycast, etc. (see &lt;code&gt;06_install_apps_cask.sh&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shell Setup:&lt;/strong&gt; Installs Zsh with Oh My Zsh and plugins like &lt;code&gt;zsh-autosuggestions&lt;/code&gt;, &lt;code&gt;zsh-syntax-highlighting&lt;/code&gt;, and &lt;code&gt;autojump&lt;/code&gt; for a better terminal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python:&lt;/strong&gt; Sets up Miniconda for isolated Python environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git &amp;amp; SSH:&lt;/strong&gt; Configures Git and creates SSH keys for GitHub access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust:&lt;/strong&gt; Installs Rust and Cargo via &lt;code&gt;rustup&lt;/code&gt; for managing Rust projects and tools like &lt;code&gt;mdBook&lt;/code&gt; (see &lt;code&gt;09_install_rust.sh&lt;/code&gt;). * &lt;strong&gt;&lt;code&gt;Dotfiles (dot/):&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Includes &lt;code&gt;.zshrc&lt;/code&gt;, &lt;code&gt;.aliases&lt;/code&gt;, &lt;code&gt;.gitignore_global&lt;/code&gt;, and others.&lt;/li&gt;
&lt;li&gt;Symlinks these to your home directory so updates in the repo apply instantly.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;Docs (docs/):&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Offers guides on Homebrew, Zsh, Git, Conda, Docker, Rust, and macOS shortcuts.&lt;/li&gt;
&lt;li&gt;These guides are built into an online book using &lt;strong&gt;mdBook&lt;/strong&gt; (installed via script &lt;code&gt;09&lt;/code&gt;) and published automatically via GitHub Actions. It’s a straightforward package to get a working dev setup with minimal effort.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;It’s a straightforward package to get a working dev setup with minimal effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guides (Published via mdBook)
&lt;/h2&gt;

&lt;p&gt;The detailed guides for installation and tool usage are maintained as Markdown files in the &lt;code&gt;/docs&lt;/code&gt; directory. They are automatically built into an online book using &lt;strong&gt;mdBook&lt;/strong&gt; and published via GitHub Actions to GitHub Pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📚 &lt;a href="https://ravishan16.github.io/dotFile/" rel="noopener noreferrer"&gt;Access the Online Guides Here&lt;/a&gt;&lt;/strong&gt; You can also build and view the guides locally:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure you have Rust and &lt;code&gt;mdbook&lt;/code&gt; installed (script &lt;code&gt;09_install_rust.sh&lt;/code&gt; handles this).&lt;/li&gt;
&lt;li&gt;Navigate to the repository root directory.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;mdbook serve --open&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Guide Title&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/dotFile_Installation_Guide.html" rel="noopener noreferrer"&gt;dotFile: Installing Your Automated macOS Setup&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Step-by-step guide to set up your macOS environment with automation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/brew_user_guide.html" rel="noopener noreferrer"&gt;Managing Software with Homebrew 🍺&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Learn how to install, update, and manage software using Homebrew.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/ozsh_user_guide.html" rel="noopener noreferrer"&gt;Using Your Zsh Shell Superpowers ✨&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tips and tricks for using Zsh with Oh My Zsh, Powerlevel10k, and plugins.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/git_user_guide.html" rel="noopener noreferrer"&gt;Basic Git &amp;amp; GitHub Workflow&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A beginner-friendly guide to using Git and GitHub for version control.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/Conda_User_Guide.html" rel="noopener noreferrer"&gt;Managing Python with Conda (Miniconda)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Guide to managing Python environments and packages with Conda.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/docker_user_guide.html" rel="noopener noreferrer"&gt;Basic Docker Maintenance 🐳🧹&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Learn how to prune and clean up Docker containers, images, and volumes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/iterm_user_guide.html" rel="noopener noreferrer"&gt;Your Terminal Command Center (iTerm2) 💻&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Guide to customizing and using iTerm2 for an efficient terminal experience.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/rust_essentials_guide.html" rel="noopener noreferrer"&gt;Rust Essentials Guide 🦀&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Quick reference for essential Rust and Cargo commands.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/mac_cheatsheet.html" rel="noopener noreferrer"&gt;Mac Keyboard Shortcut Cheat Sheet ⚡️&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A handy list of keyboard shortcuts to boost your productivity on macOS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/mac_user_guide.html" rel="noopener noreferrer"&gt;Basic Mac Housekeeping 🧹✨&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tips for keeping your Mac clean, organized, and running smoothly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/custom_alias_userguide.html" rel="noopener noreferrer"&gt;Custom Shell Aliases &amp;amp; Functions 🛠️&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Learn how to create and use custom aliases and functions in your shell.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ravishan16.github.io/dotFile/redis.html" rel="noopener noreferrer"&gt;Redis Cheatsheet for macOS 🍎&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Quick commands and tips for installing, managing, and using Redis on macOS.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;How to Run It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s how to use the setup on your Mac:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Fork the Repo:&lt;/strong&gt; Go to &lt;code&gt;ravishan16/dotFile&lt;/code&gt; and fork it to your account.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clone It:&lt;/strong&gt; Pull it down to your machine:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/projects/git
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/git
git clone &amp;lt;your-fork-url&amp;gt; dotFile
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Set Up .env:&lt;/code&gt;&lt;/strong&gt; Copy the example and fill it in:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env_example .env &lt;span class="c"&gt;# Or touch .env if no example exists&lt;/span&gt;
nano .env
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Add:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GIT_HOME="~/projects/git" # Adjust if you cloned elsewhere
GIT_AUTHOR_NAME="Your Name"
GIT_AUTHOR_EMAIL="your.email@example.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Edit Dotfiles:&lt;/strong&gt; Tweak &lt;code&gt;dot/.zshrc&lt;/code&gt;, &lt;code&gt;dot/.aliases&lt;/code&gt;, or others to fit your needs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run the Script:&lt;/strong&gt; Go to the scripts folder and start it:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/git/dotFile/scripts
bash run_all.sh
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Pick "all" from the menu and enter your password when asked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopaslauap0dbbiq4woch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopaslauap0dbbiq4woch.png" alt="runall" width="800" height="1060"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finish Up:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Restart your terminal.&lt;/li&gt;
&lt;li&gt;Add the SSH key to GitHub (script will guide you).&lt;/li&gt;
&lt;li&gt;Log into any GUI apps like Docker.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After this, your Mac will have a configured dev environment, including Zsh with Oh My Zsh and plugins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Customize&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can adjust the setup to suit your workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Change Tools:&lt;/strong&gt; Edit &lt;code&gt;02_install_brew_core.sh&lt;/code&gt; for CLI tools or &lt;code&gt;06_install_apps_cask.sh&lt;/code&gt; for apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tune the Shell:&lt;/strong&gt; Modify &lt;code&gt;dot/.zshrc&lt;/code&gt; for Zsh settings or &lt;code&gt;dot/.p10k.zsh&lt;/code&gt; for the prompt (run &lt;code&gt;p10k configure&lt;/code&gt; to update it).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update Python:&lt;/strong&gt; Adjust &lt;code&gt;python/requirements.txt&lt;/code&gt; and re-run script &lt;code&gt;05&lt;/code&gt; for Conda packages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Forking the repo lets you make it your own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get Involved&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This setup works for me, but it’s better with input from others. Here’s how you can help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fork It:&lt;/strong&gt; Adapt it for yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submit Pull Requests:&lt;/strong&gt; Share fixes or new features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Issues:&lt;/strong&gt; Flag bugs or ideas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give Feedback:&lt;/strong&gt; Tell me what’s useful or what’s not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributions keep it practical and relevant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrapping Up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Automating your Mac setup cuts down on time and hassle. This tool gets you a consistent dev environment with Zsh, Oh My Zsh, and plugins included, so you can focus on coding.&lt;/p&gt;

&lt;p&gt;Check it out: &lt;a href="https://github.com/ravishan16/dotFile" rel="noopener noreferrer"&gt;ravishan16/dotFile&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If it helps or you’ve got thoughts, let me know. I’d like to see it grow into something developers can rely on.&lt;/p&gt;

</description>
      <category>developer</category>
      <category>automation</category>
      <category>macos</category>
      <category>devsetup</category>
    </item>
    <item>
      <title>Beyond the Hype: A Practical Guide to Cloud and Datacenter Decisions</title>
      <dc:creator>Pragmatic Programmer </dc:creator>
      <pubDate>Tue, 01 Apr 2025 22:47:55 +0000</pubDate>
      <link>https://dev.to/ravishan16/beyond-the-hype-a-practical-guide-to-cloud-and-datacenter-decisions-39da</link>
      <guid>https://dev.to/ravishan16/beyond-the-hype-a-practical-guide-to-cloud-and-datacenter-decisions-39da</guid>
      <description>&lt;p&gt;The technology infrastructure landscape is perpetually in flux. Recent attention on companies like CoreWeave&lt;a href="https://www.nasdaq.com/market-activity/ipos/financial-filings?dealId=1079716-113203" rel="noopener noreferrer"&gt;($CRWV)&lt;/a&gt;, particularly following their recent IPO and focus on bare-metal GPU rentals for AI/ML workloads, has brought the long-standing datacenter versus cloud computing debate back into focus. While &lt;strong&gt;hyperscalers&lt;/strong&gt; – massive-scale cloud providers like AWS and Azure known for their vast global infrastructure and comprehensive service suites – offer predominantly virtualization-based services (alongside bare-metal options), the demand for raw compute power highlights diverse infrastructure needs. This necessitates a clear-eyed look at the fundamental trade-offs involved, moving beyond marketing hype to examine the practical implications for different business requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Case for Cloud: Flexibility and Agility
&lt;/h3&gt;

&lt;p&gt;Cloud computing's primary appeal lies in its adaptability, especially valuable for projects facing uncertainty or fluctuating demands.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; The capacity to rapidly provision and de-provision resources (elasticity) is crucial during development, testing, and for applications with variable user load. This agility enables quick iteration and responsiveness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay-as-you-go Model:&lt;/strong&gt; This operational expenditure (OpEx) model eliminates the large upfront capital expenditure (CapEx) typically required for hardware procurement. However, for consistent, high-utilization workloads, these recurring costs can eventually surpass the total cost of ownership for dedicated hardware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Reach:&lt;/strong&gt; Major cloud providers maintain vast global networks of datacenters, enabling organizations to deploy services closer to end-users, potentially reducing latency and improving user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed Services:&lt;/strong&gt; Cloud platforms offer a wide array of managed services (databases, queues, machine learning platforms, etc.) that can accelerate development by abstracting away underlying infrastructure management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Case for Datacenters: Control and Predictability
&lt;/h3&gt;

&lt;p&gt;For organizations with stable, predictable workloads, or those with specific performance, security, or regulatory requirements, traditional or co-located datacenters offer distinct advantages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; Direct ownership and management of hardware allow for deep customization of network and server configurations, potentially optimizing for specific performance characteristics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Efficiency (Long-Term):&lt;/strong&gt; For sustained, predictable workloads, the initial CapEx for hardware and facilities can lead to lower long-term costs compared to equivalent, continuously running cloud resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable Performance:&lt;/strong&gt; Dedicated hardware can offer more consistent performance characteristics compared to multi-tenant virtualized environments, although cloud providers also offer dedicated instances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Residency &amp;amp; Security:&lt;/strong&gt; Direct control can simplify meeting strict data residency requirements and allows organizations to implement bespoke security measures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cloud First, Datacenter Next: A Pragmatic Approach
&lt;/h3&gt;

&lt;p&gt;Launching a new product—whether at a startup or within a big company—comes with a big challenge: predicting compute needs. How much processing power, storage, or bandwidth will you require? Guessing wrong can waste time and money, and locking into hardware early limits your ability to adapt. A smarter move? Start in the cloud, scale as you go, and optimize with a datacenter or tailored setup once you’ve got solid data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Forecasting Is Tough:&lt;/strong&gt; Estimating workloads for an untested product is a shot in the dark. Customer adoption, usage patterns, and shifting requirements defy precise planning. Build a datacenter too big, and you’re stuck with unused capacity; too small, and performance tanks when demand spikes. This uncertainty makes traditional infrastructure risky for new ventures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud as an Initial Platform:&lt;/strong&gt; The cloud's elasticity and OpEx model mitigate this initial risk, allowing teams to scale resources based on &lt;em&gt;actual&lt;/em&gt; usage data and user feedback, rather than projections. This facilitates experimentation and data gathering without significant upfront investment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data-Driven Transition:&lt;/strong&gt; Once a product matures and usage patterns stabilize, the data collected during the cloud phase enables informed decisions about long-term infrastructure. This might involve:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Optimizing cloud usage (right-sizing instances, using reserved instances/savings plans).&lt;/li&gt;
&lt;li&gt; Migrating specific, stable workloads to dedicated hardware (in a datacenter or co-location facility).&lt;/li&gt;
&lt;li&gt; Adopting a hybrid model, balancing cloud flexibility with datacenter control/cost-efficiency.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A notable example comes from Amazon's Prime Video Video Quality Analysis team. As detailed on their tech blog, they achieved significant cost savings (reportedly over 90% &lt;em&gt;for that specific service&lt;/em&gt;) by re-architecting their audio/video monitoring service, moving components from a serverless approach (using Step Functions and distributed Lambda functions) to a more consolidated model running on EC2 and ECS, once usage patterns and bottlenecks were well understood.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Considerations and Caveats
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;Cloud Consideration&lt;/th&gt;
&lt;th&gt;Datacenter Consideration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Variable OpEx can spiral without governance; potential for higher TCO on steady loads.&lt;/td&gt;
&lt;td&gt;Significant CapEx &amp;amp; lead times; potentially lower TCO long-term for steady loads.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scalability &amp;amp; Agility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Elastic scaling; complexity can increase with scale/abstractions.&lt;/td&gt;
&lt;td&gt;Constrained by physical installs &amp;amp; planning cycles; less immediate elasticity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maintenance &amp;amp; Operations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Provider handles underlying infrastructure maintenance.&lt;/td&gt;
&lt;td&gt;Requires dedicated resources &amp;amp; expertise for hardware/software upkeep, facilities management.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Control &amp;amp; Customization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited by provider offerings and abstraction layers.&lt;/td&gt;
&lt;td&gt;Full hardware/software control allows deep customization.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security &amp;amp; Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Shared responsibility model; requires careful customer configuration &amp;amp; oversight.&lt;/td&gt;
&lt;td&gt;Full responsibility; direct control can simplify meeting specific residency or security requirements.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Platform Dependence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Potential vendor lock-in via proprietary services complicates migration.&lt;/td&gt;
&lt;td&gt;Less platform lock-in, but dependent on specific hardware/software choices; migration still involves effort.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Real-World Perspectives
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prime Video (Monitoring Service):&lt;/strong&gt; As mentioned, their optimization illustrates how understanding specific workload characteristics can drive significant cost savings, sometimes involving shifts &lt;em&gt;within&lt;/em&gt; or &lt;em&gt;away from&lt;/em&gt; certain cloud architectures. &lt;br&gt;
&lt;a href="https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90" rel="noopener noreferrer"&gt;Prime Vidoe Tech Blog&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.searchlogistics.com/learn/statistics/amazon-prime-statistics/" rel="noopener noreferrer"&gt;Amazon Prime Statistics&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;37signals (Basecamp/Hey):&lt;/strong&gt; Their public decision to repatriate workloads from the cloud, citing substantial cost savings ($7 million over five years projected), underscores that for companies with predictable usage and the necessary scale/expertise, owning hardware can be significantly more economical.&lt;a href="https://world.hey.com/dhh/we-have-left-the-cloud-251760fb" rel="noopener noreferrer"&gt;Hey Blog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bare Metal Cloud (e.g., CoreWeave, Equinix Metal):&lt;/strong&gt; These providers aim to bridge the gap, offering the raw performance and control closer to dedicated hardware but with cloud-like provisioning and OpEx models. They are particularly appealing for several use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Foundational Layer:&lt;/strong&gt; Serving as automated hardware for building private clouds or running specific orchestration layers (like VMWare, OpenStack, Kubernetes).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-Performance Needs:&lt;/strong&gt; Addressing sustained, predictable performance requirements often best met by dedicated, single-tenant hardware without a virtualization layer (common in HPC, Gaming, AI/Big Data, Finance).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security &amp;amp; Isolation:&lt;/strong&gt; Meeting strict trust, privacy, or regulatory mandates that necessitate dedicated, isolated environments rather than shared multi-tenant cloud resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialized Requirements:&lt;/strong&gt; Supporting applications needing specific hardware features (GPUs, accelerators, encryption offload) or ultra-low latency not readily available or performant in standard virtualized environments (e.g., video transcoding, AR/VR, Telco workloads, AI/ML training/inference).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion: Context is Key
&lt;/h3&gt;

&lt;p&gt;The choice between cloud, datacenter, or a hybrid approach is not universally fixed but depends heavily on an organization's specific technical requirements, business goals, workload characteristics, budget, risk tolerance, and in-house expertise. A critical evaluation of the trade-offs, informed by real-world data and strategic planning, is essential. Often, a hybrid or multi-cloud strategy emerges as the most practical solution, leveraging the best of both worlds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;p&gt;This blog does not examine CoreWeave’s valuation, financial performance, or specific business metrics. Rather, CoreWeave serves as a real-world example to facilitate a broader discussion on bare metal infrastructure versus cloud services. The emphasis is on technical and strategic aspects rather than financial details.&lt;/p&gt;

</description>
      <category>cloudcomputing</category>
      <category>datacenter</category>
      <category>tco</category>
      <category>baremetal</category>
    </item>
    <item>
      <title>Flatfile + DBeaver + SQL = Productivity</title>
      <dc:creator>Pragmatic Programmer </dc:creator>
      <pubDate>Tue, 26 May 2020 00:21:38 +0000</pubDate>
      <link>https://dev.to/ravishan16/flatfile-dbeaver-sql-productivity-4bp</link>
      <guid>https://dev.to/ravishan16/flatfile-dbeaver-sql-productivity-4bp</guid>
      <description>&lt;p&gt;Flat files come in different shapes and sizes. Excel is powerful to analyze and manipulate data. It can get overwhelming for complex analysis. If you want to run SQL queries on large flat files, typically, you import the data into a PostgreSQL/SQLite/MySQL or database of your preference. Another useful tool for quick analysis is using &lt;a href="https://DBeaver.io/" rel="noopener noreferrer"&gt;DBeaver&lt;/a&gt;, a popular database developer tool. We can use DBeaver's CSV connection and custom shell functions to be more productive.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ravishan16/flatfile_dbeaver" rel="noopener noreferrer"&gt;Github Repository Link&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Usecases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;query filter/group by or run simple SQL operation on a CSV or any delimited file&lt;/li&gt;
&lt;li&gt;Don't want to create a new DBeaver connection for every file/folder&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;create a folder that can be used for flat files&lt;/li&gt;
&lt;li&gt;create child folders CSV, pipe, TSV .... so independent connections can be created for different file types in DBeaver. Here is my folder structure
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;├── data
│   ├── csv
│   │   └── dataset_csv_dat.csv
│   └── pipe
│       └── test_pipe_delimited_dat.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  One Time Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;create DBeaver connection for csv and set the path to data/csv&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkdotj696hlskrn32j65.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbkdotj696hlskrn32j65.gif" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;create DBeaver connection for pipe or any delimited file type, set the path to data/pipe(or the format of your choice). Update the separator in "Driver Properties."&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhi7ktayrhvisbi7oqpu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhi7ktayrhvisbi7oqpu.gif" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add this shell function to ~/.zshrc or ~/.bash_profile. This function takes two parameters parameter 1  is the filetype (match the child folders) and the second parameter is file path. When executed the function copies the file to the child folder (parameter one) and renames the file with a .csv extension&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#usage setdb pipe foo.dat or setdb bar.csv&lt;/span&gt;
&lt;span class="c"&gt;#open CSV/TSV/PIPE delimited file in DBeaver&lt;/span&gt;
&lt;span class="c"&gt;#set your DIRECTORY to folder where you wan to root directory where you want to store csv/tsv&lt;/span&gt;
&lt;span class="c"&gt;# ARgument 1 is csv/tsv/pipe you also should create a folder under the db_root for csv/pipe or what ever delimiter&lt;/span&gt;
&lt;span class="k"&gt;function &lt;/span&gt;setdb&lt;span class="o"&gt;(){&lt;/span&gt;
    &lt;span class="nv"&gt;db_root&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;flatfile_dbeaver/data
    &lt;span class="c"&gt;#Take file basename&lt;/span&gt;
    &lt;span class="nv"&gt;orig_filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt; &lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="c"&gt;#replace . with _&lt;/span&gt;
    &lt;span class="nv"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;orig_filename&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="s2"&gt;"."&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="s2"&gt;"_"&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
    &lt;span class="c"&gt;#copy file to csv/tsv/pipe folder under dbroot based on $1 paramter&lt;/span&gt;
    &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"cp &lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$db_root&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$filename&lt;/span&gt;&lt;span class="s2"&gt;.csv"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage for a csv file
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Let's say we get a CSV file foo.csv. Run the below setdb command. The function copies the foo.csv as foo_csv.csv to data/csv
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; setdb csv foo.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Refresh the CSV file connection in DBeaver the new file will show as a table under the CSV connection&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Usage for a pipe-delimited file
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Let's say we get a pipe-delimited file bar.txt Run the below setdb command, The function copies the bar.txt as bar_txt.csv to flatfile_dbeaver/data/pipe. To keep it simple for the DBeaver connection we use .csv you can change the extension the connection looks for in the Driver Properties and modify the setdb function accordingly
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; setdb pipe bar.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Refresh the PIPE file connection in DBeaver the new file will show as a new table under the PIPE connection
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj22dbbs3z803uyccb35r.gif" width="800" height="493"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Thank You!!
&lt;/h3&gt;

</description>
      <category>sql</category>
      <category>dbeaver</category>
      <category>flatfile</category>
      <category>database</category>
    </item>
    <item>
      <title>brew redis on mac</title>
      <dc:creator>Pragmatic Programmer </dc:creator>
      <pubDate>Mon, 25 May 2020 22:59:53 +0000</pubDate>
      <link>https://dev.to/ravishan16/brew-redis-on-mac-1ni8</link>
      <guid>https://dev.to/ravishan16/brew-redis-on-mac-1ni8</guid>
      <description>&lt;p&gt;Redis is a powerful in-memory datastore widely used for caching, pub/sub messaging, and more. This guide provides quick commands and tips for installing, managing, and using Redis on macOS.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default Port:&lt;/strong&gt; Redis runs on port &lt;code&gt;6379&lt;/code&gt; by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs Location:&lt;/strong&gt; Check logs for debugging in &lt;code&gt;/usr/local/var/log/redis.log&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuration File:&lt;/strong&gt; The default configuration file is located at &lt;code&gt;/usr/local/etc/redis.conf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access Control:&lt;/strong&gt; Use the &lt;a href="https://redis.io/topics/acl" rel="noopener noreferrer"&gt;ACL Guide&lt;/a&gt; to configure users and permissions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop Redis Safely:&lt;/strong&gt; Always stop Redis using &lt;code&gt;brew services stop redis&lt;/code&gt; or &lt;code&gt;redis-cli shutdown&lt;/code&gt; to avoid data loss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redis CLI Help:&lt;/strong&gt; Run &lt;code&gt;redis-cli --help&lt;/code&gt; to see all available commands.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Useful Commands
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Connect to Redis
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli &lt;span class="nt"&gt;-h&lt;/span&gt; &amp;lt;host&amp;gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &amp;lt;port&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ping Redis
&lt;/h3&gt;

&lt;p&gt;Check if Redis is running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli ping
&lt;span class="c"&gt;# Output: PONG&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  List Users
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli ACL LIST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Monitor Commands
&lt;/h3&gt;

&lt;p&gt;Log all commands received by Redis in real-time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; redis-cli monitor
OK
1590445706.871636 &lt;span class="o"&gt;[&lt;/span&gt;0 127.0.0.1:52583] &lt;span class="s2"&gt;"ping"&lt;/span&gt;
1590445716.910679 &lt;span class="o"&gt;[&lt;/span&gt;0 127.0.0.1:52642] &lt;span class="s2"&gt;"flushall"&lt;/span&gt;
1590445814.170701 &lt;span class="o"&gt;[&lt;/span&gt;0 127.0.0.1:53107] &lt;span class="s2"&gt;"incr"&lt;/span&gt; &lt;span class="s2"&gt;"visitor"&lt;/span&gt;
1590445893.336228 &lt;span class="o"&gt;[&lt;/span&gt;0 127.0.0.1:53483] &lt;span class="s2"&gt;"publish"&lt;/span&gt; &lt;span class="s2"&gt;"channel"&lt;/span&gt; &lt;span class="s2"&gt;"hi"&lt;/span&gt;
1590445914.672421 &lt;span class="o"&gt;[&lt;/span&gt;0 127.0.0.1:53591] &lt;span class="s2"&gt;"subscribe"&lt;/span&gt; &lt;span class="s2"&gt;"channel1"&lt;/span&gt;
1590445925.539757 &lt;span class="o"&gt;[&lt;/span&gt;0 127.0.0.1:53639] &lt;span class="s2"&gt;"publish"&lt;/span&gt; &lt;span class="s2"&gt;"channel"&lt;/span&gt; &lt;span class="s2"&gt;"hey"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  View Continuous Stats
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; redis-cli &lt;span class="nt"&gt;--stat&lt;/span&gt;
&lt;span class="nt"&gt;-------&lt;/span&gt; data &lt;span class="nt"&gt;------&lt;/span&gt; &lt;span class="nt"&gt;---------------------&lt;/span&gt; load &lt;span class="nt"&gt;--------------------&lt;/span&gt; - child -
keys       mem      clients blocked requests            connections          
1          1.02M    1       0       0 &lt;span class="o"&gt;(&lt;/span&gt;+0&lt;span class="o"&gt;)&lt;/span&gt;              1           
1          1.02M    1       0       1 &lt;span class="o"&gt;(&lt;/span&gt;+0&lt;span class="o"&gt;)&lt;/span&gt;              1           
1          1.02M    1       0       2 &lt;span class="o"&gt;(&lt;/span&gt;+1&lt;span class="o"&gt;)&lt;/span&gt;              1           
1          1.02M    1       0       3 &lt;span class="o"&gt;(&lt;/span&gt;+1&lt;span class="o"&gt;)&lt;/span&gt;              1           
1          1.02M    1       0       4 &lt;span class="o"&gt;(&lt;/span&gt;+1&lt;span class="o"&gt;)&lt;/span&gt;              1           

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Flush All Data
&lt;/h3&gt;

&lt;p&gt;Clear all keys in the current database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli flushall
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Increment a Key
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli incr &amp;lt;key&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Publish a Message
&lt;/h3&gt;

&lt;p&gt;Send a message to a channel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;redis-cli publish &amp;lt;channel&amp;gt; &amp;lt;message&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;h3&gt;
  
  
  Install Redis via Homebrew
&lt;/h3&gt;

&lt;p&gt;The easiest way to install Redis on macOS is using &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Starting and Stopping Redis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start Redis as a Foreground Process
&lt;/h3&gt;

&lt;p&gt;Run the Redis server in the foreground:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; redis-server

15594:C 25 May 2020 18:08:37.005 &lt;span class="c"&gt;# oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo&lt;/span&gt;
15594:C 25 May 2020 18:08:37.005 &lt;span class="c"&gt;# Redis version=6.0.3, bits=64, commit=00000000, modified=0, pid=15594, just started&lt;/span&gt;
15594:C 25 May 2020 18:08:37.005 &lt;span class="c"&gt;# Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf&lt;/span&gt;
15594:M 25 May 2020 18:08:37.006 &lt;span class="k"&gt;*&lt;/span&gt; Increased maximum number of open files to 10032 &lt;span class="o"&gt;(&lt;/span&gt;it was originally &lt;span class="nb"&gt;set &lt;/span&gt;to 8192&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
                _._                                                  
           _.-&lt;span class="sb"&gt;``&lt;/span&gt;__ &lt;span class="s1"&gt;''&lt;/span&gt;-._                                             
      _.-&lt;span class="sb"&gt;``&lt;/span&gt;    &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;  &lt;span class="sb"&gt;`&lt;/span&gt;_.  &lt;span class="s1"&gt;''&lt;/span&gt;-._           Redis 6.0.3 &lt;span class="o"&gt;(&lt;/span&gt;00000000/0&lt;span class="o"&gt;)&lt;/span&gt; 64 bit
  .-&lt;span class="sb"&gt;``&lt;/span&gt; .-&lt;span class="sb"&gt;```&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="sb"&gt;```&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;    _.,_ &lt;span class="s1"&gt;''&lt;/span&gt;-._                                   
 &lt;span class="o"&gt;(&lt;/span&gt;    &lt;span class="s1"&gt;'      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; _.-&lt;span class="s1"&gt;'|     Port: 6379
 |    `-._   `._    /     _.-'&lt;/span&gt;    |     PID: 15594
  &lt;span class="sb"&gt;`&lt;/span&gt;-._    &lt;span class="sb"&gt;`&lt;/span&gt;-._  &lt;span class="sb"&gt;`&lt;/span&gt;-./  _.-&lt;span class="s1"&gt;'    _.-'&lt;/span&gt;                                   
 |&lt;span class="sb"&gt;`&lt;/span&gt;-._&lt;span class="sb"&gt;`&lt;/span&gt;-._    &lt;span class="sb"&gt;`&lt;/span&gt;-.__.-&lt;span class="s1"&gt;'    _.-'&lt;/span&gt;_.-&lt;span class="s1"&gt;'|                                  
 |    `-._`-._        _.-'&lt;/span&gt;_.-&lt;span class="s1"&gt;'    |           http://redis.io        
  `-._    `-._`-.__.-'&lt;/span&gt;_.-&lt;span class="s1"&gt;'    _.-'&lt;/span&gt;                                   
 |&lt;span class="sb"&gt;`&lt;/span&gt;-._&lt;span class="sb"&gt;`&lt;/span&gt;-._    &lt;span class="sb"&gt;`&lt;/span&gt;-.__.-&lt;span class="s1"&gt;'    _.-'&lt;/span&gt;_.-&lt;span class="s1"&gt;'|                                  
 |    `-._`-._        _.-'&lt;/span&gt;_.-&lt;span class="s1"&gt;'    |                                  
  `-._    `-._`-.__.-'&lt;/span&gt;_.-&lt;span class="s1"&gt;'    _.-'&lt;/span&gt;                                   
      &lt;span class="sb"&gt;`&lt;/span&gt;-._    &lt;span class="sb"&gt;`&lt;/span&gt;-.__.-&lt;span class="s1"&gt;'    _.-'&lt;/span&gt;                                       
          &lt;span class="sb"&gt;`&lt;/span&gt;-._        _.-&lt;span class="s1"&gt;'                                           
              `-.__.-'&lt;/span&gt;                                               

15594:M 25 May 2020 18:08:37.007 &lt;span class="c"&gt;# Server initialized&lt;/span&gt;
15594:M 25 May 2020 18:08:37.008 &lt;span class="k"&gt;*&lt;/span&gt; Ready to accept connections
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To exit:&lt;/strong&gt; Press &lt;code&gt;Ctrl + C&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Start/Stop Redis as a Background Service
&lt;/h3&gt;

&lt;p&gt;Use Homebrew services to manage Redis as a background service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew services start redis   &lt;span class="c"&gt;# Start Redis&lt;/span&gt;
brew services stop redis    &lt;span class="c"&gt;# Stop Redis&lt;/span&gt;
brew services restart redis &lt;span class="c"&gt;# Restart Redis&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check Running Services
&lt;/h3&gt;

&lt;p&gt;List all services managed by Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew services list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Edit Redis Configuration
&lt;/h3&gt;

&lt;p&gt;To customize Redis settings, edit the configuration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/usr/local/etc/redis.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;After making changes, restart Redis:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  brew services restart redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more details on configuration, see the &lt;a href="https://redis.io/topics/config" rel="noopener noreferrer"&gt;Redis Configuration Guide&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Useful Aliases
&lt;/h2&gt;

&lt;p&gt;Add these aliases to your &lt;code&gt;~/.zshrc&lt;/code&gt; or &lt;code&gt;~/.bash_profile&lt;/code&gt; for quick Redis management:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;redis-start&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"brew services start redis"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;redis-stop&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"brew services stop redis"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;redis-restart&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"brew services restart redis"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;redis-monitor&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"redis-cli monitor"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Redis is now ready to supercharge your development workflow! 🚀 For more commands and advanced usage, check the &lt;a href="https://redis.io/topics/rediscli" rel="noopener noreferrer"&gt;Redis CLI Documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>redis</category>
      <category>setup</category>
      <category>brew</category>
      <category>macos</category>
    </item>
  </channel>
</rss>
