<?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" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Dan Siwiec on Medium]]></title>
        <description><![CDATA[Stories by Dan Siwiec on Medium]]></description>
        <link>https://medium.com/@dansiwiec?source=rss-69f4dc0eeaf0------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*a0fktd3lMwdXmWGtbG0kuA.png</url>
            <title>Stories by Dan Siwiec on Medium</title>
            <link>https://medium.com/@dansiwiec?source=rss-69f4dc0eeaf0------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 14:19:03 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@dansiwiec/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Building an AI Telegram agent. Part 1: FastAPI Telegram integration]]></title>
            <link>https://danoncoding.com/building-an-ai-telegram-agent-with-python-and-claude-2f18a0d1a6dc?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/2f18a0d1a6dc</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[telegram]]></category>
            <category><![CDATA[ai-agent]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Thu, 16 Oct 2025 04:00:27 GMT</pubDate>
            <atom:updated>2025-10-22T23:49:50.598Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HqmtPNoEtTpnZDCHyoTJJw.png" /></figure><h3>Synthia — Building an AI Telegram agent with Python and Claude. Part 1: FastAPI Telegram integration</h3><h4>Step-by-step guide from zero to a Claude-powered AI Agent</h4><p>Welcome! This will be a series of articles, where we’ll build a general-purpose Telegram AI agent in Python, using Claude. The agent will be able to perform various tasks, such as publishing a research doc on a given topic, checking your calendar for today, or answering questions about the health of running services.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gALUUVVdxz_IhNh6eXUBXg.png" /></figure><p>This will be a series of articles:</p><ul><li>Part 1 (this one): FastAPI Telegram integration</li><li>Part 2: Adding the Claude agent</li><li>Part 3: Adding skills and memories</li></ul><p>For the curious, here’s the stack and technologies we’ll use:</p><ul><li>Python</li><li>FastAPI</li><li>mem0</li><li>MCPs (playwright, mem0)</li></ul><p>All code is available on <a href="https://github.com/danielsiwiec/synthia">GitHub</a>. The code snippets below may be incomplete — I’ll only include the deltas as we progress. For the complete code, refer to the repository. Let’s kick this off, shall we?</p><h3>Prerequisites</h3><ul><li>Python 3.13</li><li>uv (up to you, if you’d like to manage dependencies differently)</li><li>Telegram account</li></ul><h3>Let’s do it</h3><h4>FastAPI app</h4><p>Let’s initialize an empty project. We’ll call it <strong>Synthia.</strong></p><pre>uv init<br><br>Initialized project `synthia`</pre><p>and add a few libraries we’ll need:</p><pre>uv add &quot;fastapi[standard]&quot; python-telegram-bot python-dotenv loguru<br><br>Resolved 42 packages in 1.32s<br>Prepared 10 packages in 591ms<br>Installed 40 packages in 51ms<br>....</pre><p>Also, some dev tools:</p><pre>uv add ruff ty pytest-testmon pre-commit --group dev</pre><p>Let’s make a dummy FastAPI application in synthia/main.py:</p><pre>from fastapi import FastAPI<br><br>app = FastAPI()<br><br><br>@app.get(&quot;/&quot;)<br>async def root():<br>    return {&quot;status&quot;: &quot;OK&quot;}</pre><p>and add a Makefile to simplify starting it:</p><pre>dev:<br> uv run uvicorn synthia.main:app --host 0.0.0.0 --port 8001 --reload<br><br>start:<br> uv run uvicorn synthia.main:app --host 0.0.0.0 --port 8001<br><br>test:<br> uv run pytest tests/ --testmon<br><br>lint:<br> uv run ruff check . --fix --unsafe-fixes<br><br>check: format type lint<br><br>format:<br> uv run ruff format .<br><br>type:<br> uv run ty check .</pre><p>Let’s also add some reasonable defaults in pyproject.toml</p><pre>[build-system]<br>requires = [&quot;hatchling&quot;]<br>build-backend = &quot;hatchling.build&quot;<br><br>[tool.hatch.build.targets.wheel]<br>packages = [&quot;synthia&quot;]<br><br>[tool.ruff]<br>target-version = &quot;py313&quot;<br>line-length = 120</pre><p>Now, run make dev in one terminal and test the connection to the server:</p><pre>curl http://localhost:8001<br><br>{&quot;status&quot;:&quot;OK&quot;}</pre><p>Let’s be good citizens, and also add a test in tests/test_e2e.py .</p><pre>import pytest<br>from fastapi.testclient import TestClient<br><br>from synthia.main import app<br><br><br>def test_smoke():<br>    client = TestClient(app)<br>    response = client.get(&quot;/&quot;)<br>    assert response.status_code == 200<br>    assert response.json() == {&quot;status&quot;: &quot;OK&quot;}</pre><p>Sweet, we’re done with the FastAPI part. Let’s set up Telegram integration.</p><h4>Telegram integration</h4><p>Setting up a Telegram bot is explained in detail in the official <a href="https://core.telegram.org/bots/tutorial">docs</a>, but since it’s really easy, I’ll include the steps here.</p><p>First, we need to get our own Telegram bot token. Open a chat with <a href="https://telegram.me/BotFather">BotFather</a>, enter /newbot, and provide a name and a username.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zjJaZWkban_UXQfDMkJJZg.png" /></figure><p>You’ll get an API token in return. Let’s put it in a .envfile and add it to .gitignore to prevent committing.</p><pre>echo &quot;TELEGRAM_BOT_TOKEN=&lt;YOUR_BOT_TOKEN&gt;&quot; &gt; .env<br>echo &quot;\n.env&quot; &gt;&gt; .gitignore</pre><p>Now we need the ID of the Telegram Chat with the bot, so we can talk to it. Search for your bot in the app and start a chat with it. Now, you can get the chat ID via the Telegram API.</p><pre>curl https://api.telegram.org/bot&lt;YOUR_BOT_TOKEN&gt;/getUpdates<br><br>{<br>  &quot;ok&quot;: true,<br>  &quot;result&quot;: [<br>    {<br>      &quot;update_id&quot;: 269387972,<br>      &quot;message&quot;: {<br>        &quot;message_id&quot;: 1,<br>        ...<br>        &quot;chat&quot;: {<br>          &quot;id&quot;: &lt;CHAT_ID&gt;<br>          ....<br>        },<br>        ...<br>      }<br>    }<br>}</pre><p>Add the chat ID to .env as TELEGRAM_CHAT_ID . Now, we’re ready to have Syntia talk to Telegram. Let’s add telegram.py , a client for all Telegram interactions:</p><pre>from telegram import Bot<br>from loguru import logger<br><br>class Telegram:<br>    def __init__(self, token: str, chat_id: str):<br>        self.chat_id = chat_id<br>        self.bot = Bot(token=token)<br><br>    async def start(self):<br>        try:<br>            await self.send_message(message=&quot;Synthia connected 👋&quot;)<br>        except Exception as _e:<br>            logger.error(f&quot;Telegram application failed to start: {_e}&quot;)<br><br>    async def send_message(self, message: str):<br>        await self.bot.send_message(chat_id=self.chat_id, text=message)</pre><p>and wire it up in main.py</p><pre>async def lifespan(app: FastAPI):<br>    telegram = Telegram(token=os.environ[&quot;TELEGRAM_BOT_TOKEN&quot;], chat_id=os.environ[&quot;TELEGRAM_CHAT_ID&quot;])<br>    await telegram.start()<br>    yield<br><br>app = FastAPI(title=&quot;Synthia&quot;, lifespan=lifespan)<br><br>load_dotenv()</pre><p>When the application restarts, you should see this in your Telegram chat:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nAWjMSDC4hJVylOh8Y0bSQ.png" /></figure><p>Let’s now add a message handler that will allow Synthia to receive messages. We’ll also implement a poor man’s authentication (⚠️ this is not production grade!), allowing Synthia to receive only our message. For now, just responding with the same message.</p><pre>class Telegram:<br>    def __init__(self, token: str, chat_id: str):<br>        ...<br>        self.application = Application.builder().token(token).build()<br>        self.application.add_handler(MessageHandler(callback=self._on_message, filters=filters.TEXT))<br><br>    async def start(self):<br>        try:<br>            await self.application.initialize()<br>            await self.application.start()<br>            await self.application.updater.start_polling()<br>            await self.send_message(message=&quot;Synthia connected 👋&quot;)<br>        except Exception as _e:<br>            logger.error(f&quot;Telegram application failed to start: {_e}&quot;)<br><br>    async def send_message(self, message: str):<br>        await self.bot.send_message(chat_id=self.chat_id, text=message)<br><br>    async def _on_message(self, update: Update, context: ContextTypes.DEFAULT_TYPE):<br>        if update.message.from_user.id != int(self.chat_id):<br>            return<br>        message = update.message.text<br>        await self.send_message(message=f&quot;Right back at you: {message}&quot;)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0dd22NVWJ2oDpUlEbKFE2g.png" /></figure><h3>Summary</h3><p>This is it for Part 1. We now have a working Telegram Bot with two-way communication. All code for this part is available on <a href="https://github.com/danielsiwiec/synthia/releases/tag/part-1">GitHub</a>, under ‘part-1’ tag. In Part 2, we’ll add Claude integration 🤖</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2f18a0d1a6dc" width="1" height="1" alt=""><hr><p><a href="https://danoncoding.com/building-an-ai-telegram-agent-with-python-and-claude-2f18a0d1a6dc">Building an AI Telegram agent. Part 1: FastAPI Telegram integration</a> was originally published in <a href="https://danoncoding.com/">Dan On Coding</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Kubernetes Gateway API — lessons from the trenches]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/kubernetes-gateway-api-lessons-from-the-trenches-a1f6875d5d84?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/900/1*vKCM73uV8JTAGYuhTPrJZw@2x.jpeg" width="900"></a></p><p class="medium-feed-snippet">Takeaways from one year of working with the new Kubernetes API</p><p class="medium-feed-link"><a href="https://danoncoding.com/kubernetes-gateway-api-lessons-from-the-trenches-a1f6875d5d84?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/kubernetes-gateway-api-lessons-from-the-trenches-a1f6875d5d84?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/a1f6875d5d84</guid>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[cloud-engineering]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Fri, 22 Mar 2024 23:05:58 GMT</pubDate>
            <atom:updated>2024-03-23T05:18:03.121Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Part 2: Why I quit software consulting. And should you?]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/part-2-why-i-quit-software-consulting-138ae9a2e73c?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/2600/0*lKzt9SWy2UjBMEn7" width="4608"></a></p><p class="medium-feed-snippet">After some years in consulting, how do you know when to move on?</p><p class="medium-feed-link"><a href="https://danoncoding.com/part-2-why-i-quit-software-consulting-138ae9a2e73c?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/part-2-why-i-quit-software-consulting-138ae9a2e73c?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/138ae9a2e73c</guid>
            <category><![CDATA[careers]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[consulting]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Tue, 19 Mar 2024 00:39:23 GMT</pubDate>
            <atom:updated>2024-03-19T00:54:49.840Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Part 1: Is consulting a good place to start your career in Software? (shhh yes, it is )]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/is-consulting-a-good-place-to-start-your-career-in-software-shhh-yes-it-is-985cb4095e52?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/2600/0*nRyHUvenxVasYdC_" width="5355"></a></p><p class="medium-feed-snippet">Food for thought on consulting vs FAANG</p><p class="medium-feed-link"><a href="https://danoncoding.com/is-consulting-a-good-place-to-start-your-career-in-software-shhh-yes-it-is-985cb4095e52?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/is-consulting-a-good-place-to-start-your-career-in-software-shhh-yes-it-is-985cb4095e52?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/985cb4095e52</guid>
            <category><![CDATA[consulting]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[faang]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[careers]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Sat, 24 Feb 2024 03:05:44 GMT</pubDate>
            <atom:updated>2024-03-19T00:54:07.844Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Tricky Kubernetes memory management for Java applications]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/tricky-kubernetes-memory-management-for-java-applications-d2f88dd4e9f6?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/1768/1*o6Gr-RQ5K2PY5yo2VQlHKg.png" width="1768"></a></p><p class="medium-feed-snippet">How to use the Kubernetes memory requests and limits in combination with JVM Heap and  stay out of trouble.</p><p class="medium-feed-link"><a href="https://danoncoding.com/tricky-kubernetes-memory-management-for-java-applications-d2f88dd4e9f6?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/tricky-kubernetes-memory-management-for-java-applications-d2f88dd4e9f6?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/d2f88dd4e9f6</guid>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[jvm]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Wed, 16 Nov 2022 03:07:56 GMT</pubDate>
            <atom:updated>2023-08-16T04:49:01.058Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Why you should learn Kotlin if you’re a Java Developer]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/kotlin-for-java-developers-with-examples-df9b66beb904?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/1230/1*i_rsotCwlKgsl_h_G5sFHQ.png" width="1230"></a></p><p class="medium-feed-snippet">Kotlin is on the rise! What&#x2019;s in it for you? Why switch? Where to start?</p><p class="medium-feed-link"><a href="https://danoncoding.com/kotlin-for-java-developers-with-examples-df9b66beb904?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/kotlin-for-java-developers-with-examples-df9b66beb904?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/df9b66beb904</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[learning-programming]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[kotlin]]></category>
            <category><![CDATA[java]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Sat, 11 Jun 2022 01:45:54 GMT</pubDate>
            <atom:updated>2022-06-12T19:20:24.900Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[7 Traits of a Lead Software Engineer]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/traits-of-a-lead-software-engineer-ac993c1e8ed7?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/2600/0*tuv8eteorYWi7-cC" width="7952"></a></p><p class="medium-feed-snippet">How is this exciting role different? What new skills do you need and how to develop them?</p><p class="medium-feed-link"><a href="https://danoncoding.com/traits-of-a-lead-software-engineer-ac993c1e8ed7?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/traits-of-a-lead-software-engineer-ac993c1e8ed7?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/ac993c1e8ed7</guid>
            <category><![CDATA[agile]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[leadership]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Fri, 27 May 2022 23:51:28 GMT</pubDate>
            <atom:updated>2022-05-28T07:35:35.159Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Event-Driven Architecture. Part 1: Pros and cons with examples]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/event-driven-architecture-part-1-pros-and-cons-with-examples-a2e5161fbcbd?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/1890/1*whx8kk4B_WzF3Wz6ifc24g.png" width="1890"></a></p><p class="medium-feed-snippet">Is this the right approach for you? When to go for it and when to pass?</p><p class="medium-feed-link"><a href="https://danoncoding.com/event-driven-architecture-part-1-pros-and-cons-with-examples-a2e5161fbcbd?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/event-driven-architecture-part-1-pros-and-cons-with-examples-a2e5161fbcbd?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/a2e5161fbcbd</guid>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[kafka]]></category>
            <category><![CDATA[microservices]]></category>
            <category><![CDATA[event-driven-architecture]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Wed, 25 May 2022 11:19:16 GMT</pubDate>
            <atom:updated>2022-05-25T13:02:15.693Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[5 Timeless Books for Software Engineers]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/5-timeless-books-for-software-engineers-31fbedfe1e07?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/1706/1*bEwEm__kT-i9zDTgClGmLA.png" width="1706"></a></p><p class="medium-feed-snippet">Five absolutely timeless books for Software Engineers which are more relevant than ever before.</p><p class="medium-feed-link"><a href="https://danoncoding.com/5-timeless-books-for-software-engineers-31fbedfe1e07?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/5-timeless-books-for-software-engineers-31fbedfe1e07?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/31fbedfe1e07</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[architecture]]></category>
            <category><![CDATA[books]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Sat, 09 Apr 2022 00:55:42 GMT</pubDate>
            <atom:updated>2022-04-09T01:26:10.420Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Monorepos for Microservices Part 3: Pipeline Implementation on Jenkins]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://danoncoding.com/monorepos-for-microservices-part-3-pipeline-implementation-on-jenkins-d709f59b62f?source=rss-69f4dc0eeaf0------2"><img src="https://cdn-images-1.medium.com/max/1764/1*jamn7Cg5nVnhr1D56AgKXA.png" width="1764"></a></p><p class="medium-feed-snippet">This is Part 3 of the Monorepos for Microservices series. Read Part 1 on the pros and cons of a monorepo and Part 2 on structuring the&#x2026;</p><p class="medium-feed-link"><a href="https://danoncoding.com/monorepos-for-microservices-part-3-pipeline-implementation-on-jenkins-d709f59b62f?source=rss-69f4dc0eeaf0------2">Continue reading on Dan On Coding »</a></p></div>]]></description>
            <link>https://danoncoding.com/monorepos-for-microservices-part-3-pipeline-implementation-on-jenkins-d709f59b62f?source=rss-69f4dc0eeaf0------2</link>
            <guid isPermaLink="false">https://medium.com/p/d709f59b62f</guid>
            <category><![CDATA[jenkins]]></category>
            <category><![CDATA[microservices]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[ci-cd-pipeline]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Dan Siwiec]]></dc:creator>
            <pubDate>Thu, 24 Mar 2022 19:01:19 GMT</pubDate>
            <atom:updated>2022-03-24T21:51:09.956Z</atom:updated>
        </item>
    </channel>
</rss>