<?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[Dev Almanac]]></title><description><![CDATA[💻 Full-Stack Developer  🏋️‍♂️ Trying to stay fit 😊 Full-time nerd]]></description><link>https://blog.vsrinath.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 16 May 2026 12:01:14 GMT</lastBuildDate><atom:link href="https://blog.vsrinath.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Fedora 43 for Rails: Quickstart to a Rails‑Ready Dev Machine]]></title><description><![CDATA[This short guide helps you get a Fedora 43 workstation ready for Rails development. It covers updating your system, enabling repositories needed by AppImages and other third‑party software, and instal]]></description><link>https://blog.vsrinath.dev/fedora-43-for-rails-quickstart-to-a-rails-ready-dev-machine</link><guid isPermaLink="true">https://blog.vsrinath.dev/fedora-43-for-rails-quickstart-to-a-rails-ready-dev-machine</guid><category><![CDATA[Linux]]></category><category><![CDATA[setup]]></category><dc:creator><![CDATA[Srinath]]></dc:creator><pubDate>Tue, 07 Apr 2026 05:46:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/5c95f1022517c6b25e7bbd54/4413a63d-9daa-4c60-8b31-edb26f4c4a07.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This short guide helps you get a Fedora 43 workstation ready for Rails development. It covers updating your system, enabling repositories needed by AppImages and other third‑party software, and installing a minimal developer toolchain (Ruby support, build tools, PostgreSQL headers, Docker) plus a few useful CLI apps and GNOME extensions so you can start building Rails apps quickly.</p>
<h3>Run and install updates</h3>
<pre><code class="language-plaintext">sudo dnf update -y
</code></pre>
<h3>Enable Terra repo for access to wide variety of packages</h3>
<pre><code class="language-plaintext">sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
</code></pre>
<h3>Add packages required for AppImages</h3>
<pre><code class="language-plaintext">https://github.com/AppImage/AppImageKit/wiki/FUSE
</code></pre>
<h2>Gnome Extensions</h2>
<p>Install the <strong>gnome-browser-connector</strong> to install extensions directly from <a href="http://extensions.gnome.org">extensions.gnome.org</a></p>
<pre><code class="language-plaintext">sudo dnf install gnome-browser-connector
</code></pre>
<p><a href="https://extensions.gnome.org/extension/2645/brightness-control-using-ddcutil/">https://extensions.gnome.org/extension/2645/brightness-control-using-ddcutil/</a></p>
<p><a href="https://extensions.gnome.org/extension/8675/automatic-theme-switcher/">https://extensions.gnome.org/extension/8675/automatic-theme-switcher/</a></p>
<h2>Terminal Setup</h2>
<h3>Install Zsh and change shell to Zsh</h3>
<pre><code class="language-plaintext">sudo dnf install -y zsh
grep username /etc/passwd
chsh -s $(which zsh)
grep username /etc/passwd
</code></pre>
<h3>Install Starship</h3>
<pre><code class="language-plaintext">https://starship.rs/
</code></pre>
<h3>CLI Apps:</h3>
<p>Neovim</p>
<pre><code class="language-plaintext">sudo dnf install -y neovim python3-neovim
</code></pre>
<p>Zoxide: cd command on steroids</p>
<p><a href="https://github.com/ajeetdsouza/zoxide">https://github.com/ajeetdsouza/zoxide</a></p>
<p>Atuin CLI: command history search on steroids</p>
<p><a href="https://docs.atuin.sh/cli/guide/installation/">https://docs.atuin.sh/cli/guide/installation/</a></p>
<h2>Software Development Tools:</h2>
<p>Claude Code</p>
<p>Zed</p>
<p>T3 Code</p>
<p>Firefox extensions:</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/always-right/">https://addons.mozilla.org/en-US/firefox/addon/always-right/</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Macbook Setup]]></title><description><![CDATA[Quality of Life Tools

Raycast - Raycast is a highly extendable spotlight and Alfred replacement.

Choosy - This app opens links in the browser of your choice, you sometimes want different links to open in different browsers.

