<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Syed Aslam</title><description>This blog is about engineering decisions in mature Rails codebases. I write from experience—debugging production issues, simplifying systems, and choosing boring tools that survive.</description><link>https://syedaslam.com/</link><item><title>A Preflight for Rails Upgrades</title><link>https://syedaslam.com/posts/a-preflight-for-rails-upgrades/</link><guid isPermaLink="true">https://syedaslam.com/posts/a-preflight-for-rails-upgrades/</guid><description>Why understanding the dependency, execution, and behavioral surfaces of a Rails system makes upgrades more predictable.</description><pubDate>Tue, 14 Apr 2026 13:00:00 GMT</pubDate></item><item><title>The Signals That Predict a Difficult Rails Upgrade</title><link>https://syedaslam.com/posts/the-signals-that-predict-a-difficult-rails-upgrade/</link><guid isPermaLink="true">https://syedaslam.com/posts/the-signals-that-predict-a-difficult-rails-upgrade/</guid><description>The structural signals that make Rails upgrades hard before the upgrade work even begins.</description><pubDate>Fri, 03 Apr 2026 13:30:00 GMT</pubDate></item><item><title>The Upgrade Anxiety Curve in Mature Systems</title><link>https://syedaslam.com/posts/the-upgrade-anxiety-in-mature-systems/</link><guid isPermaLink="true">https://syedaslam.com/posts/the-upgrade-anxiety-in-mature-systems/</guid><description>Why Rails upgrades become unpredictable in mature systems, and why successful upgrade work starts with discovery rather than execution.</description><pubDate>Sun, 22 Mar 2026 13:00:00 GMT</pubDate></item><item><title>The Local Reasoning Budget of a Codebase</title><link>https://syedaslam.com/posts/the-local-reasoning-budget-of-a-codebase/</link><guid isPermaLink="true">https://syedaslam.com/posts/the-local-reasoning-budget-of-a-codebase/</guid><description>Every codebase has a local reasoning budget — the amount of context a developer must hold to understand what a piece of code actually does. When systems exceed it, velocity drops and fragility sets in.</description><pubDate>Thu, 12 Mar 2026 11:45:00 GMT</pubDate></item><item><title>Why the German Government Emailed Me About My Kamal Deployment</title><link>https://syedaslam.com/posts/why-the-german-government-emailed-me-about-my-kamal-deployment/</link><guid isPermaLink="true">https://syedaslam.com/posts/why-the-german-government-emailed-me-about-my-kamal-deployment/</guid><description>A cautionary tale about Docker, iptables, and why you should always double-check your port bindings when deploying with Kamal 2.x.</description><pubDate>Wed, 04 Mar 2026 13:29:07 GMT</pubDate></item><item><title>Debugging Rails Autoload Paths: The Partial Match Trap</title><link>https://syedaslam.com/notes/debugging-rails-autoload-paths-partial-match-trap/</link><guid isPermaLink="true">https://syedaslam.com/notes/debugging-rails-autoload-paths-partial-match-trap/</guid><description>A Rails 5.x dual-boot gotcha: path filtering removed both serializers and serializers_legacy due to partial string matching.</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Where Rails Apps Actually Slow Down</title><link>https://syedaslam.com/posts/where-rails-apps-actually-slow-down/</link><guid isPermaLink="true">https://syedaslam.com/posts/where-rails-apps-actually-slow-down/</guid><description>Performance symptoms and structural causes in long-lived Rails systems.</description><pubDate>Fri, 27 Feb 2026 16:45:00 GMT</pubDate></item><item><title>present? and the Hidden Query Boundary</title><link>https://syedaslam.com/notes/present-and-the-hidden-query-boundary/</link><guid isPermaLink="true">https://syedaslam.com/notes/present-and-the-hidden-query-boundary/</guid><description>When a pure boolean check crosses the database boundary.</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate></item><item><title>When ||= Betrays Your Memoization</title><link>https://syedaslam.com/posts/when-or-equals-betrays-your-memoization/</link><guid isPermaLink="true">https://syedaslam.com/posts/when-or-equals-betrays-your-memoization/</guid><description>Why Ruby&apos;s ||= operator can cause subtle bugs when memoizing boolean flags, and how to fix it.</description><pubDate>Sat, 21 Feb 2026 10:42:42 GMT</pubDate></item><item><title>When Good Abstractions Age</title><link>https://syedaslam.com/posts/when-good-abstractions-age/</link><guid isPermaLink="true">https://syedaslam.com/posts/when-good-abstractions-age/</guid><description>Callbacks, service objects, and the cost of indirection in mature Rails apps.</description><pubDate>Wed, 11 Feb 2026 08:45:00 GMT</pubDate></item><item><title>Stimulus Is Boring — and That’s Why It Works</title><link>https://syedaslam.com/posts/stimulus-is-boring/</link><guid isPermaLink="true">https://syedaslam.com/posts/stimulus-is-boring/</guid><description>Why &apos;boring&apos; tools like Stimulus.js are a superpower for mature Rails applications.</description><pubDate>Tue, 03 Feb 2026 13:44:10 GMT</pubDate></item><item><title>Escaping the AMS Trap: How We Benchmarked Our Way to Alba</title><link>https://syedaslam.com/posts/escaping-the-ams-trap/</link><guid isPermaLink="true">https://syedaslam.com/posts/escaping-the-ams-trap/</guid><description>A case study on migrating from ActiveModel::Serializers to Alba, including real-world benchmarks and a custom caching solution.</description><pubDate>Tue, 20 Jan 2026 12:35:00 GMT</pubDate></item><item><title>Constraint as a Feature: Designing an “Anti-Canvas” for Sacred Text</title><link>https://syedaslam.com/posts/constraint-as-a-feature/</link><guid isPermaLink="true">https://syedaslam.com/posts/constraint-as-a-feature/</guid><description>Why I built AyatFlow as an &apos;Anti-Canvas&apos; to prioritize the dignity of sacred text over infinite design flexibility.</description><pubDate>Wed, 14 Jan 2026 15:37:45 GMT</pubDate></item><item><title>Rails Removed Email Obfuscation. Here&apos;s How I Brought It Back with Stimulus</title><link>https://syedaslam.com/posts/rails-removed-email-obfuscation-heres-how-i-brought-it-back-with-stimulus/</link><guid isPermaLink="true">https://syedaslam.com/posts/rails-removed-email-obfuscation-heres-how-i-brought-it-back-with-stimulus/</guid><description>A modern solution to bring back email obfuscation in Rails using Stimulus, ensuring zero spam and a great user experience.</description><pubDate>Thu, 08 Jan 2026 14:10:00 GMT</pubDate></item><item><title>Rails is the Brain, Go is the Photographer</title><link>https://syedaslam.com/posts/rails-is-brain-go-is-photographer/</link><guid isPermaLink="true">https://syedaslam.com/posts/rails-is-brain-go-is-photographer/</guid><description>How to use Rails as the &apos;Brain&apos; and Go as the &apos;Photographer&apos; to generate high-performance screenshots, keeping the Rails app lightweight and responsive.</description><pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate></item><item><title>What A Philosophy of Software Design Taught Me About Writing Better Software</title><link>https://syedaslam.com/posts/what-a-philosophy-of-software-design-taught-me/</link><guid isPermaLink="true">https://syedaslam.com/posts/what-a-philosophy-of-software-design-taught-me/</guid><description>A distillation of the most practical and impactful ideas from John Ousterhout&apos;s book &apos;A Philosophy of Software Design&apos;, focused on reducing complexity in software.</description><pubDate>Mon, 15 Dec 2025 23:30:00 GMT</pubDate></item><item><title>Debugging Thread Safety in Legacy Rails Applications</title><link>https://syedaslam.com/posts/debugging-thread-safety-in-legacy-rails-applications/</link><guid isPermaLink="true">https://syedaslam.com/posts/debugging-thread-safety-in-legacy-rails-applications/</guid><description>Dive into a real-world debugging scenario involving missing HTTP headers during a Rails 5 upgrade, exploring the root causes and how to resolve them.</description><pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Migrating from Gridsome to Astro: A Developer Journey</title><link>https://syedaslam.com/posts/migrating-from-gridsome-to-astro/</link><guid isPermaLink="true">https://syedaslam.com/posts/migrating-from-gridsome-to-astro/</guid><description>My experience migrating my personal blog from Gridsome to Astro, including the challenges, benefits, and lessons learned along the way.</description><pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate></item><item><title>WeakMaps in JavaScript</title><link>https://syedaslam.com/posts/weakmaps-in-javascript/</link><guid isPermaLink="true">https://syedaslam.com/posts/weakmaps-in-javascript/</guid><description>WeakMaps allow objects to be used as keys, offering memory efficiency and encapsulation—ideal for private data storage and avoiding memory leaks.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Module Functions in Ruby: module_function vs extend self</title><link>https://syedaslam.com/posts/module-functions-in-ruby/</link><guid isPermaLink="true">https://syedaslam.com/posts/module-functions-in-ruby/</guid><description>In Ruby, modules can provide both namespacing and mixin functionality. Learn how to define module-level functions using module_function and extend self, and the differences between them.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Magic Comments in Ruby</title><link>https://syedaslam.com/posts/magic-comments-in-ruby/</link><guid isPermaLink="true">https://syedaslam.com/posts/magic-comments-in-ruby/</guid><description>Ruby supports file-level &apos;magic comments&apos; that instruct the interpreter—most famously for source encoding, but also for freezing strings, shareable constants, and indentation warnings.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Managing Multiple SSH Keys in Git and SSH Config</title><link>https://syedaslam.com/posts/managing-multiple-ssh-keys/</link><guid isPermaLink="true">https://syedaslam.com/posts/managing-multiple-ssh-keys/</guid><description>Learn how to manage multiple SSH keys for personal, work, and client projects using ssh-agent, ssh config, and gitconfig conditionals.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Understanding Linked Lists (DSA Series)</title><link>https://syedaslam.com/posts/understanding-linked-lists/</link><guid isPermaLink="true">https://syedaslam.com/posts/understanding-linked-lists/</guid><description>A practical introduction to singly and doubly linked lists—what they are, when to use them, core operations, time/space trade-offs, and modern relevance.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Working with Files in Ruby</title><link>https://syedaslam.com/posts/working-with-files-in-ruby/</link><guid isPermaLink="true">https://syedaslam.com/posts/working-with-files-in-ruby/</guid><description>Learn the basics of working with files in Ruby: opening, reading, writing, streaming, and querying file objects efficiently.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Retrieving a Random Row in ActiveRecord</title><link>https://syedaslam.com/posts/retrieve-a-random-row-with-activerecord/</link><guid isPermaLink="true">https://syedaslam.com/posts/retrieve-a-random-row-with-activerecord/</guid><description>Learn different ways to fetch a random row in ActiveRecord, their trade-offs in PostgreSQL and MySQL, and which method to prefer for performance.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Recovering a MySQL Root Password</title><link>https://syedaslam.com/posts/recovering-mysql-root-password/</link><guid isPermaLink="true">https://syedaslam.com/posts/recovering-mysql-root-password/</guid><description>Forgetting a database password isn’t the end of the world. Here’s how to reset or recover the MySQL root password, with notes for modern MySQL versions.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Re-initializing Table Sequences in PostgreSQL</title><link>https://syedaslam.com/posts/reinitialize-sequences-in-postgresql/</link><guid isPermaLink="true">https://syedaslam.com/posts/reinitialize-sequences-in-postgresql/</guid><description>Learn how to reset and reinitialize table sequences in PostgreSQL safely, whether preserving existing data or starting fresh.</description><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Formatting ActiveSupport::Duration Objects in Rails</title><link>https://syedaslam.com/posts/formatting-activesupport-duration-objects-in-rails/</link><guid isPermaLink="true">https://syedaslam.com/posts/formatting-activesupport-duration-objects-in-rails/</guid><description>Learn how to format ActiveSupport::Duration objects into concise, human-readable strings with locale support using the duration_in_words gem.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Working with HTTP Headers in Rails</title><link>https://syedaslam.com/posts/working-with-http-headers-in-rails/</link><guid isPermaLink="true">https://syedaslam.com/posts/working-with-http-headers-in-rails/</guid><description>Learn how to safely extract external HTTP headers in Rails while filtering out internal Rack and Rails environment variables.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Creating Python Virtual Environments</title><link>https://syedaslam.com/posts/creating-python-virtual-environments/</link><guid isPermaLink="true">https://syedaslam.com/posts/creating-python-virtual-environments/</guid><description>Learn how to create and use Python virtual environments with venv to isolate dependencies and manage multiple projects cleanly.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Fixing Homebrew &amp; Zsh Issues After macOS Upgrades</title><link>https://syedaslam.com/posts/fixing-homebrew-zsh-issues-macos-upgrade/</link><guid isPermaLink="true">https://syedaslam.com/posts/fixing-homebrew-zsh-issues-macos-upgrade/</guid><description>Upgrading macOS often breaks command-line setups. Here’s how I fixed issues with Homebrew, Zsh, and oh-my-zsh during the Big Sur upgrade—steps still useful for modern macOS versions.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>How to Use Forked NPM Dependencies</title><link>https://syedaslam.com/posts/how-to-use-forked-npm-dependencies/</link><guid isPermaLink="true">https://syedaslam.com/posts/how-to-use-forked-npm-dependencies/</guid><description>When an NPM package is missing a feature or has a blocking bug, point your project at a maintained fork via a Git URL—plus modern alternatives like patch-package and overrides.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Keeping Array Elements Unique in Ruby</title><link>https://syedaslam.com/posts/keeping-array-elements-unique-in-ruby/</link><guid isPermaLink="true">https://syedaslam.com/posts/keeping-array-elements-unique-in-ruby/</guid><description>Explore different ways to keep arrays unique in Ruby—using `uniq`, `uniq!`, and the `|` operator.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Dynamic Full Page Background Images in Rails</title><link>https://syedaslam.com/posts/dynamic-full-page-background-images-in-rails/</link><guid isPermaLink="true">https://syedaslam.com/posts/dynamic-full-page-background-images-in-rails/</guid><description>Learn how to set and randomize full-page background images in a Rails app using CSS3 and simple view helpers.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Highlighting Current Link in Rails Navigation</title><link>https://syedaslam.com/posts/highlight-current-link-in-rails/</link><guid isPermaLink="true">https://syedaslam.com/posts/highlight-current-link-in-rails/</guid><description>A look back at techniques for highlighting the active link in Rails navigation, with modern alternatives using current_page? and Stimulus.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Centering a Fixed-Sized Element with CSS</title><link>https://syedaslam.com/posts/centering-fixed-sized-elements-with-css/</link><guid isPermaLink="true">https://syedaslam.com/posts/centering-fixed-sized-elements-with-css/</guid><description>Learn a classic CSS trick to center a fixed-width or fixed-height element using absolute positioning and negative margins.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Loading CSV Data in Rails: Then vs Now</title><link>https://syedaslam.com/posts/loading-csv-data-in-rails-then-vs-now/</link><guid isPermaLink="true">https://syedaslam.com/posts/loading-csv-data-in-rails-then-vs-now/</guid><description>A look back at how Rails 2.x apps loaded CSV data into models, and how modern Rails apps can do it more efficiently today.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Connecting to Multiple Databases in a Rails App</title><link>https://syedaslam.com/posts/connecting-to-multiple-databases-in-a-rails-app/</link><guid isPermaLink="true">https://syedaslam.com/posts/connecting-to-multiple-databases-in-a-rails-app/</guid><description>Learn how to connect a Rails app to multiple databases using establish_connection, with context on modern Rails features for handling multi-DB setups.</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate></item><item><title>Adding a Close Button to Flash Messages in Rails</title><link>https://syedaslam.com/posts/adding-close-flash-messages-rails/</link><guid isPermaLink="true">https://syedaslam.com/posts/adding-close-flash-messages-rails/</guid><description>Learn how to add a simple close button to dismiss Rails flash messages and a modern Rails 7+ Stimulus approach.</description><pubDate>Sat, 16 Aug 2025 00:00:00 GMT</pubDate></item><item><title>React State is a Snapshot</title><link>https://syedaslam.com/notes/react-state-snapshot/</link><guid isPermaLink="true">https://syedaslam.com/notes/react-state-snapshot/</guid><description>Why setting state doesn&apos;t update the variable immediately.</description><pubDate>Sun, 10 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Git Undo Cheat Sheet</title><link>https://syedaslam.com/notes/git-undo/</link><guid isPermaLink="true">https://syedaslam.com/notes/git-undo/</guid><description>Quick reference for undoing mistakes in Git.</description><pubDate>Fri, 01 Mar 2024 00:00:00 GMT</pubDate></item><item><title>React useEffect Cleanup Rule</title><link>https://syedaslam.com/notes/react-useeffect-cleanup/</link><guid isPermaLink="true">https://syedaslam.com/notes/react-useeffect-cleanup/</guid><description>Always return a cleanup function when setting up subscriptions or timers.</description><pubDate>Thu, 15 Feb 2024 00:00:00 GMT</pubDate></item><item><title>I/O Visibility in Ruby Predicates</title><link>https://syedaslam.com/notes/io-visibility-in-ruby-predicates/</link><guid isPermaLink="true">https://syedaslam.com/notes/io-visibility-in-ruby-predicates/</guid><description>A quick mental model for predicates that look pure but can issue SQL.</description><pubDate>Mon, 12 Feb 2024 00:00:00 GMT</pubDate></item><item><title>Types VS Interfaces in TypeScript</title><link>https://syedaslam.com/notes/types_vs_interfaces/</link><guid isPermaLink="true">https://syedaslam.com/notes/types_vs_interfaces/</guid><description>A reference for when to use Types vs Interfaces based on StackOverflow consensus.</description><pubDate>Sat, 20 Jan 2024 00:00:00 GMT</pubDate></item><item><title>The Future of Web Performance: Beyond Core Web Vitals</title><link>https://syedaslam.com/posts/the-future-of-web-performance/</link><guid isPermaLink="true">https://syedaslam.com/posts/the-future-of-web-performance/</guid><description>Exploring emerging performance metrics and optimization strategies that will shape the next generation of web applications.</description><pubDate>Wed, 10 Jan 2024 00:00:00 GMT</pubDate></item><item><title>Continuous Learning in Tech: Staying Relevant in a Fast-Paced Industry</title><link>https://syedaslam.com/posts/continuous-learning-in-tech/</link><guid isPermaLink="true">https://syedaslam.com/posts/continuous-learning-in-tech/</guid><description>Strategies and resources for developers to stay current with rapidly evolving technologies and maintain career growth in the tech industry.</description><pubDate>Fri, 05 Jan 2024 00:00:00 GMT</pubDate></item><item><title>The JavaScript Event Loop: Kitchen Analogy</title><link>https://syedaslam.com/notes/js-event-loop-analogy/</link><guid isPermaLink="true">https://syedaslam.com/notes/js-event-loop-analogy/</guid><description>Understanding the Call Stack, Web APIs, and Task Queue using a restaurant analogy.</description><pubDate>Fri, 10 Nov 2023 00:00:00 GMT</pubDate></item><item><title>Common HTTP Status Codes</title><link>https://syedaslam.com/notes/http-status-codes/</link><guid isPermaLink="true">https://syedaslam.com/notes/http-status-codes/</guid><description>A quick reference for the status codes I actually use.</description><pubDate>Fri, 01 Sep 2023 00:00:00 GMT</pubDate></item><item><title>The Ultimate CSS Centering Guide</title><link>https://syedaslam.com/notes/css-centering/</link><guid isPermaLink="true">https://syedaslam.com/notes/css-centering/</guid><description>Modern ways to center a div horizontally and vertically.</description><pubDate>Thu, 15 Jun 2023 00:00:00 GMT</pubDate></item><item><title>Git: Revert an Updated File</title><link>https://syedaslam.com/posts/git-revert-an-updated-file/</link><guid isPermaLink="true">https://syedaslam.com/posts/git-revert-an-updated-file/</guid><description>How to remove an updated file from a pull request without deleting the file itself — ensuring your changeset stays clean and focused.</description><pubDate>Wed, 17 Feb 2021 00:00:00 GMT</pubDate></item><item><title>Connecting to Remote PostgreSQL with pgAdmin</title><link>https://syedaslam.com/notes/postgres-remote-connect/</link><guid isPermaLink="true">https://syedaslam.com/notes/postgres-remote-connect/</guid><description>A 3-step process to enable remote access to a PostgreSQL server.</description><pubDate>Wed, 18 May 2011 00:00:00 GMT</pubDate></item></channel></rss>