<?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 Natan (Capela)</title>
    <description>The latest articles on DEV Community by Guilherme Natan (Capela) (@capela).</description>
    <link>https://dev.to/capela</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%2F2805924%2Fbac3b5bb-3a6d-4a44-a384-b345b909323c.jpg</url>
      <title>DEV Community: Guilherme Natan (Capela)</title>
      <link>https://dev.to/capela</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/capela"/>
    <language>en</language>
    <item>
      <title>🛩️ Idempotência- Clicou duas vezes? Problema seu... ou do seu backend</title>
      <dc:creator>Guilherme Natan (Capela)</dc:creator>
      <pubDate>Wed, 09 Apr 2025 11:32:49 +0000</pubDate>
      <link>https://dev.to/capela/idempotencia-clicou-duas-vezes-problema-seu-ou-do-seu-backend-537b</link>
      <guid>https://dev.to/capela/idempotencia-clicou-duas-vezes-problema-seu-ou-do-seu-backend-537b</guid>
      <description>&lt;h2&gt;
  
  
  Antes de tudo, o que é ser idempotente?
&lt;/h2&gt;

&lt;p&gt;Nada mais do que garantir que uma transação seja executada uma, e somente uma, única vez — mesmo que uma mesma request seja enviada múltiplas vezes ou ocorram falhas durante o processamento. Ok... mas existem coisas que podemos fazer no front-end para evitar que esse tipo de coisa aconteça?? Siiim, você pode e deve fazer esses tratamentos, como implementar loadings. Mas quem garante que a sua aplicação será utilizada apenas por um browser? Já pensou em alguém chamando o backend via Postman? E se o front-end esquecer de implementar esse tratamento em uma parte crítica do sistema?&lt;/p&gt;

&lt;h2&gt;
  
  
  Explicando o problema
&lt;/h2&gt;

&lt;p&gt;O problema ocorre quando há duplicação de registros no banco de dados devido ao processamento de uma mesma requisição mais de uma vez. Isso pode acontecer, por exemplo, em situações onde o banco processa um registro e ocorre alguma falha de comunicação entre a API e o client após a gravação dos dados no banco — e o client envia a mesma requisição novamente para o backend... Imagina o usuário clicando duas vezes seguidas no botão de pagamento em um e-commerce. Isso irá gerar um registro duplicado no banco de dados, o que pode causar prejuízos tanto para o usuário quanto para o negócio. Imagina ter que lidar com pedidos duplicados!&lt;/p&gt;

&lt;p&gt;Claro, existem alguns tratamentos que o próprio front-end pode (e deve) fazer para evitar tais situações, como implementar loadings. Mas como bem sabemos, quem garante que o seu usuário vai estar usando o browser para chamar o seu backend?! E se, por algum motivo, o front esquecer de fazer esse tratamento em uma parte importante do sistema?!&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%2Frcz3qg0nwkqcnihc30se.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%2Frcz3qg0nwkqcnihc30se.png" alt="Image description" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Como podemos evitar tal problema?
&lt;/h2&gt;

&lt;p&gt;Uma solução seria atribuir um ID para cada requisição e persistir esse ID em um cache da API. Caso seja enviada uma segunda requisição, a API consulta se o ID da request consta no cache. Se estiver, a requisição não é repassada para o banco. Se o ID não existir no cache, então a requisição é repassada para o banco.&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%2F85sagbjd9kovwgwhwp9w.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%2F85sagbjd9kovwgwhwp9w.png" alt="Image description" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Como tratar erros no banco?
&lt;/h3&gt;

&lt;p&gt;Caso aconteça algum erro no banco, podemos tomar algumas ações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplesmente repassar o erro 500 para o client (e remover o ID do cache);
&lt;/li&gt;
&lt;li&gt;Adicionar a requisição em uma fila para ser reprocessada posteriormente;
&lt;/li&gt;
&lt;li&gt;Implementar algum algoritmo de retry — nesse caso, se o erro do banco for por excesso de carga, os retries podem piorar a situação.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Boas práticas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Idempotency-Key&lt;/code&gt; deve ter um TTL (tempo de vida), para evitar acúmulo desnecessário.
&lt;/li&gt;
&lt;li&gt;Considere também incluir o endpoint e o corpo da requisição no hash/verificação para prevenir colisões.
&lt;/li&gt;
&lt;li&gt;Armazene respostas serializadas (ex: JSON) na tabela.
&lt;/li&gt;
&lt;li&gt;Implemente o processo apenas em pontos estratégicos do sistema — não vale a pena implementar em toda requisição. Isso adiciona complexidade e overhead que muitas vezes não trazem benefícios reais. O ideal é ser estratégico e aplicar onde ela realmente faz diferença.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E ai curtiu o post ? Se puder deixa um comentário falando o que achou, é  muito importante pra mim  😊&lt;/p&gt;