1Password - My favorite...]]></description><link>https://blog.vsrinath.dev/macbook-setup</link><guid isPermaLink="true">https://blog.vsrinath.dev/macbook-setup</guid><category><![CDATA[setup]]></category><category><![CDATA[macbook]]></category><category><![CDATA[macOS]]></category><dc:creator><![CDATA[Srinath]]></dc:creator><pubDate>Sun, 05 Nov 2023 06:46:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/a4Nid9fLLlo/upload/v1664657740337/VkytefZTl.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-quality-of-life-tools">Quality of Life Tools</h3>
<ul>
<li><p><a target="_blank" href="https://www.raycast.com/">Raycast</a> - Raycast is a highly extendable spotlight and Alfred replacement.</p>
</li>
<li><p><a target="_blank" href="https://choosy.app/">Choosy</a> - This app opens links in the browser of your choice, you sometimes want different links to open in different browsers.</p>
</li>
<li><p><a target="_blank" href="https://1password.com/">1Password</a> - My favorite password manager</p>
</li>
<li><p><a target="_blank" href="http://brew.sh">Homebrew</a> - My preferred way to install tools on my Macbook</p>
</li>
<li><p><a target="_blank" href="https://mpv.io/installation/">mpv</a> - Fabulous video player which does a good job</p>
</li>
<li><p>Better Display - <a target="_blank" href="https://github.com/waydabber/BetterDisplay">https://github.com/waydabber/BetterDisplay</a></p>
</li>
<li><p><a target="_blank" href="https://apphousekitchen.com/">Aldente Pro</a> - Mac Charge Limiter</p>
</li>
<li><p>Lunar - Fabulous display brightness manager</p>
</li>
<li><p><a target="_blank" href="https://github.com/zenangst/Gray">https://github.com/zenangst/Gray</a></p>
</li>
<li><p><a target="_blank" href="https://cryptomator.org/">https://cryptomator.org/</a> - Encrypting backups to Dropbox</p>
</li>
<li><p><a target="_blank" href="https://obsidian.md/">https://obsidian.md/</a> - Note taking</p>
</li>
<li><p>Arc - A different take on a web browser based on chromium</p>
</li>
<li><p>Firefox - My favourite browser, extremely customizable</p>
</li>
</ul>
<h3 id="heading-developer-tools">Developer Tools</h3>
<ul>
<li><p>SQL Client: Beekeeper Studio/Postico 2</p>
</li>
<li><p>Rubymine</p>
</li>
<li><p>Neovim</p>
</li>
<li><p><a target="_blank" href="https://github.com/alacritty/alacritty">https://github.com/alacritty/alacritty</a> - GPU Accelerated terminal</p>
</li>
</ul>
<h3 id="heading-fonts">Fonts</h3>
<ul>
<li><p><a target="_blank" href="https://indestructibletype.com/Drafting/">Drafting Mono</a> - I quite enjoy using this as a terminal font</p>
</li>
<li><p>0xProto Nerd Font</p>
</li>
<li><p>Dank Mono</p>
</li>
<li><p>MonoLisa</p>
</li>
</ul>
<h3 id="heading-cli-utilities">CLI Utilities</h3>
<ul>
<li><p><a target="_blank" href="https://github.com/dandavison/delta">Delta</a> - Brings in fabulous git diff functionality.</p>
</li>
<li><p>fd - helps search for files from the terminal</p>
</li>
<li><p>ripgrep - faster grep</p>
</li>
</ul>
<h3 id="heading-browser-extensions">Browser Extensions</h3>
<p>Chrome</p>
<ul>
<li><p><a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/raindropio/">raindrop.io</a> - fabulous bookmark manager</p>
</li>
<li><p>uOrigin Block</p>
</li>
</ul>
<p>Firefox</p>
<ul>
<li><p>Containers - helps isolate websites</p>
</li>
<li><p><a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/raindropio/">raindrop.io</a> - fabulous bookmark manager</p>
</li>
<li><p><a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/">UOrigin Block</a> - Adblock</p>
</li>
<li><p>Sponsorblock</p>
</li>
<li><p><a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/always-right/">Always Right</a> - Opens new tab right next to the current tab</p>
</li>
<li><p><a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/right-links/">Right Links WE</a> - Open links in a new tab by right-clicking on them</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Rolling back Rails Database migrations]]></title><description><![CDATA[I ran into a situation at work where I had to roll back Rails migrations to get my database back into a usable state.
rails db:migrate:status - This shows us the current status of our migrations.




StatusMigration IDMigration



