{"@attributes":{"version":"2.0"},"channel":{"title":"Syed Aslam","description":"Syed Aslam writes about software, Rails, debugging, tools, and things he learns while building and maintaining systems.","link":"https:\/\/syedaslam.com\/","item":[{"title":"Why Active Record's Snapshot Semantics Are a Trade-off, Not a Missing Feature","link":"https:\/\/syedaslam.com\/posts\/why-active-records-snapshot-semantics-are-a-trade-off\/","guid":"https:\/\/syedaslam.com\/posts\/why-active-records-snapshot-semantics-are-a-trade-off\/","description":"What stale reads, concurrent writes, association caches, and Rails' abandoned Identity Map reveal about live Active Record objects.","pubDate":"Tue, 28 Jul 2026 15:30:00 GMT"},{"title":"Git Worktrees: Multiple Branches Without the Checkout Shuffle","link":"https:\/\/syedaslam.com\/posts\/git-worktrees-multiple-branches-without-shuffle\/","guid":"https:\/\/syedaslam.com\/posts\/git-worktrees-multiple-branches-without-shuffle\/","description":"Learn how Git worktrees keep multiple branches checked out in separate directories, reducing stashing and branch switching during reviews, hotfixes, rebases, and stacked pull requests.","pubDate":"Wed, 22 Jul 2026 21:39:00 GMT"},{"title":"RailsRevelry Is a Map for Understanding Rails","link":"https:\/\/syedaslam.com\/posts\/railsrevelry-is-a-map-for-understanding-rails\/","guid":"https:\/\/syedaslam.com\/posts\/railsrevelry-is-a-map-for-understanding-rails\/","description":"A short invitation to RailsRevelry, a focused publication for Rails developers who want clearer mental models of how the framework behaves.","pubDate":"Tue, 30 Jun 2026 11:30:00 GMT"},{"title":"What SOLID Still Teaches Ruby Programmers","link":"https:\/\/syedaslam.com\/posts\/what-solid-still-teaches-ruby-programmers\/","guid":"https:\/\/syedaslam.com\/posts\/what-solid-still-teaches-ruby-programmers\/","description":"How SOLID changes when you read it through Ruby\u2019s object model, duck typing, and preference for pragmatic design.","pubDate":"Thu, 18 Jun 2026 19:32:00 GMT"},{"title":"When a Rails Object Needs Types but Not a Table","link":"https:\/\/syedaslam.com\/posts\/when-a-rails-object-needs-types-but-not-a-table\/","guid":"https:\/\/syedaslam.com\/posts\/when-a-rails-object-needs-types-but-not-a-table\/","description":"How ActiveModel::Attributes gives tableless Rails objects type casting, defaults, and a Rails-native attribute system, and where the API still needs more support.","pubDate":"Wed, 10 Jun 2026 13:30:00 GMT"},{"title":"Understanding how symbols differ from strings","link":"https:\/\/syedaslam.com\/notes\/understanding-how-symbols-differ-from-strings\/","guid":"https:\/\/syedaslam.com\/notes\/understanding-how-symbols-differ-from-strings\/","description":"A practical mental model for choosing symbols vs strings in Ruby.","pubDate":"Mon, 08 Jun 2026 00:00:00 GMT"},{"title":"Why Your Rails Code Keeps Running After redirect_to","link":"https:\/\/syedaslam.com\/posts\/why-your-rails-code-keeps-running-after-redirect-to\/","guid":"https:\/\/syedaslam.com\/posts\/why-your-rails-code-keeps-running-after-redirect-to\/","description":"A small Rails debugging note about why redirect_to performs a response but does not stop Ruby control flow.","pubDate":"Thu, 04 Jun 2026 14:30:00 GMT"},{"title":"Ruby Beyond the Server","link":"https:\/\/syedaslam.com\/posts\/ruby-beyond-the-server\/","guid":"https:\/\/syedaslam.com\/posts\/ruby-beyond-the-server\/","description":"A collection of the various Ruby libraries and execution environments for building desktop, mobile, terminal, game, and browser applications.","pubDate":"Fri, 22 May 2026 14:30:00 GMT"},{"title":"How Rails Dispatches a Request to a Controller, and Why That Layer Matters","link":"https:\/\/syedaslam.com\/posts\/how-rails-dispatches-a-request-to-a-controller-and-why-that-layer-matters\/","guid":"https:\/\/syedaslam.com\/posts\/how-rails-dispatches-a-request-to-a-controller-and-why-that-layer-matters\/","description":"What happens between route matching and a controller action, and why that hidden dispatch layer matters when debugging Rails.","pubDate":"Wed, 06 May 2026 03:30:00 GMT"},{"title":"The Execution Boundary in Rails","link":"https:\/\/syedaslam.com\/posts\/the-execution-boundary-in-rails\/","guid":"https:\/\/syedaslam.com\/posts\/the-execution-boundary-in-rails\/","description":"What changes when Rails work leaves the request-response path and starts running later, elsewhere, or under a different failure model.","pubDate":"Mon, 04 May 2026 03:30:00 GMT"},{"title":"How Rails Routing Works, and Why That Boundary Matters","link":"https:\/\/syedaslam.com\/posts\/how-rails-routing-works-and-why-that-boundary-matters\/","guid":"https:\/\/syedaslam.com\/posts\/how-rails-routing-works-and-why-that-boundary-matters\/","description":"How Rails matches requests, extracts parameters, and crosses the routing boundary before controller dispatch.","pubDate":"Mon, 27 Apr 2026 03:30:00 GMT"},{"title":"The Hidden Query Boundary in Rails Predicates","link":"https:\/\/syedaslam.com\/posts\/the-hidden-query-boundary-in-rails-predicates\/","guid":"https:\/\/syedaslam.com\/posts\/the-hidden-query-boundary-in-rails-predicates\/","description":"Why predicate-like checks on Active Record associations can quietly cross the database boundary.","pubDate":"Fri, 24 Apr 2026 13:30:00 GMT"},{"title":"From Rack to Controller, and Why That Flow Matters in Rails","link":"https:\/\/syedaslam.com\/posts\/from-rack-to-controller-and-why-that-flow-matters-in-rails\/","guid":"https:\/\/syedaslam.com\/posts\/from-rack-to-controller-and-why-that-flow-matters-in-rails\/","description":"How a request moves through Rack, middleware, routing, and controller dispatch, and why that path matters when debugging Rails.","pubDate":"Sat, 18 Apr 2026 13:30:00 GMT"},{"title":"A Preflight for Rails Upgrades","link":"https:\/\/syedaslam.com\/posts\/a-preflight-for-rails-upgrades\/","guid":"https:\/\/syedaslam.com\/posts\/a-preflight-for-rails-upgrades\/","description":"Why understanding the dependency, execution, and behavioral surfaces of a Rails system makes upgrades more predictable.","pubDate":"Tue, 14 Apr 2026 13:00:00 GMT"},{"title":"The Signals That Predict a Difficult Rails Upgrade","link":"https:\/\/syedaslam.com\/posts\/the-signals-that-predict-a-difficult-rails-upgrade\/","guid":"https:\/\/syedaslam.com\/posts\/the-signals-that-predict-a-difficult-rails-upgrade\/","description":"How to spot Rails upgrade risk early by reading dependency, runtime, infrastructure, behavioral, and test signals before the version bump begins.","pubDate":"Fri, 03 Apr 2026 13:30:00 GMT"},{"title":"The Upgrade Anxiety Curve in Mature Systems","link":"https:\/\/syedaslam.com\/posts\/the-upgrade-anxiety-in-mature-systems\/","guid":"https:\/\/syedaslam.com\/posts\/the-upgrade-anxiety-in-mature-systems\/","description":"Why Rails upgrades become unpredictable in mature systems, and why successful upgrade work starts with discovery rather than execution.","pubDate":"Sun, 22 Mar 2026 13:00:00 GMT"},{"title":"The Local Reasoning Budget of a Codebase","link":"https:\/\/syedaslam.com\/posts\/the-local-reasoning-budget-of-a-codebase\/","guid":"https:\/\/syedaslam.com\/posts\/the-local-reasoning-budget-of-a-codebase\/","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.","pubDate":"Thu, 12 Mar 2026 11:45:00 GMT"},{"title":"Why the German Government Emailed Me About My Kamal Deployment","link":"https:\/\/syedaslam.com\/posts\/why-the-german-government-emailed-me-about-my-kamal-deployment\/","guid":"https:\/\/syedaslam.com\/posts\/why-the-german-government-emailed-me-about-my-kamal-deployment\/","description":"How a Kamal 2.x PostgreSQL accessory was exposed through Docker port publishing, why UFW did not protect it, and how binding to localhost fixed the deployment.","pubDate":"Wed, 04 Mar 2026 13:29:07 GMT"},{"title":"Debugging Rails autoload paths: the partial match trap","link":"https:\/\/syedaslam.com\/notes\/debugging-rails-autoload-paths-partial-match-trap\/","guid":"https:\/\/syedaslam.com\/notes\/debugging-rails-autoload-paths-partial-match-trap\/","description":"A Rails 5.x dual-boot gotcha: path filtering removed both serializers and serializers_legacy due to partial string matching.","pubDate":"Wed, 04 Mar 2026 00:00:00 GMT"},{"title":"Where Rails Apps Actually Slow Down","link":"https:\/\/syedaslam.com\/posts\/where-rails-apps-actually-slow-down\/","guid":"https:\/\/syedaslam.com\/posts\/where-rails-apps-actually-slow-down\/","description":"Performance symptoms and structural causes in long-lived Rails systems.","pubDate":"Fri, 27 Feb 2026 16:45:00 GMT"},{"title":"present? and the hidden query boundary","link":"https:\/\/syedaslam.com\/notes\/present-and-the-hidden-query-boundary\/","guid":"https:\/\/syedaslam.com\/notes\/present-and-the-hidden-query-boundary\/","description":"When a pure boolean check crosses the database boundary.","pubDate":"Fri, 27 Feb 2026 00:00:00 GMT"},{"title":"When ||= Betrays Your Memoization","link":"https:\/\/syedaslam.com\/posts\/when-or-equals-betrays-your-memoization\/","guid":"https:\/\/syedaslam.com\/posts\/when-or-equals-betrays-your-memoization\/","description":"Why Ruby's ||= operator can cause subtle bugs when memoizing boolean flags, and how to fix it.","pubDate":"Sat, 21 Feb 2026 10:42:42 GMT"},{"title":"When Good Abstractions Age","link":"https:\/\/syedaslam.com\/posts\/when-good-abstractions-age\/","guid":"https:\/\/syedaslam.com\/posts\/when-good-abstractions-age\/","description":"Callbacks, service objects, and the cost of indirection in mature Rails apps.","pubDate":"Wed, 11 Feb 2026 08:45:00 GMT"},{"title":"Stimulus Is Boring, and That\u2019s Why It Works","link":"https:\/\/syedaslam.com\/posts\/stimulus-is-boring\/","guid":"https:\/\/syedaslam.com\/posts\/stimulus-is-boring\/","description":"Why 'boring' tools like Stimulus.js are a superpower for mature Rails applications.","pubDate":"Tue, 03 Feb 2026 13:44:10 GMT"},{"title":"Escaping the AMS Trap: How We Benchmarked Our Way to Alba","link":"https:\/\/syedaslam.com\/posts\/escaping-the-ams-trap\/","guid":"https:\/\/syedaslam.com\/posts\/escaping-the-ams-trap\/","description":"A case study on migrating from ActiveModel::Serializers to Alba, including real-world benchmarks and a custom caching solution.","pubDate":"Tue, 20 Jan 2026 12:35:00 GMT"},{"title":"Constraint as a Feature: Designing an \u201cAnti-Canvas\u201d for Sacred Text","link":"https:\/\/syedaslam.com\/posts\/constraint-as-a-feature\/","guid":"https:\/\/syedaslam.com\/posts\/constraint-as-a-feature\/","description":"Why I built AyatFlow as an 'Anti-Canvas' to prioritize the dignity of sacred text over infinite design flexibility.","pubDate":"Wed, 14 Jan 2026 15:37:45 GMT"},{"title":"Rails Removed Email Obfuscation. Here's How I Brought It Back with Stimulus","link":"https:\/\/syedaslam.com\/posts\/rails-removed-email-obfuscation-heres-how-i-brought-it-back-with-stimulus\/","guid":"https:\/\/syedaslam.com\/posts\/rails-removed-email-obfuscation-heres-how-i-brought-it-back-with-stimulus\/","description":"A modern solution to bring back email obfuscation in Rails using Stimulus, ensuring zero spam and a great user experience.","pubDate":"Thu, 08 Jan 2026 14:10:00 GMT"},{"title":"Rails is the Brain, Go is the Photographer","link":"https:\/\/syedaslam.com\/posts\/rails-is-brain-go-is-photographer\/","guid":"https:\/\/syedaslam.com\/posts\/rails-is-brain-go-is-photographer\/","description":"How to use Rails as the 'Brain' and Go as the 'Photographer' to generate high-performance screenshots, keeping the Rails app lightweight and responsive.","pubDate":"Wed, 31 Dec 2025 00:00:00 GMT"},{"title":"What A Philosophy of Software Design Taught Me About Writing Better Software","link":"https:\/\/syedaslam.com\/posts\/what-a-philosophy-of-software-design-taught-me\/","guid":"https:\/\/syedaslam.com\/posts\/what-a-philosophy-of-software-design-taught-me\/","description":"A distillation of the most practical and impactful ideas from John Ousterhout's book 'A Philosophy of Software Design', focused on reducing complexity in software.","pubDate":"Mon, 15 Dec 2025 23:30:00 GMT"},{"title":"Debugging Thread Safety in Legacy Rails Applications","link":"https:\/\/syedaslam.com\/posts\/debugging-thread-safety-in-legacy-rails-applications\/","guid":"https:\/\/syedaslam.com\/posts\/debugging-thread-safety-in-legacy-rails-applications\/","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.","pubDate":"Wed, 10 Dec 2025 00:00:00 GMT"},{"title":"Migrating from Gridsome to Astro: A Developer Journey","link":"https:\/\/syedaslam.com\/posts\/migrating-from-gridsome-to-astro\/","guid":"https:\/\/syedaslam.com\/posts\/migrating-from-gridsome-to-astro\/","description":"My experience migrating my personal blog from Gridsome to Astro, including the challenges, benefits, and lessons learned along the way.","pubDate":"Sat, 30 Aug 2025 00:00:00 GMT"},{"title":"WeakMaps in JavaScript","link":"https:\/\/syedaslam.com\/posts\/weakmaps-in-javascript\/","guid":"https:\/\/syedaslam.com\/posts\/weakmaps-in-javascript\/","description":"WeakMaps allow objects to be used as keys, offering memory efficiency and encapsulation. They are ideal for private data storage and avoiding memory leaks.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Module Functions in Ruby: module_function vs extend self","link":"https:\/\/syedaslam.com\/posts\/module-functions-in-ruby\/","guid":"https:\/\/syedaslam.com\/posts\/module-functions-in-ruby\/","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.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Magic Comments in Ruby","link":"https:\/\/syedaslam.com\/posts\/magic-comments-in-ruby\/","guid":"https:\/\/syedaslam.com\/posts\/magic-comments-in-ruby\/","description":"Ruby supports file-level 'magic comments' that instruct the interpreter, most famously for source encoding, but also for freezing strings, shareable constants, and indentation warnings.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Managing Multiple SSH Keys in Git and SSH Config","link":"https:\/\/syedaslam.com\/posts\/managing-multiple-ssh-keys\/","guid":"https:\/\/syedaslam.com\/posts\/managing-multiple-ssh-keys\/","description":"Learn how to manage multiple SSH keys for personal, work, and client projects using ssh-agent, ssh config, and gitconfig conditionals.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Understanding Linked Lists (DSA Series)","link":"https:\/\/syedaslam.com\/posts\/understanding-linked-lists\/","guid":"https:\/\/syedaslam.com\/posts\/understanding-linked-lists\/","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.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Working with Files in Ruby","link":"https:\/\/syedaslam.com\/posts\/working-with-files-in-ruby\/","guid":"https:\/\/syedaslam.com\/posts\/working-with-files-in-ruby\/","description":"Learn the basics of working with files in Ruby: opening, reading, writing, streaming, and querying file objects efficiently.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Retrieving a Random Row in ActiveRecord","link":"https:\/\/syedaslam.com\/posts\/retrieve-a-random-row-with-activerecord\/","guid":"https:\/\/syedaslam.com\/posts\/retrieve-a-random-row-with-activerecord\/","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.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Recovering a MySQL Root Password","link":"https:\/\/syedaslam.com\/posts\/recovering-mysql-root-password\/","guid":"https:\/\/syedaslam.com\/posts\/recovering-mysql-root-password\/","description":"Forgetting a database password isn\u2019t the end of the world. Here\u2019s how to reset or recover the MySQL root password, with notes for modern MySQL versions.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Re-initializing Table Sequences in PostgreSQL","link":"https:\/\/syedaslam.com\/posts\/reinitialize-sequences-in-postgresql\/","guid":"https:\/\/syedaslam.com\/posts\/reinitialize-sequences-in-postgresql\/","description":"Learn how to reset and reinitialize table sequences in PostgreSQL safely, whether preserving existing data or starting fresh.","pubDate":"Wed, 20 Aug 2025 00:00:00 GMT"},{"title":"Formatting ActiveSupport::Duration Objects in Rails","link":"https:\/\/syedaslam.com\/posts\/formatting-activesupport-duration-objects-in-rails\/","guid":"https:\/\/syedaslam.com\/posts\/formatting-activesupport-duration-objects-in-rails\/","description":"Learn how to format ActiveSupport::Duration objects into concise, human-readable strings with locale support using the duration_in_words gem.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Working with HTTP Headers in Rails","link":"https:\/\/syedaslam.com\/posts\/working-with-http-headers-in-rails\/","guid":"https:\/\/syedaslam.com\/posts\/working-with-http-headers-in-rails\/","description":"Learn how to safely extract external HTTP headers in Rails while filtering out internal Rack and Rails environment variables.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Creating Python Virtual Environments","link":"https:\/\/syedaslam.com\/posts\/creating-python-virtual-environments\/","guid":"https:\/\/syedaslam.com\/posts\/creating-python-virtual-environments\/","description":"Learn how to create and use Python virtual environments with venv to isolate dependencies and manage multiple projects cleanly.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Fixing Homebrew & Zsh Issues After macOS Upgrades","link":"https:\/\/syedaslam.com\/posts\/fixing-homebrew-zsh-issues-macos-upgrade\/","guid":"https:\/\/syedaslam.com\/posts\/fixing-homebrew-zsh-issues-macos-upgrade\/","description":"Upgrading macOS often breaks command-line setups. Here\u2019s how I fixed issues with Homebrew, Zsh, and oh-my-zsh during the Big Sur upgrade. These steps are still useful for modern macOS versions.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"How to Use Forked NPM Dependencies","link":"https:\/\/syedaslam.com\/posts\/how-to-use-forked-npm-dependencies\/","guid":"https:\/\/syedaslam.com\/posts\/how-to-use-forked-npm-dependencies\/","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. Modern alternatives include patch-package and overrides.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Keeping Array Elements Unique in Ruby","link":"https:\/\/syedaslam.com\/posts\/keeping-array-elements-unique-in-ruby\/","guid":"https:\/\/syedaslam.com\/posts\/keeping-array-elements-unique-in-ruby\/","description":"Explore different ways to keep arrays unique in Ruby using `uniq`, `uniq!`, and the `|` operator.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Dynamic Full Page Background Images in Rails","link":"https:\/\/syedaslam.com\/posts\/dynamic-full-page-background-images-in-rails\/","guid":"https:\/\/syedaslam.com\/posts\/dynamic-full-page-background-images-in-rails\/","description":"Learn how to set and randomize full-page background images in a Rails app using CSS3 and simple view helpers.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Highlighting Current Link in Rails Navigation","link":"https:\/\/syedaslam.com\/posts\/highlight-current-link-in-rails\/","guid":"https:\/\/syedaslam.com\/posts\/highlight-current-link-in-rails\/","description":"A look back at techniques for highlighting the active link in Rails navigation, with modern alternatives using current_page? and Stimulus.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Centering a Fixed-Sized Element with CSS","link":"https:\/\/syedaslam.com\/posts\/centering-fixed-sized-elements-with-css\/","guid":"https:\/\/syedaslam.com\/posts\/centering-fixed-sized-elements-with-css\/","description":"Learn a classic CSS trick to center a fixed-width or fixed-height element using absolute positioning and negative margins.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Loading CSV Data in Rails: Then vs Now","link":"https:\/\/syedaslam.com\/posts\/loading-csv-data-in-rails-then-vs-now\/","guid":"https:\/\/syedaslam.com\/posts\/loading-csv-data-in-rails-then-vs-now\/","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.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Connecting to Multiple Databases in a Rails App","link":"https:\/\/syedaslam.com\/posts\/connecting-to-multiple-databases-in-a-rails-app\/","guid":"https:\/\/syedaslam.com\/posts\/connecting-to-multiple-databases-in-a-rails-app\/","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.","pubDate":"Sun, 17 Aug 2025 00:00:00 GMT"},{"title":"Adding a Close Button to Flash Messages in Rails","link":"https:\/\/syedaslam.com\/posts\/adding-close-flash-messages-rails\/","guid":"https:\/\/syedaslam.com\/posts\/adding-close-flash-messages-rails\/","description":"Learn how to add a simple close button to dismiss Rails flash messages and a modern Rails 7+ Stimulus approach.","pubDate":"Sat, 16 Aug 2025 00:00:00 GMT"},{"title":"React state is a snapshot","link":"https:\/\/syedaslam.com\/notes\/react-state-snapshot\/","guid":"https:\/\/syedaslam.com\/notes\/react-state-snapshot\/","description":"Why setting state doesn't update the variable immediately.","pubDate":"Sun, 10 Mar 2024 00:00:00 GMT"},{"title":"Git undo cheat sheet","link":"https:\/\/syedaslam.com\/notes\/git-undo\/","guid":"https:\/\/syedaslam.com\/notes\/git-undo\/","description":"Quick reference for undoing mistakes in Git.","pubDate":"Fri, 01 Mar 2024 00:00:00 GMT"},{"title":"React useEffect cleanup rule","link":"https:\/\/syedaslam.com\/notes\/react-useeffect-cleanup\/","guid":"https:\/\/syedaslam.com\/notes\/react-useeffect-cleanup\/","description":"Always return a cleanup function when setting up subscriptions or timers.","pubDate":"Thu, 15 Feb 2024 00:00:00 GMT"},{"title":"I\/O visibility in Ruby predicates","link":"https:\/\/syedaslam.com\/notes\/io-visibility-in-ruby-predicates\/","guid":"https:\/\/syedaslam.com\/notes\/io-visibility-in-ruby-predicates\/","description":"A quick mental model for predicates that look pure but can issue SQL.","pubDate":"Mon, 12 Feb 2024 00:00:00 GMT"},{"title":"Types vs. interfaces in TypeScript","link":"https:\/\/syedaslam.com\/notes\/types_vs_interfaces\/","guid":"https:\/\/syedaslam.com\/notes\/types_vs_interfaces\/","description":"A reference for when to use Types vs Interfaces based on StackOverflow consensus.","pubDate":"Sat, 20 Jan 2024 00:00:00 GMT"},{"title":"The Future of Web Performance: Beyond Core Web Vitals","link":"https:\/\/syedaslam.com\/posts\/the-future-of-web-performance\/","guid":"https:\/\/syedaslam.com\/posts\/the-future-of-web-performance\/","description":"Exploring emerging performance metrics and optimization strategies that will shape the next generation of web applications.","pubDate":"Wed, 10 Jan 2024 00:00:00 GMT"},{"title":"Continuous Learning in Tech: Staying Relevant in a Fast-Paced Industry","link":"https:\/\/syedaslam.com\/posts\/continuous-learning-in-tech\/","guid":"https:\/\/syedaslam.com\/posts\/continuous-learning-in-tech\/","description":"Strategies and resources for developers to stay current with rapidly evolving technologies and maintain career growth in the tech industry.","pubDate":"Fri, 05 Jan 2024 00:00:00 GMT"},{"title":"The JavaScript event loop: a kitchen analogy","link":"https:\/\/syedaslam.com\/notes\/js-event-loop-analogy\/","guid":"https:\/\/syedaslam.com\/notes\/js-event-loop-analogy\/","description":"Understanding the Call Stack, Web APIs, and Task Queue using a restaurant analogy.","pubDate":"Fri, 10 Nov 2023 00:00:00 GMT"},{"title":"Common HTTP status codes","link":"https:\/\/syedaslam.com\/notes\/http-status-codes\/","guid":"https:\/\/syedaslam.com\/notes\/http-status-codes\/","description":"A quick reference for the status codes I actually use.","pubDate":"Fri, 01 Sep 2023 00:00:00 GMT"},{"title":"The ultimate CSS centering guide","link":"https:\/\/syedaslam.com\/notes\/css-centering\/","guid":"https:\/\/syedaslam.com\/notes\/css-centering\/","description":"Modern ways to center a div horizontally and vertically.","pubDate":"Thu, 15 Jun 2023 00:00:00 GMT"},{"title":"Git: Revert an Updated File","link":"https:\/\/syedaslam.com\/posts\/git-revert-an-updated-file\/","guid":"https:\/\/syedaslam.com\/posts\/git-revert-an-updated-file\/","description":"How to remove an updated file from a pull request without deleting the file itself, keeping your changeset clean and focused.","pubDate":"Wed, 17 Feb 2021 00:00:00 GMT"},{"title":"Connecting to remote PostgreSQL with pgAdmin","link":"https:\/\/syedaslam.com\/notes\/postgres-remote-connect\/","guid":"https:\/\/syedaslam.com\/notes\/postgres-remote-connect\/","description":"A 3-step process to enable remote access to a PostgreSQL server.","pubDate":"Wed, 18 May 2011 00:00:00 GMT"}]}}