<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>NIYONSHUTI Emmanuel | Software Developer</title>
    <link>https://blog.niyonshutiemmanuel.com</link>
    <description>Notes on software development</description>
    <language>en</language>
    <lastBuildDate>Sun, 19 Jul 2026 02:41:34 GMT</lastBuildDate>
    <atom:link href="https://blog.niyonshutiemmanuel.com/rss.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title><![CDATA[cancelling Asyncio.TaskGroup without boilerplate]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/cancelling-taskgroup-in-asyncio-without-boilerplate</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/cancelling-taskgroup-in-asyncio-without-boilerplate</guid>
      <description><![CDATA[Python>=315 have Asyncio.TaskGroup.cancel]]></description>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[backend development]]></category>
      
    </item>
    <item>
      <title><![CDATA[downward fixture dependency will mess up your teardown]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/downward-fixture-dependency-will-mess-up-your-teardown</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/downward-fixture-dependency-will-mess-up-your-teardown</guid>
      <description><![CDATA[downward fixture dependency will mess up your pytest fixture teardown]]></description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[testing]]></category>
      
    </item>
    <item>
      <title><![CDATA[blogging and llms]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/blogging-an-ai</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/blogging-an-ai</guid>
      <description><![CDATA[blogging and llms]]></description>
      <pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate>
      
      
    </item>
    <item>
      <title><![CDATA[Doing Many Things at the same time with AnyIO create_task_group]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/doing-many-things-at-the-same-time-with-anyio-create-task-group</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/doing-many-things-at-the-same-time-with-anyio-create-task-group</guid>
      <description><![CDATA[Doing Many Things at the same time with AnyIO create_task_group]]></description>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[python]]></category>
      
    </item>
    <item>
      <title><![CDATA[SQLAlchemy Async ORM: The MissingGreenlet error after commit]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/sqlalchemy-async-orm:-expire_on_commit-and-the-greenlet-error</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/sqlalchemy-async-orm:-expire_on_commit-and-the-greenlet-error</guid>
      <description><![CDATA[why & when you'd set expire_on_commit=False with SQLAlchemy async ORM]]></description>
      <pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[python]]></category>
      
    </item>
    <item>
      <title><![CDATA[Accessing FastAPI Swagger docs offline]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/accessing-fastapi-swagger-docs-offline</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/accessing-fastapi-swagger-docs-offline</guid>
      <description><![CDATA[how can you access fastapi swagger docs offline]]></description>
      <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[python]]></category>
      
    </item>
    <item>
      <title><![CDATA[whatdeps: checking if your dependencies are still alive]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/whatdeps-checking-if-your-dependencies-are-still-alive</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/whatdeps-checking-if-your-dependencies-are-still-alive</guid>
      <description><![CDATA[whatdeps - a CLI tool to check Python package health from PyPI and GitHub]]></description>
      <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[python]]></category>
      <category><![CDATA[python]]></category>
      <category><![CDATA[whatdeps]]></category>
      <category><![CDATA[pypi]]></category>
      <category><![CDATA[cli]]></category>
    </item>
    <item>
      <title><![CDATA[Next.js-ing My Blog]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/next.js-ing-my-blog</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/next.js-ing-my-blog</guid>
      <description><![CDATA[how I migrated this blog three times and ended up just serving static markdown files.]]></description>
      <pubDate>Sat, 21 Feb 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[WEB DEVELOPMENT]]></category>
      <category><![CDATA[nextjs]]></category>
      <category><![CDATA[blog]]></category>
      <category><![CDATA[markdown]]></category>
    </item>
    <item>
      <title><![CDATA[Fixing MissingGreenlet in Alembic with Async SQLAlchemy]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/fixing-missinggreenlet-with-alembic-and-asyncio</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/fixing-missinggreenlet-with-alembic-and-asyncio</guid>
      <description><![CDATA[If you're using SQLAlchemy with asyncio and asyncpg, running alembic autogenerate might throw a confusing MissingGreenlet error. This article shows  you exactly]]></description>
      <pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[backend development]]></category>
      <category><![CDATA[sqlalchemy]]></category>
      <category><![CDATA[alembic]]></category>
    </item>
    <item>
      <title><![CDATA[Externally-managed Python Environments and uv]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/externally-managed-python-environments</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/externally-managed-python-environments</guid>
      <description><![CDATA[Externally-managed Python environments, dist-packages vs site-packages, and how modern tools like uv handle package isolation.]]></description>
      <pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[Python]]></category>
      
    </item>
    <item>
      <title><![CDATA[Docker Containers: FastAPI + PostgreSQL]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/docker-containers-as-my-development-environment-fastapi-postgresql-1</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/docker-containers-as-my-development-environment-fastapi-postgresql-1</guid>
      <description><![CDATA[How I use Docker containers while developing a FastAPI application with PostgreSQL, using uv as the package manager. I am talking through my current local devel]]></description>
      <pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate>
      <category><![CDATA[Software Development]]></category>
      <category><![CDATA[docker]]></category>
      <category><![CDATA[docker compose]]></category>
      <category><![CDATA[fastapi]]></category>
      <category><![CDATA[postgresql]]></category>
    </item>
    <item>
      <title><![CDATA[SQLAlchemy Through Its Core API]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/sqlalchemy-through-its-core-api-engine-metadata-table</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/sqlalchemy-through-its-core-api-engine-metadata-table</guid>
      <description><![CDATA[SQLAlchemy Core provides an explicit way to define relational schemas and construct SQL using Python. This blog concentrates on the MetaData object and table de]]></description>
      <pubDate>Sun, 21 Dec 2025 00:00:00 GMT</pubDate>
      <category><![CDATA[backend development]]></category>
      
    </item>
    <item>
      <title><![CDATA[Environment Configurations Using Pydantic Settings]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/loading-and-dealing-with-environment-configurations-using-pydantic-settings</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/loading-and-dealing-with-environment-configurations-using-pydantic-settings</guid>
      <description><![CDATA[Loading and Dealing with Environment Configurations Using Pydantic Settings.]]></description>
      <pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate>
      <category><![CDATA[backend development]]></category>
      
    </item>
    <item>
      <title><![CDATA[http and websockets]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/websockets-and-http</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/websockets-and-http</guid>
      <description><![CDATA[WebSocket connections start as normal HTTP GET requests, and if the HTTP server agrees to upgrade the protocol, the connection switches to a full-duplex, bidire]]></description>
      <pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate>
      <category><![CDATA[Web Development]]></category>
      
    </item>
    <item>
      <title><![CDATA[Database schema migrations with Alembic]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/database-schema-migrations-with-alembic</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/database-schema-migrations-with-alembic</guid>
      <description><![CDATA[Evolving database schema alongside your code with Alembic]]></description>
      <pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate>
      <category><![CDATA[backend development]]></category>
      
    </item>
    <item>
      <title><![CDATA[Datetimes, Timezones, and UTC in Python3 (Naive vs Aware Explained)]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/datetimes-timezones-and-utc-in-python</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/datetimes-timezones-and-utc-in-python</guid>
      <description><![CDATA[Dates, times and datetimes can be confusing in programming. This blog explains what they are and how Python handles them, focusing on naive and aware datetimes.]]></description>
      <pubDate>Sun, 23 Nov 2025 00:00:00 GMT</pubDate>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[python3]]></category>
      <category><![CDATA[datetime]]></category>
      <category><![CDATA[timezones]]></category>
      <category><![CDATA[utc]]></category>
    </item>
    <item>
      <title><![CDATA[Handling HttpOnly Cookies Between Next.js and a Backend API on Different Domains]]></title>
      <link>https://blog.niyonshutiemmanuel.com/blog/handling-httponly-cookies-between-nextjs-and-a-backend-api-on-different-domains</link>
      <guid isPermaLink="true">https://blog.niyonshutiemmanuel.com/blog/handling-httponly-cookies-between-nextjs-and-a-backend-api-on-different-domains</guid>
      <description><![CDATA[When your Next.js frontend and backend API are deployed on different domains, middleware can't read httpOnly cookies. Here's why it happens and two practical so]]></description>
      <pubDate>Sat, 15 Nov 2025 00:00:00 GMT</pubDate>
      <category><![CDATA[Web Development]]></category>
      
    </item>
  </channel>
</rss>