<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Guilherme Stein</title>
    <description>The latest articles on DEV Community by Guilherme Stein (@guisteink).</description>
    <link>https://dev.to/guisteink</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F841541%2F31fcee04-132e-405c-8b4f-0688c3b34626.jpeg</url>
      <title>DEV Community: Guilherme Stein</title>
      <link>https://dev.to/guisteink</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/guisteink"/>
    <language>en</language>
    <item>
      <title>Spec-Driven Development (SDD): O fim do "Vibe Coding" ou a evolução dele?</title>
      <dc:creator>Guilherme Stein</dc:creator>
      <pubDate>Wed, 25 Feb 2026 16:44:01 +0000</pubDate>
      <link>https://dev.to/guisteink/spec-driven-development-sdd-o-fim-do-vibe-coding-ou-a-evolucao-dele-b9n</link>
      <guid>https://dev.to/guisteink/spec-driven-development-sdd-o-fim-do-vibe-coding-ou-a-evolucao-dele-b9n</guid>
      <description>&lt;p&gt;A IA mudou a velocidade da escrita de código, mas a manutenção do contexto continua sendo o maior gargalo na engenharia. O que muitos chamam de &lt;strong&gt;"Vibe Coding"&lt;/strong&gt;  (jogar prompts soltos e esperar o melhor) colapsa rápido em sistemas complexos. O &lt;strong&gt;SDD&lt;/strong&gt; é o novo paradigma que ganha força para inverter essa lógica.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1lqartmyude269z1wrm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1lqartmyude269z1wrm.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Spec como Fonte da Verdade
&lt;/h3&gt;

&lt;p&gt;No SDD, o código deixa de ser o ativo principal e passa a ser um &lt;strong&gt;subproduto&lt;/strong&gt;. A fonte da verdade é a &lt;strong&gt;Especificação (Spec)&lt;/strong&gt;: um documento técnico (Markdown ou qualquer) que descreve intenções, regras e restrições.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Seu novo papel:&lt;/strong&gt; Arquiteto e Revisor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Papel da IA:&lt;/strong&gt; Executor e Implementador.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foco:&lt;/strong&gt; A prioridade muda de "como escrever a função" (sintaxe) para "o que o sistema deve fazer" (intenção).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Produtividade: Métrica Token/PR
&lt;/h3&gt;

&lt;p&gt;Em 2026 e adiante, a eficiência de um dev não será mais medida por linhas de código, mas sim pela relação &lt;strong&gt;Tokens gastos -&amp;gt; PR -&amp;gt; Nova feature entregue&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vibe Coding:&lt;/strong&gt; Consumo altíssimo de tokens. A IA "anda em círculos" tentando adivinhar intenções enquanto quebra o legado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDD:&lt;/strong&gt; Uma spec bem escrita reduz as interações. O agente recebe o contexto completo e gera o Pull Request (PR) de forma cirúrgica. Menos tokens por PR entregue é o novo indicador de uma comunicação técnica afiada.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Context Drift e Retrabalho
&lt;/h3&gt;

&lt;p&gt;Agentes de IA perdem o contexto conforme o projeto cresce (&lt;strong&gt;Context Drift&lt;/strong&gt;). O SDD resolve isso forçando o modelo a voltar sempre para a base técnica da Spec, evitando o loop infinito de "conserta aqui, quebra ali".&lt;/p&gt;

&lt;h3&gt;
  
  
  Tradeoffs: Velocidade Real vs. Escrita Rápida
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;O Custo:&lt;/strong&gt; Existe um &lt;em&gt;overhead&lt;/em&gt; inicial de pensamento. Você gasta mais tempo validando a lógica em texto antes do primeiro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O Ganho:&lt;/strong&gt; A velocidade real vem da &lt;strong&gt;eliminação do retrabalho&lt;/strong&gt;. Se a Spec está 10/10, a implementação vira uma commodity descartável.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;O diferencial do engenheiro hoje é a capacidade de orquestrar sistemas. Quem não souber especificar com rigor, fazer um bom troubleshooting e enxergar sistemas de forma macro passará o dia brigando com prompts.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Kafka e mensageria assíncrona em 5 minutos</title>
      <dc:creator>Guilherme Stein</dc:creator>
      <pubDate>Mon, 27 Nov 2023 15:17:05 +0000</pubDate>
      <link>https://dev.to/guisteink/kafka-e-mensageria-assincrona-em-5-minutos-1fdd</link>
      <guid>https://dev.to/guisteink/kafka-e-mensageria-assincrona-em-5-minutos-1fdd</guid>
      <description>&lt;h2&gt;
  
  
  Objetivo
