<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Architecture | The .NET Blog</title><link>https://thedotnetblog.com/fr/tags/architecture/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>fr</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/fr/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>SDD Conference 2026</title><link>https://thedotnetblog.com/fr/events/sdd-conference-2026/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/fr/events/sdd-conference-2026/</guid><description>Une conférence de 5 jours sur le développement logiciel au Barbican Centre à Londres avec 78 sessions et 14 workshops couvrant architecture, .NET, IA, Azure, DevOps et plus.</description><content:encoded>&lt;p&gt;&lt;strong&gt;SDD 2026&lt;/strong&gt; se déroule du &lt;strong&gt;11 au 15 mai 2026&lt;/strong&gt; au &lt;strong&gt;Barbican Centre à Londres&lt;/strong&gt;. La conférence principale de 3 jours va du mardi au jeudi, avec des workshops optionnels d&amp;rsquo;une journée le lundi et le vendredi.&lt;/p&gt;
&lt;p&gt;Avec &lt;strong&gt;78 sessions&lt;/strong&gt; et &lt;strong&gt;14 workshops&lt;/strong&gt;, c&amp;rsquo;est l&amp;rsquo;une des conférences développeurs les plus denses en Europe.&lt;/p&gt;
&lt;h2 id="sujets"&gt;Sujets&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pensée Architecturale&lt;/li&gt;
&lt;li&gt;Code Fonctionnel en C# 13&lt;/li&gt;
&lt;li&gt;Design Serverless&lt;/li&gt;
&lt;li&gt;IA Sémantique&lt;/li&gt;
&lt;li&gt;Azure Kubernetes Services&lt;/li&gt;
&lt;li&gt;Stratégies Lean DevOps&lt;/li&gt;
&lt;li&gt;The Model Context Protocol (MCP)&lt;/li&gt;
&lt;li&gt;IA Agentique en .NET&lt;/li&gt;
&lt;li&gt;Refactoring du Monolithe&lt;/li&gt;
&lt;li&gt;Coder Plus Vite avec les LLMs&lt;/li&gt;
&lt;li&gt;Cryptographie dans un Monde Post-Quantique&lt;/li&gt;
&lt;li&gt;Développement Local First&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="speakers"&gt;Speakers&lt;/h2&gt;
&lt;p&gt;Un plateau de classe mondiale avec &lt;strong&gt;Kevlin Henney&lt;/strong&gt;, &lt;strong&gt;Neal Ford&lt;/strong&gt;, &lt;strong&gt;Sander Hoogendoorn&lt;/strong&gt;, &lt;strong&gt;Andrew Clymer&lt;/strong&gt;, &lt;strong&gt;Jacqui Read&lt;/strong&gt;, &lt;strong&gt;Christian Weyer&lt;/strong&gt;, &lt;strong&gt;Jeff Prosise&lt;/strong&gt;, &lt;strong&gt;Jules May&lt;/strong&gt;, &lt;strong&gt;Oliver Sturm&lt;/strong&gt; et &lt;strong&gt;Raju Gandhi&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="billets-et-informations"&gt;Billets et informations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/"&gt;Site de l&amp;rsquo;événement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddvault.s3.amazonaws.com/assets/SDD_2026_schedule.pdf"&gt;PDF de l&amp;rsquo;agenda complet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/register"&gt;Options d&amp;rsquo;inscription&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;98 % des participants de SDD 2025 ont évalué l&amp;rsquo;expérience globale comme bonne, très bonne ou excellente.&lt;/p&gt;</content:encoded></item><item><title>Créer une application de conférence IA avec la pile composable de .NET</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</guid><description>Microsoft a créé ConferencePulse — une application Blazor pour les conférences en direct — en combinant Microsoft.Extensions.AI, DataIngestion, VectorData, MCP et Agent Framework. Voici comment les pièces s'assemblent.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ce post a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;Créer une application de conférence IA avec la pile composable de .NET&lt;/a&gt; — Microsoft a créé ConferencePulse, une application Blazor Server pour les sessions de conférence en direct, en combinant cinq bibliothèques d&amp;rsquo;extension .NET. Elle a été utilisée au MVP Summit.&lt;/p&gt;
&lt;h2 id="ce-que-fait-conferencepulse"&gt;Ce que fait ConferencePulse&lt;/h2&gt;
&lt;p&gt;ConferencePulse s&amp;rsquo;exécute pendant les sessions en direct et fournit : des sondages générés par l&amp;rsquo;IA à partir du contenu de la session, des questions-réponses du public avec un pipeline RAG puisant dans une base de connaissances en direct, des insights générés automatiquement et des résumés de sessions produits par plusieurs agents IA concurrents. La pile est .NET 10, Blazor Server, Aspire, répartie sur cinq projets : Web, Core, Ingestion, Agents, Mcp et AppHost.&lt;/p&gt;
&lt;h2 id="microsoftextensionsai--une-abstraction-pour-tout"&gt;Microsoft.Extensions.AI : une abstraction pour tout&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;IChatClient&lt;/code&gt; est l&amp;rsquo;abstraction unifiée — on la configure une fois et la même interface fonctionne pour Azure OpenAI, OpenAI, Anthropic ou tout autre fournisseur. Six lignes pour obtenir un client entièrement configuré avec l&amp;rsquo;invocation de fonctions, le traçage OpenTelemetry et le middleware de journalisation :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(...).&lt;/span&gt;&lt;span class="n"&gt;GetChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-4o&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFunctionInvocation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseOpenTelemetry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseLogging&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le même &lt;code&gt;IChatClient&lt;/code&gt; est réutilisé plus tard pour l&amp;rsquo;étape d&amp;rsquo;enrichissement de l&amp;rsquo;ingestion de données — pas besoin d&amp;rsquo;un client séparé pour cela.&lt;/p&gt;
&lt;h2 id="pipeline-dataingestion"&gt;Pipeline DataIngestion&lt;/h2&gt;
&lt;p&gt;Le contenu de la session circule dans un pipeline : &lt;code&gt;MarkdownReader&lt;/code&gt; → &lt;code&gt;HeaderChunker&lt;/code&gt; (500 tokens, 50 tokens de chevauchement) → &lt;code&gt;SummaryEnricher&lt;/code&gt; + &lt;code&gt;KeywordEnricher&lt;/code&gt; → &lt;code&gt;VectorStoreWriter&lt;/code&gt; (Qdrant). Les enrichisseurs utilisent le même &lt;code&gt;IChatClient&lt;/code&gt; pour générer des résumés et extraire des mots-clés avant l&amp;rsquo;indexation. Les questions du public, les paires de questions-réponses et les résultats des sondages sont ingérés en temps réel au fur et à mesure de la session — la base de connaissances s&amp;rsquo;enrichit pendant la conférence.&lt;/p&gt;
&lt;h2 id="vectordata--recherche-indépendante-du-fournisseur"&gt;VectorData : recherche indépendante du fournisseur&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;VectorStoreCollection.SearchAsync()&lt;/code&gt; fonctionne de la même manière que le magasin sous-jacent soit Qdrant ou Azure AI Search. La recherche hybride (vecteur + texte intégral) est prise en charge. Le pipeline RAG pour les questions-réponses du public interroge cette collection et récupère des extraits pertinents à transmettre comme contexte au client de chat.&lt;/p&gt;
&lt;h2 id="mcp--contenu-de-session-comme-outils"&gt;MCP : contenu de session comme outils&lt;/h2&gt;
&lt;p&gt;Le contenu de la session est exposé via MCP afin que tout client compatible MCP puisse y accéder. Le serveur et le client sont tous deux implémentés — le serveur expose les connaissances de la session comme outils MCP, et le client permet d&amp;rsquo;appeler ces outils depuis le pipeline de l&amp;rsquo;agent.&lt;/p&gt;
&lt;h2 id="agent-framework--résumé-multi-agents-en-parallèle"&gt;Agent Framework : résumé multi-agents en parallèle&lt;/h2&gt;
&lt;p&gt;Le résumé de la session est généré par trois agents s&amp;rsquo;exécutant de manière concurrente — &lt;code&gt;PollSummaryAgent&lt;/code&gt;, &lt;code&gt;QuestionSummaryAgent&lt;/code&gt; et &lt;code&gt;InsightSummaryAgent&lt;/code&gt; — puis fusionnés. Cela utilise le modèle de chat de groupe ou d&amp;rsquo;exécution parallèle de Microsoft Agent Framework. Chaque agent gère une préoccupation ; l&amp;rsquo;orchestrateur fusionne les sorties.&lt;/p&gt;
&lt;h2 id="le-principe-de-conception"&gt;Le principe de conception&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;article soulève un point important : utiliser l&amp;rsquo;outil le plus simple qui convient. Les appels directs à &lt;code&gt;IChatClient&lt;/code&gt; pour les tâches de génération simples. L&amp;rsquo;appel d&amp;rsquo;outil/fonction pour l&amp;rsquo;extraction de données structurées. Les agents complets uniquement quand on a besoin d&amp;rsquo;un raisonnement autonome en plusieurs étapes. La stratification des bibliothèques l&amp;rsquo;impose — on peut utiliser &lt;code&gt;Microsoft.Extensions.AI&lt;/code&gt; sans inclure l&amp;rsquo;Agent Framework complet.&lt;/p&gt;
&lt;p&gt;Consultez le &lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;post complet&lt;/a&gt; pour la structure complète du projet et les liens vers le code source.&lt;/p&gt;</content:encoded></item><item><title>Où votre Agent se Souvient-il des Choses ? Guide Pratique sur le Stockage de l'Historique de Chat</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Géré par le service ou par le client ? Linéaire ou bifurquant ? La décision architecturale qui détermine ce que votre agent IA peut vraiment faire — avec des exemples de code en C# et Python.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ce post a été traduit automatiquement. Pour la version originale, &lt;a href="https://thedotnetblog.com/fr/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;cliquez ici&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Lors de la création d&amp;rsquo;un agent IA, vous consacrez la majeure partie de votre énergie au modèle, aux outils et aux prompts. La question de &lt;em&gt;l&amp;rsquo;endroit où vit l&amp;rsquo;historique des conversations&lt;/em&gt; semble être un détail d&amp;rsquo;implémentation — mais c&amp;rsquo;est l&amp;rsquo;une des décisions architecturales les plus importantes que vous prendrez.&lt;/p&gt;
&lt;p&gt;Elle détermine si les utilisateurs peuvent bifurquer des conversations, annuler des réponses, reprendre des sessions après un redémarrage, et si vos données quittent jamais votre infrastructure. L&amp;rsquo;&lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;équipe Agent Framework a publié une analyse approfondie&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="deux-modèles-fondamentaux"&gt;Deux modèles fondamentaux&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Géré par le service&lt;/strong&gt; : le service IA stocke l&amp;rsquo;état de la conversation. Votre application tient une référence et le service inclut automatiquement l&amp;rsquo;historique pertinent dans chaque requête.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Géré par le client&lt;/strong&gt; : votre application maintient l&amp;rsquo;historique complet et envoie les messages pertinents avec chaque requête. Le service est sans état. Vous contrôlez tout.&lt;/p&gt;
&lt;h2 id="comment-agent-framework-abstrait-cela"&gt;Comment Agent Framework abstrait cela&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// C# — fonctionne pareil quel que soit le fournisseur&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Je m&amp;#39;appelle Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Quel est mon nom ?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Je m&amp;#39;appelle Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Quel est mon nom ?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="référence-rapide-des-fournisseurs"&gt;Référence rapide des fournisseurs&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fournisseur&lt;/th&gt;
&lt;th&gt;Stockage&lt;/th&gt;
&lt;th&gt;Modèle&lt;/th&gt;
&lt;th&gt;Compaction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Vous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;td&gt;Linéaire&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (défaut)&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;td&gt;Bifurquant&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Vous&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="comment-choisir"&gt;Comment choisir&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Besoin de bifurcation ou « annuler » ?&lt;/strong&gt; → Responses API géré par service&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Besoin de souveraineté des données ?&lt;/strong&gt; → Géré par client avec fournisseur base de données&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simple chatbot ?&lt;/strong&gt; → Géré par service linéaire suffit&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lisez le &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;post complet&lt;/a&gt; pour l&amp;rsquo;arbre de décision complet.&lt;/p&gt;</content:encoded></item></channel></rss>