up20350319081542Fir...]]></description><link>https://blog.vsrinath.dev/rolling-back-rails-database-migrations</link><guid isPermaLink="true">https://blog.vsrinath.dev/rolling-back-rails-database-migrations</guid><category><![CDATA[Rails]]></category><category><![CDATA[activerecord]]></category><dc:creator><![CDATA[Srinath]]></dc:creator><pubDate>Fri, 15 Sep 2023 10:28:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/5QvsD0AaXPk/upload/d66ab29b5e8c0e1244271567d43b892c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I ran into a situation at work where I had to roll back Rails migrations to get my database back into a usable state.</p>
<p><code>rails db:migrate:status</code> - This shows us the current status of our migrations.</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Status</td><td>Migration ID</td><td>Migration</td></tr>
</thead>
<tbody>
<tr>
<td>up</td><td><code>20350319081542</code></td><td>First migration</td></tr>
<tr>
<td>up</td><td><code>20350419081542</code></td><td>Second migration</td></tr>
<tr>
<td>up</td><td><code>203504519081542</code></td><td>Third migration</td></tr>
</tbody>
</table>
</div><p><code>rails db:rollback</code> - This lets you roll back one migration at a time.</p>
<p><code>rails db:migrate:down VERSION=20350419081542</code> - This rolls back this specific migration file.</p>
]]></content:encoded></item><item><title><![CDATA[How to deploy Rails to Fly.io with Supabase DB]]></title><description><![CDATA[Install flyctl command line utility as shown here

Sign in to Fly.io by running fly auth login

Run flyctl launch from the rails app directory as shown here

Remember to answer No when flyctl launch wizard asks if you want to spin up a Postgres DB as...]]></description><link>https://blog.vsrinath.dev/how-to-deploy-rails-to-flyio-with-supabase-db</link><guid isPermaLink="true">https://blog.vsrinath.dev/how-to-deploy-rails-to-flyio-with-supabase-db</guid><category><![CDATA[fly.io]]></category><category><![CDATA[supabase]]></category><category><![CDATA[Ruby on Rails]]></category><category><![CDATA[deployment]]></category><category><![CDATA[Ruby]]></category><dc:creator><![CDATA[Srinath]]></dc:creator><pubDate>Thu, 02 Feb 2023 17:43:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/5ifFHbV-elk/upload/487297d99577e56181b6979560351354.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ul>
<li><p>Install <code>flyctl</code> command line utility as shown <a target="_blank" href="https://fly.io/docs/hands-on/install-flyctl/">here</a></p>
</li>
<li><p>Sign in to Fly.io by running <code>fly auth login</code></p>
</li>
<li><p>Run <code>flyctl launch</code> from the rails app directory as shown <a target="_blank" href="https://fly.io/docs/hands-on/launch-app/">here</a></p>
<ul>
<li>Remember to answer <strong>No</strong> when flyctl launch wizard asks if you want to spin up a Postgres DB as part of the launch process since we plan on using Supabase for that.</li>
</ul>
</li>
<li><p>Your app should be would be up, you can verify that in the Fly.io dashboard.</p>
</li>
<li><p>Go to Supabase and spin up a database if you've not already done that. Once that DB is up, go to the Database Section of Project Settings, and get the connection String we'll need that later. It'll look something like this:</p>
<pre><code class="lang-bash">  postgres://postgres:YOUR-PASSWORD@db.soemthing.supabase.co:6543/mydbname
</code></pre>
</li>
<li><p>Once you have this we've to make two changes to our current setup.</p>
<ul>
<li><p>Go to <code>database.yml</code> and make sure the database URL for the production environment points to <code>ENV['DATABASE_URL']</code> as shown below. We need to do this to make Fly.io take the Supabase DB URL</p>
<ul>
<li><pre><code class="lang-yaml">  <span class="hljs-attr">default:</span> <span class="hljs-meta">&amp;default</span>
    <span class="hljs-attr">adapter:</span> <span class="hljs-string">postgresql</span>
    <span class="hljs-attr">encoding:</span> <span class="hljs-string">unicode</span>

  <span class="hljs-attr">production:</span>
    <span class="hljs-string">&lt;&lt;:</span> <span class="hljs-meta">*default</span>
    <span class="hljs-attr">url:</span> &lt;%=<span class="ruby"> ENV[<span class="hljs-string">"DATABASE_URL"</span>] </span>%&gt;
</code></pre>
</li>
</ul>
</li>
<li><p>Now for the final step, we need to add the Supabase DB Connection string as a fly.io app secret. We do that as shown here <a target="_blank" href="https://fly.io/docs/flyctl/secrets/">https://fly.io/docs/flyctl/secrets/</a></p>
<ul>
<li><pre><code class="lang-bash">  flyctl secrets <span class="hljs-built_in">set</span> DATABASE_URL=postgres://postgres:YOUR-PASSWORD@db.soemthing.supabase.co:66543/mydbname
</code></pre>
</li>
</ul>
</li>
<li><p>The reason we're setting DATABASE_URL is that Rails Apps automatically connect to the Database specified in DATABASE_URL as mentioned <a target="_blank" href="https://fly.io/docs/postgres/connecting/app-connection-examples/#connecting-with-rails">here</a></p>
</li>
</ul>
</li>
</ul>
]]></content:encoded></item></channel></rss>