&lt;/h2&gt;

&lt;p&gt;Nesse post voce não vai aprender a implementar de forma técnica Kafka e mensageria assíncrona em seu sistema, e sim entender como ele funciona de forma simples e abstraída.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lets go
&lt;/h3&gt;

&lt;p&gt;Imagine que temos um caderno 📚. Neste caderno, algumas pessoas querem apenas &lt;strong&gt;ESCREVER&lt;/strong&gt; coisas, e outras querem apenas &lt;strong&gt;LER&lt;/strong&gt; o que está escrito. Chamaremos de PUBs e SUBs, respectivamente, essas pessoas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fft8djzxljg3nehuy0lxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fft8djzxljg3nehuy0lxd.png" alt=" " width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As pessoas que escrevem no caderno têm algo importante para compartilhar, então elas abrem o caderno e escrevem suas mensagens. Essas mensagens podem ser sobre qualquer coisa, como histórias, pensamentos ou até mesmo tarefas que precisam ser feitas.&lt;/p&gt;

&lt;p&gt;Por outro lado, as pessoas que só querem ler podem vir ao caderno a qualquer momento, abrir e ler as mensagens que foram escritas pelos escritores. Eles não precisam estar lá quando a mensagem é escrita; podem ler mais tarde, dependendo da estratégia preestabelecida (não vamos nos concentrar nisso).&lt;/p&gt;

&lt;p&gt;A parte legal é que os leitores não precisam esperar pelos escritores. Eles podem continuar fazendo suas tarefas e voltar ao caderno quando quiserem. As mensagens ficam lá esperando por eles ⏰⏰⏰.&lt;/p&gt;

&lt;p&gt;E no nosso caderno nao precisamos ter apenas escritores, podemos ter desenhistas, compositores, poetas e todo e qualquer outro tipo de produtor que queira se expressar no nosso espaco.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjy7k7m9g2dz9lvucr00w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjy7k7m9g2dz9lvucr00w.png" alt=" " width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então, resumindo,&lt;/p&gt;

&lt;p&gt;Kafka é como um assistente que cuida do caderno. Ele garante que as mensagens sejam salvas com segurança e que os leitores possam pegá-las sempre que quiserem. Os escritores também não precisam se preocupar se os leitores estão lá ou não. Eles apenas escrevem, e Kafka cuida do resto.&lt;/p&gt;

&lt;p&gt;Mensageria assíncrona significa que os escritores não precisam esperar pelos leitores. Eles escrevem suas mensagens quando quiserem, e os leitores podem lê-las no seu próprio tempo. É como se os escritores deixassem recados para os leitores, e estes pudessem chegar e ler esses recados quando achassem conveniente. Nossos PUBs são nossos Publishers e nossos SUBs são nossos Subscribers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alinhando com o conceito de Microsserviços
&lt;/h3&gt;

&lt;p&gt;Agora, imagine que o caderno ficou muito popular e diversas pessoas (PUBs) querem usá-lo para compartilhar diferentes tipos de informação. &lt;/p&gt;

&lt;p&gt;Então, em vez de ter apenas um caderno, podemos ter vários cadernos (que também podemos chamar de TÓPICOS) e cada um dedicado a um tipo diferente de mensagem. O microsserviço nesse cenário fica responsável por escrever e/ou ler em determinado caderno (às vezes os dois).&lt;/p&gt;

&lt;p&gt;Essa abordagem é como uma maneira organizada e eficiente de compartilhar informações importantes!&lt;/p&gt;