&lt;p&gt;Abraços do Capela&lt;/p&gt;

&lt;p&gt;Instagram//Threads : &lt;code&gt;@gui.natan&lt;/code&gt;&lt;br&gt;
Linkedin: &lt;a href="https://www.linkedin.com/in/guilhermealecrim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/guilhermealecrim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>api</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🛩️Usando Inteligência Artificial para escalar o atendimento de milhares de usuários</title>
      <dc:creator>Guilherme Natan (Capela)</dc:creator>
      <pubDate>Thu, 13 Feb 2025 23:23:16 +0000</pubDate>
      <link>https://dev.to/capela/usando-inteligencia-artificial-para-escalar-o-atendimento-de-milhares-de-usuarios-27f</link>
      <guid>https://dev.to/capela/usando-inteligencia-artificial-para-escalar-o-atendimento-de-milhares-de-usuarios-27f</guid>
      <description>&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%2Fj2bdm5rj8qknf8caalco.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%2Fj2bdm5rj8qknf8caalco.png" alt="Image description" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para uma empresa que recebe milhares de solicitações de atendimento, minimizar os custos operacionais é um ponto estratégico essencial para permitir que o negócio escale, mantendo as despesas o mais baixo possível. A cada ticket aberto por um usuário que precisa de atendimento humano, há um custo envolvido. Portanto, garantir que os usuários consigam tirar suas dúvidas ou resolver determinados problemas sem a necessidade de intervenção humana é fundamental para que o negócio continue escalando sem aumentar os custos operacionais.&lt;/p&gt;

&lt;p&gt;Nesse contexto de melhoria da experiência do usuário, possibilitando que ele resolva dúvidas sem precisar entrar em contato com um atendimento humano, uma solução bastante natural em tempos de IA é treinar um modelo com todos os artigos do help center da empresa. Isso permite enriquecer os resultados das pesquisas feitas pelos usuários.&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%2Fulm3rsmmylkjy7ujecbn.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%2Fulm3rsmmylkjy7ujecbn.png" alt="Image description" width="403" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neste post, pretendo falar um pouco sobre um possível design que pode ser utilizado para melhorar a experiência dos usuários em uma empresa que recebe milhares de solicitações de atendimento diariamente.&lt;/p&gt;

&lt;p&gt;Em sistemas distribuídos, a única certeza que temos é que, em algum momento, algo falhará. Para garantir a resiliência do sistema, temos um &lt;strong&gt;API Gateway&lt;/strong&gt; que implementa mecanismos de segurança, como rate limit, autenticação, autorização, etc., repassando a requisição do front-end para a &lt;strong&gt;API-IA-Integration&lt;/strong&gt;. Essa API é responsável por realizar alguns tratamentos no input do usuário, como filtro de inputs indesejados, que podem ser consultados em uma base de dados aparte, além de possíveis tratamentos na resposta da IA, como a adição de tags de links nos trechos em que uma URL é exibida para o usuário.&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%2Fpjjk8o1n5o5gl9xz59es.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%2Fpjjk8o1n5o5gl9xz59es.png" alt="Image description" width="800" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Outro mecanismo de resiliência bastante importante é o &lt;strong&gt;circuit breaker&lt;/strong&gt;, implementado na &lt;strong&gt;API-IA-Integration&lt;/strong&gt;. Em caso de indisponibilidade da &lt;strong&gt;API-IA&lt;/strong&gt;, a pesquisa do usuário pode ser redirecionada para o Elasticsearch, retornando apenas uma lista de artigos que melhor correspondem ao input do usuário. Dessa forma, o usuário não receberá uma resposta sumarizada pela IA, mas ao menos terá uma lista de artigos disponíveis como resposta.&lt;/p&gt;

