
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Nadim Tuhin</title>
      <link>https://www.nadimtuhin.com/blog</link>
      <description>Staff engineer and tech lead with 10+ years shipping production systems. Open to remote Staff and Tech Lead roles.</description>
      <language>en-us</language>
      <managingEditor>nadimtuhin@gmail.com (Nadim Tuhin)</managingEditor>
      <webMaster>nadimtuhin@gmail.com (Nadim Tuhin)</webMaster>
      <lastBuildDate>Sun, 27 Sep 2026 00:00:00 GMT</lastBuildDate>
      <atom:link href="https://www.nadimtuhin.com/tags/python/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://www.nadimtuhin.com/blog/scraping-fail-loudly-when-the-page-layout-changes</guid>
    <title>Scraping: fail loudly when the page layout changes</title>
    <link>https://www.nadimtuhin.com/blog/scraping-fail-loudly-when-the-page-layout-changes</link>
    <description>A scraper that parses nothing and exits 0 looks healthy while it fills your database with gaps. A count check and a saved fixture catch it.</description>
    <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
    <author>nadimtuhin@gmail.com (Nadim Tuhin)</author>
    <category>scraping</category><category>web-scraping</category><category>python</category><category>testing</category>
  </item>

  <item>
    <guid>https://www.nadimtuhin.com/blog/hermes-personal-finance-tracking-flow</guid>
    <title>How I track my money with Hermes: the flow, not the numbers</title>
    <link>https://www.nadimtuhin.com/blog/hermes-personal-finance-tracking-flow</link>
    <description>Bank SMS and email alerts flow through one parser, a dedupe hash and a Google Sheet. A morning cron job drafts the summary. Only the flow, no figures.</description>
    <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
    <author>nadimtuhin@gmail.com (Nadim Tuhin)</author>
    <category>automation</category><category>hermes</category><category>personal-finance</category><category>cron</category><category>python</category>
  </item>

  <item>
    <guid>https://www.nadimtuhin.com/blog/scraping-retries-backoff-retry-after-and-what-not-to-retry</guid>
    <title>Scraping: retry with backoff, honour Retry-After, and know what not to retry</title>
    <link>https://www.nadimtuhin.com/blog/scraping-retries-backoff-retry-after-and-what-not-to-retry</link>
    <description>A retry helper that backs off with jitter, reads Retry-After, and gives up fast on a 404. Run against a local server that fails on purpose.</description>
    <pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate>
    <author>nadimtuhin@gmail.com (Nadim Tuhin)</author>
    <category>scraping</category><category>web-scraping</category><category>python</category><category>reliability</category>
  </item>

  <item>
    <guid>https://www.nadimtuhin.com/blog/scraping-look-for-the-json-before-the-css-selector</guid>
    <title>Scraping: look for the JSON in the page before you write a CSS selector</title>
    <link>https://www.nadimtuhin.com/blog/scraping-look-for-the-json-before-the-css-selector</link>
    <description>Many pages ship their data as JSON inside the HTML. Reading that survives a redesign that breaks every class-name selector.</description>
    <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
    <author>nadimtuhin@gmail.com (Nadim Tuhin)</author>
    <category>scraping</category><category>web-scraping</category><category>python</category><category>data-extraction</category>
  </item>

    </channel>
  </rss>