</description>
      <category>pubsub</category>
      <category>async</category>
      <category>await</category>
      <category>kafka</category>
    </item>
    <item>
      <title>How to ensure code quality with automated pipelines on your codebase 🛠️⚙️🚨</title>
      <dc:creator>Guilherme Stein</dc:creator>
      <pubDate>Sat, 15 Apr 2023 18:22:20 +0000</pubDate>
      <link>https://dev.to/guisteink/how-to-ensure-code-quality-with-automated-pipelines-on-codebase-51fi</link>
      <guid>https://dev.to/guisteink/how-to-ensure-code-quality-with-automated-pipelines-on-codebase-51fi</guid>
      <description>&lt;p&gt;Automated pipelines have become an essential part of the software development process. They help ensure that code is tested and deployed consistently, saving time and reducing the possibility of errors. Here, we'll show you how to create an automated pipeline using GitHub Actions that is simple and efficient, and that ensures that committed code to the main branch is only merged if it passes through the configured pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Set up the GitHub Actions environment&lt;/strong&gt;&lt;br&gt;
First, we need to understand that GitHub recognizes that you have a configuration for actions when you create the ".github/workflows" folder in your repository. You can do this in two ways, either through GitHub's GUI by clicking on the "Actions" tab and selecting "Set up a workflow yourself". This will allow you to create a new pipeline configuration file. Or you can manually create the directory in your repository and commit the change. The "main.yml" file will be your pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Define the trigger for the pipeline&lt;/strong&gt;&lt;br&gt;
The next step is to define the trigger for your automated pipeline. This is done using the "push" event, which triggers the pipeline whenever a commit is made to the main branch of your repository. To define the trigger for the pipeline, add the following code to the "main.yml" file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;on:
  push:
    branches:
      - main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Define the jobs of the pipeline&lt;/strong&gt;&lt;br&gt;
Now it's time to define the jobs that will be executed by the pipeline. A job is a specific task that should be performed by the pipeline, such as unit or integration tests, code builds, etc. You can define several jobs for your automated pipeline.&lt;/p&gt;

&lt;p&gt;To keep your code healthy, we suggest defining at least two jobs: one for unit tests and one for integration tests. Here is an example of how to define a unit test job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jobs:

  unit-tests:

    runs-on: ubuntu-latest

    steps:
      - name: Use Node.js
        uses: actions/checkout@v2

      - name: Install dependencies
        run: npm install

      - name: Running unit tests
        run: npm run test:unit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This job performs the following steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checkout code.&lt;/li&gt;