&lt;p&gt;Os artigos são criados e atualizados dentro da plataforma do Zendesk e são copiados tanto para o Elasticsearch quanto para a base utilizada no treinamento do modelo de IA. A &lt;strong&gt;API-IA&lt;/strong&gt; é responsável por definir os parâmetros do modelo e realizar engenharia de prompt, adicionando novos parâmetros além do que foi fornecido como input pelo usuário além do treinamento e ajustes do modelo . &lt;/p&gt;

&lt;p&gt;Um job é responsável por manter atualizadas tanto a base utilizada pelo modelo quanto a do Elasticsearch. Assim, garantimos que, sempre que um artigo for atualizado no Zendesk, tanto o modelo quanto o fallback serão atualizados. A quantidade de artigos cadastrados é relativamente pequena, cerca de 3 mil, mas o modelo treinado pela IA poderá utilizar, além dos artigos, tickets que já foram resolvidos com intervenção humana, garantindo uma maior precisão nas respostas.&lt;/p&gt;

&lt;p&gt;Para identificar melhorias no modelo, são coletados feedbacks dos usuários sobre as respostas. Esses feedbacks são enviados para uma fila de mensagens e encaminhados para um data lake, que é utilizado para análise de dados e para identificar pontos de melhoria no modelo.&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%2Fjppemn1oortqo696og68.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%2Fjppemn1oortqo696og68.png" alt="Image description" width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;É necessário destacar alguns pontos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Em qualquer tipo de modelo de IA, há grandes chances de "alucinação". Logo, é importante deixar claro para os usuários que as respostas fornecidas pelo modelo podem conter erros.&lt;/li&gt;
&lt;li&gt;Para minimizar custos e reduzir as chances de o modelo responder algo inadequado, é essencial incluir filtros de input/output para detectar palavrões, dados sensíveis, etc.&lt;/li&gt;
&lt;li&gt;Coletar feedback dos usuários sobre as respostas é extremamente importante para que a equipe possa avaliar a qualidade do modelo e melhorá-lo continuamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Espero ter conseguido compartilhar um pouco do que aprendi trabalhando nesse contexto. Se gostou do artigo, me siga nas minhas redes sociais!&lt;/p&gt;

&lt;p&gt;Abraços do Capela &lt;br&gt;
Instagram//Threads : @ gui.natan&lt;br&gt;
Linkedin: &lt;a href="https://www.linkedin.com/in/guilhermealecrim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/guilhermealecrim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>ai</category>
      <category>microservices</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🛩️ Expandindo a criatividade e melhorando a produtividade com Obsidian</title>
      <dc:creator>Guilherme Natan (Capela)</dc:creator>
      <pubDate>Thu, 06 Feb 2025 01:41:59 +0000</pubDate>
      <link>https://dev.to/capela/expandindo-a-criatividade-e-melhorando-a-produtividade-com-obsidian-cbm</link>
      <guid>https://dev.to/capela/expandindo-a-criatividade-e-melhorando-a-produtividade-com-obsidian-cbm</guid>
      <description>&lt;p&gt;Estou me preparando para tirar uma certificação da AWS e até então estava usado o próprio Google Docs para tomar notas do conteúdo que estou estudando, simplesmente criei um arquivo e fui fazendo diversas anotações, o problema é que pra revisar  ou até  mesmo criar uma estrutura das  minhas notas que facilitasse  a revisão estava ficando confuso pra não dizer no mínimo chato e foi nesse processo de tentar achar uma ferramenta que me auxiliasse nos estudos que esbarrei com o &lt;strong&gt;Obsidian&lt;/strong&gt; . &lt;/p&gt;

&lt;p&gt;Com a proposta &lt;em&gt;"Construir um segundo cérebro"&lt;/em&gt;  ele é uma excelente ferramenta pra  você conectar tudo aquilo que  anota… É importante dizer que isso muda um pouco o paradigma tradicional de ficar tentando organizar suas anotações de forma linear, por exemplo, se você está estudando sobre Arrays e Listas é natural querer criar um arquivo separando o conteúdo de cada um desses assuntos e provavelmente não teria uma forma de conecta-los com outras coisas do dia-a-dia, como por exemplo um aplicativo de tarefas e listas…  a proposta do Obsidian é exatamente facilitar essas conexões entre diferentes assuntos . &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%2Fri6b4xf07wv5puc77j9w.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%2Fri6b4xf07wv5puc77j9w.png" alt="Image description" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;É importante dizer que não existe uma forma correta ou errada de usar o Obsidian, mas sim a forma que melhor se enquadra no seu dia a dia de trabalho. Muita gente recomenda utilizar a metodologia Zettelkasten pra melhor proveito da ferramenta , e de fato ele é perfeito pra se aplicar essa metodologia , maaaass se vc jamais se quer  ouviu falar dessa dela eu não recomendo começar tentar aplica-la logo de cara, seria como querer a começar a programar já aplicando clean code , acaba sendo uma barreira a mais e deixando as coisas mais difíceis,  mas de fato  para tirar melhor proveito é legal tentar aplica-la. No final do artigo vou deixar alguns links caso  vc queira dar uma conferida .&lt;/p&gt;