&lt;li&gt;Install the necessary dependencies.&lt;/li&gt;
&lt;li&gt;Run unit tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Going deeper into the pipeline&lt;/strong&gt;&lt;br&gt;
Personally, I like pipelines that merge into my main branch only if all tests pass. Here's an example pipeline that gives me that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: project-name
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:

  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Use Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 16.x

    - name: Install dependencies
      run: npm install

    - name: Checking lint
      run: npm run lint

    - name: Running unit tests
        run: npm run test:unit

    - name: Start application
      run: npm start &amp;amp;

    - name: Wait for application to start
      run: sleep 10s

    - name: Test health-check endpoint
      run: curl http://localhost:3333/api/health-check

    - name: Check for errors
      if: ${{ job.status != 'success' }}
      run: exit 1

    - name: Merge to main
      if: ${{ job.status == 'success' }}
      uses: ad-m/github-push-action@v0.6.0
      with:
        branch: main
        github_token: ${{ secrets.ACCESS_TOKEN }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, in this case we need to configure a permission setting in GitHub Actions.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Settings -&amp;gt; Actions -&amp;gt; General -&amp;gt; Workflow permissions and choose read and write permissions&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And voila, you now have a setup to ensure good commits in your code 😄😄😄.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jbiwhb01gsfz6r4jq9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jbiwhb01gsfz6r4jq9j.png" alt=" " width="562" height="57"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Refs&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/actions" rel="noopener noreferrer"&gt;https://github.com/actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guisteink/4uth" rel="noopener noreferrer"&gt;https://github.com/guisteink/4uth&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>githubactions</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Serverless + JS: Um bot de web-scrapping diário</title>
      <dc:creator>Guilherme Stein</dc:creator>
      <pubDate>Mon, 14 Nov 2022 20:32:38 +0000</pubDate>
      <link>https://dev.to/guisteink/serverless-js-um-bot-de-web-scrapping-diario-1amb</link>
      <guid>https://dev.to/guisteink/serverless-js-um-bot-de-web-scrapping-diario-1amb</guid>
      <description>&lt;h3&gt;
  
  
  Introducao
&lt;/h3&gt;

&lt;p&gt;Se você está procurando uma maneira eficiente de coletar informações da web e não quer se preocupar com a infraestrutura de servidores, você precisa conhecer o poder do Serverless. O Serverless é um framework que permite criar arquiteturas sem servidores orientadas a eventos. Isso significa que você pode se concentrar nos eventos e comportamentos esperados em seus projetos, em vez de se preocupar com as máquinas que devem executá-los.&lt;/p&gt;

&lt;p&gt;Ao usar o Serverless, você pode economizar tempo e dinheiro, pois só paga pelos recursos que usa. Além disso, para os desenvolvedores iniciantes, o Serverless oferece a possibilidade de criar projetos sem ter que lidar com a complexidade da infraestrutura.&lt;/p&gt;

&lt;p&gt;Neste post, mostrarei como criei um bot de web-scrapping diário usando Serverless e JavaScript para informar o cardápio do restaurante universitário da minha faculdade pelo Telegram. O projeto está disponível em meu repositório GitHub (&lt;a href="https://github.com/guisteink/sls-menu-service" rel="noopener noreferrer"&gt;https://github.com/guisteink/sls-menu-service&lt;/a&gt;), e vou presumir que você tenha um conhecimento básico em Serverless.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuracoes de infraestrutura
&lt;/h3&gt;

&lt;p&gt;O maximo que voce vai precisar saber configurar de infra nesse projeto sera isso.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;provider:
  name: aws
  runtime: nodejs12.x
  memorySize: 128
  stage: v2
  region: sa-east-1
  timeout: 30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simples assim!&lt;/p&gt;

&lt;p&gt;Duas funções são executadas diariamente às 10h45 e 15h45 para capturar o almoço e o jantar do dia, respectivamente. Essas funções são agendadas via Lambda e consomem o método de scraping do site que contém o cardápio diário. Em seguida, a mensagem é tratada com alguns regex para melhor identificação no Telegram e enviada para o bot, que direciona a mensagem para o grupo (&lt;a href="https://t.me/cardapioufes" rel="noopener noreferrer"&gt;https://t.me/cardapioufes&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr9tfkwq87gasv4x2hjp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr9tfkwq87gasv4x2hjp.gif" alt=" " width="760" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Funcoes
&lt;/h3&gt;

&lt;p&gt;O handler dispara o mecanismo citado, e pode ser ativado de duas maneiras: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pelo job agendado;&lt;/li&gt;
&lt;li&gt;Por uma chamada http (POST) na rota.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tambem existe o endpoint para receber o cardapio diario via REST, dando um GET na rota. Em casos de consumo da API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;functions:
  getMenuOfTheDay:
    handler: src/endpoints/getMenuOfTheDay.handler
    events:
      - http:
          method: GET
          path: /menu
  sendLunchMessageToGroup:
    handler: src/endpoints/scheduleEvent.handler
    events:
      - http:
          method: POST
          path: /message/almoco
      - schedule:
          rate:
            - cron(45 13 * * * *)
          enabled: true
          input:
            dish: almoco
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusao
&lt;/h3&gt;

&lt;p&gt;Esse é apenas um exemplo do que é possível fazer com a arquitetura Serverless. Com ela, você pode criar projetos escaláveis e eficientes, economizando tempo e dinheiro. Além disso, com o Serverless, você pode se concentrar na lógica do seu projeto, em vez de se preocupar com a infraestrutura de servidores.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referencias
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/serverless-framework/" rel="noopener noreferrer"&gt;https://www.udemy.com/course/serverless-framework/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://core.telegram.org/bots" rel="noopener noreferrer"&gt;https://core.telegram.org/bots&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guisteink/sls-menu-service" rel="noopener noreferrer"&gt;https://github.com/guisteink/sls-menu-service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>webscrapping</category>
      <category>serverless</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