&lt;p&gt;Há quem diga que é melhor evitar ficar criando um monte de pastas para organizar suas anotações e que melhor se preocupar apenas com os links entre as anotações,   maaasss como eu disse o Obsidian não tem um conjunto de regras e vc deve usá-lo até encontrar o jeito que mais te agrada.  Eu particularmente ainda não consegui abraçar o completo caos e ainda gosto de manter minhas anotações dentro de algumas macro pastas mais ou menos assim :&lt;br&gt;&lt;br&gt;
    - Trabalho: Coisas relacionados ao meu trabalho &lt;br&gt;
    - Projetos : Projetos pessoais, aqui eu crio uma subpasta pra cada projeto &lt;br&gt;
    - Assets : imagens, vídeos ,etc &lt;br&gt;
    - Calendar: notas diárias , semanais , etc &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%2F2y91g89xy0l2qelqbsfl.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%2F2y91g89xy0l2qelqbsfl.png" alt="Image description" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma outra vantagem  é sua vasta biblioteca de plugins. Os principais que uso são esses : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git: Para salvar meus arquivos na nuvem e  manter meu vault sincronizado &lt;/li&gt;
&lt;li&gt;Flash Cards:   Para criar cartões pra relembrar conteúdo que estudo&lt;/li&gt;
&lt;li&gt;Excalidraw: uso pra criar diagramas &lt;/li&gt;
&lt;li&gt;Dataview: permite criar visualização das minhas notas através de consultas nos atributos de cada nota &lt;/li&gt;
&lt;li&gt;Calendar: controlar minhas notas diárias &lt;/li&gt;
&lt;li&gt;Kanban: pra organizar o andamento  de algumas anotações &lt;/li&gt;
&lt;li&gt;Home: criar uma página home pro meu vault assim facilita  sempre ter um ponto de partida quando abro minhas notas
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pra finalizar vou deixar aqui alguns prós e contras que percebi desde quando comecei a usar o Obsidian. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prós&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rápido e fácil criar conexões entre suas anotações através de links e tags&lt;/li&gt;
&lt;li&gt;Roda local (pra alguns isso pode ser uma desvantagem)&lt;/li&gt;
&lt;li&gt;Milhares de plugins da comunidade , o que da pra customizar bastante a ferramenta&lt;/li&gt;
&lt;li&gt;Gratuito para uso pessoal &lt;/li&gt;
&lt;li&gt;Excelente para estudos &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contras:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não é uma ferramenta nativamente colaborativa &lt;/li&gt;
&lt;li&gt;Backup e sincronização não são automáticos &lt;/li&gt;
&lt;li&gt;Tenha em mente que ele muda um pouco o paradigma de anotação então no começo a curva de aprendizado pode ser mais difícil, mas particularmente pra mim o processo de aprendizado foi bastante divertido &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E ai você já utilizou o Obsidian ? Deixa um comentário ai falando o que achou  ! &lt;br&gt;
Se curtiu o post não esquece de compartilhar &lt;/p&gt;

&lt;p&gt;Abraços do Capela &lt;br&gt;
Instagram//Threads : @gui.natan&lt;br&gt;
Linkedin: &lt;a href="https://www.linkedin.com/in/guilhermealecrim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/guilhermealecrim/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;👉&lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Link para o site oficial&lt;/a&gt; &lt;br&gt;
👉&lt;a href="https://pt.wikipedia.org/wiki/Zettelkasten" rel="noopener noreferrer"&gt;Zettelkasten:&lt;/a&gt;&lt;br&gt;
👉&lt;a href="https://www.youtube.com/watch?v=tAJ6BDIujTE" rel="noopener noreferrer"&gt;Como Tomar Notas Inteligentes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>obsidian</category>
      <category>produtividade</category>
      <category>tools</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
