<?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: Adrian</title>
    <description>The latest articles on DEV Community by Adrian (@adrian_368e1d3e691afab697).</description>
    <link>https://dev.to/adrian_368e1d3e691afab697</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3983803%2F92991c8b-073d-44be-80c4-584f44d63100.jpg</url>
      <title>DEV Community: Adrian</title>
      <link>https://dev.to/adrian_368e1d3e691afab697</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adrian_368e1d3e691afab697"/>
    <language>en</language>
    <item>
      <title>MetaCoach: generar planes de entrenamiento y nutrición a partir de tu HRV y tus analíticas</title>
      <dc:creator>Adrian</dc:creator>
      <pubDate>Thu, 02 Jul 2026 10:00:03 +0000</pubDate>
      <link>https://dev.to/adrian_368e1d3e691afab697/metacoach-generar-planes-de-entrenamiento-y-nutricion-a-partir-de-tu-hrv-y-tus-analiticas-2pj</link>
      <guid>https://dev.to/adrian_368e1d3e691afab697/metacoach-generar-planes-de-entrenamiento-y-nutricion-a-partir-de-tu-hrv-y-tus-analiticas-2pj</guid>
      <description>&lt;p&gt;La mayoría de planes de entrenamiento son genéricos: no saben si dormiste mal, si tu sistema nervioso está agotado o si tienes la ferritina por los suelos. MetaCoach parte de la idea contraria: &lt;strong&gt;adaptar el plan a tu fisiología real&lt;/strong&gt;, medida con datos de wearable y analíticas de sangre.&lt;/p&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Tomar señales fisiológicas heterogéneas —variabilidad de frecuencia cardíaca (HRV), sueño, pasos, frecuencia cardíaca en reposo, y valores de sangre como ferritina, hemoglobina, vitamina D, glucosa o TSH— y traducirlas en un plan semanal de entrenamiento, nutrición y suplementación que tenga sentido clínico.&lt;/p&gt;

&lt;h2&gt;
  
  
  La arquitectura: reglas clínicas + LLM
&lt;/h2&gt;

&lt;p&gt;Decidí &lt;strong&gt;no&lt;/strong&gt; dejar que el LLM interpretara los valores médicos por su cuenta —demasiado riesgo. En su lugar, un motor de &lt;strong&gt;reglas basadas en rangos clínicos&lt;/strong&gt; hace el análisis fisiológico:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;HRV &amp;lt; 30ms → estado crítico de recuperación; &amp;lt; 50ms → bajo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sueño &amp;lt; 5,5h → crítico; &amp;lt; 7h → bajo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ferritina, hemoglobina y vitamina D comparadas con sus rangos de referencia para detectar déficits.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El LLM (&lt;strong&gt;Llama 3.3 70B vía Groq&lt;/strong&gt;) entra &lt;em&gt;después&lt;/em&gt;: toma las conclusiones del motor de reglas y las convierte en un plan concreto y legible —7 días de entrenamiento con tipo y descripción, macros nutricionales y, si se detecta déficit, suplementación. La memoria conversacional permite seguir afinando el plan en diálogo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué reglas y no solo IA
&lt;/h2&gt;

&lt;p&gt;Porque los umbrales clínicos son conocimiento establecido y &lt;em&gt;determinista&lt;/em&gt;: no hay razón para que un modelo probabilístico los reinvente cada vez. Las reglas garantizan que "HRV de 28ms" siempre se trate como crítico. El LLM aporta la personalización y la comunicación, no el juicio médico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resultados de diseño
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;5 herramientas de análisis&lt;/strong&gt;, &lt;strong&gt;8 valores de analítica&lt;/strong&gt; interpretados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plan de &lt;strong&gt;7 días&lt;/strong&gt; personalizado, generado en &lt;strong&gt;&amp;lt;2s&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Qué aprendí
&lt;/h2&gt;

&lt;p&gt;El mismo principio que en BabyMind: en salud, el LLM debe &lt;strong&gt;orquestar y comunicar&lt;/strong&gt;, mientras que las decisiones sensibles se anclan en reglas verificables. Es la arquitectura "neuro-simbólica" en pequeño.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente en &lt;a href="https://adrianmoreno-dev.com/blog/metacoach-planes-salud-hrv-analiticas-sangre" rel="noopener noreferrer"&gt;adrianmoreno-dev.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>healthtech</category>
      <category>hrv</category>
      <category>langchain</category>
    </item>
    <item>
      <title>TutorIA: un tutor con IA que adapta el lenguaje al perfil de cada niño y recuerda entre sesiones</title>
      <dc:creator>Adrian</dc:creator>
      <pubDate>Thu, 25 Jun 2026 10:00:02 +0000</pubDate>
      <link>https://dev.to/adrian_368e1d3e691afab697/tutoria-un-tutor-con-ia-que-adapta-el-lenguaje-al-perfil-de-cada-nino-y-recuerda-entre-sesiones-425</link>
      <guid>https://dev.to/adrian_368e1d3e691afab697/tutoria-un-tutor-con-ia-que-adapta-el-lenguaje-al-perfil-de-cada-nino-y-recuerda-entre-sesiones-425</guid>
      <description>&lt;p&gt;La promesa de la educación personalizada es tan antigua como difícil. Un buen tutor humano adapta su forma de explicar a cada alumno: simplifica para uno, reta a otro, da estructura al que la necesita. TutorIA intenta llevar esa adaptación a una IA conversacional para niños de 6 a 14 años.&lt;/p&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Que la explicación y los ejercicios se ajusten al &lt;strong&gt;perfil del alumno&lt;/strong&gt; —rendimiento general, TDAH, dislexia— y que haya &lt;strong&gt;continuidad&lt;/strong&gt;: que el tutor recuerde en qué andaba el niño la sesión anterior, sus dificultades y sus avances.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adaptación al perfil
&lt;/h2&gt;

&lt;p&gt;El perfil del alumno condiciona el &lt;em&gt;prompt&lt;/em&gt; y la estrategia pedagógica. Para un perfil con TDAH, el tutor da instrucciones más cortas, divide las tareas y refuerza con frecuencia. Para dislexia, ajusta el lenguaje y evita muros de texto. El mismo contenido se entrega de formas distintas según quién esté al otro lado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memoria entre sesiones
&lt;/h2&gt;

&lt;p&gt;Aquí está la diferencia con un chatbot del montón. La mayoría olvidan todo al cerrar la pestaña. TutorIA &lt;strong&gt;persiste el contexto del alumno entre sesiones&lt;/strong&gt;, de modo que puede retomar donde lo dejó y construir sobre lo anterior. Esa continuidad es lo que convierte una conversación en un proceso de aprendizaje. Además, un panel de seguimiento da visibilidad a los padres.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;Construido con &lt;strong&gt;LangChain&lt;/strong&gt; y un LLM servido por &lt;strong&gt;Groq&lt;/strong&gt; (LLaMA) para respuestas rápidas, sobre &lt;strong&gt;FastAPI&lt;/strong&gt;, e integrado en el portfolio Laravel. La recuperación de material de apoyo se apoya en un esquema RAG.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué aprendí
&lt;/h2&gt;

&lt;p&gt;Que la "personalización" real en EdTech no es cosmética (poner el nombre del niño): es adaptar la &lt;em&gt;pedagogía&lt;/em&gt; y mantener &lt;em&gt;memoria&lt;/em&gt;. Sin continuidad entre sesiones, no hay aprendizaje, solo respuestas sueltas.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente en &lt;a href="https://adrianmoreno-dev.com/blog/tutoria-tutor-adaptativo-memoria-entre-sesiones" rel="noopener noreferrer"&gt;adrianmoreno-dev.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>edtech</category>
      <category>langchain</category>
      <category>iaadaptativa</category>
    </item>
    <item>
      <title>OrientaIA: diseñar un orientador vocacional conversacional para adolescentes</title>
      <dc:creator>Adrian</dc:creator>
      <pubDate>Thu, 18 Jun 2026 10:00:02 +0000</pubDate>
      <link>https://dev.to/adrian_368e1d3e691afab697/orientaia-disenar-un-orientador-vocacional-conversacional-para-adolescentes-4bhl</link>
      <guid>https://dev.to/adrian_368e1d3e691afab697/orientaia-disenar-un-orientador-vocacional-conversacional-para-adolescentes-4bhl</guid>
      <description>&lt;p&gt;La orientación vocacional clásica suele reducirse a un test de respuestas cerradas que escupe tres profesiones. Pero a los 16 años casi nadie sabe lo que quiere, y un formulario no lo descubre. OrientaIA aborda el problema desde otro ángulo: &lt;strong&gt;una conversación.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Ayudar a adolescentes de 14 a 18 años a descubrir itinerarios formativos y profesionales que encajen con ellos, sin que tengan que articular de antemano lo que ni ellos saben.&lt;/p&gt;

&lt;h2&gt;
  
  
  El enfoque: extracción conversacional
&lt;/h2&gt;

&lt;p&gt;En lugar de preguntar directamente "¿qué quieres ser?", OrientaIA conduce una &lt;strong&gt;conversación guiada&lt;/strong&gt; que va extrayendo, de forma indirecta, tres dimensiones: &lt;strong&gt;intereses&lt;/strong&gt; (qué les engancha), &lt;strong&gt;valores&lt;/strong&gt; (qué les importa) y &lt;strong&gt;habilidades&lt;/strong&gt; (en qué destacan). El LLM no interroga: dialoga, y de ese diálogo infiere el perfil.&lt;/p&gt;

&lt;h2&gt;
  
  
  Del perfil al mapa de carreras
&lt;/h2&gt;

&lt;p&gt;Con ese perfil, el sistema genera un &lt;strong&gt;mapa de carreras personalizado&lt;/strong&gt;. Y añade algo que marca la diferencia frente a un test: una &lt;strong&gt;simulación de "un día en la vida"&lt;/strong&gt; de cada profesión sugerida. Leer "podrías ser ingeniero ambiental" dice poco; vivir narrativamente cómo sería una jornada de esa profesión ayuda al adolescente a proyectarse de verdad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;Pipeline conversacional con &lt;strong&gt;LangChain&lt;/strong&gt; y LLaMA vía &lt;strong&gt;Groq&lt;/strong&gt; sobre &lt;strong&gt;FastAPI&lt;/strong&gt;, con apoyo de RAG para anclar la información de itinerarios formativos reales, integrado en el portfolio Laravel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué aprendí
&lt;/h2&gt;

&lt;p&gt;Que los LLMs brillan precisamente en lo que los formularios hacen mal: &lt;strong&gt;extraer estructura de una conversación no estructurada.&lt;/strong&gt; El reto de diseño no fue técnico, sino pedagógico: cómo guiar el diálogo para que revele el perfil sin que parezca un interrogatorio.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente en &lt;a href="https://adrianmoreno-dev.com/blog/orientaia-orientador-vocacional-conversacional" rel="noopener noreferrer"&gt;adrianmoreno-dev.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>edtech</category>
      <category>orientacionvocacional</category>
      <category>langchain</category>
    </item>
    <item>
      <title>Portfolio de IA open source: 20+ proyectos con LLMs self-hosted en producción</title>
      <dc:creator>Adrian</dc:creator>
      <pubDate>Sun, 14 Jun 2026 14:16:29 +0000</pubDate>
      <link>https://dev.to/adrian_368e1d3e691afab697/portfolio-de-ia-open-source-20-proyectos-con-llms-self-hosted-en-produccion-167l</link>
      <guid>https://dev.to/adrian_368e1d3e691afab697/portfolio-de-ia-open-source-20-proyectos-con-llms-self-hosted-en-produccion-167l</guid>
      <description>&lt;p&gt;Este portfolio no es una página estática con capturas de pantalla. Es una infraestructura de IA &lt;strong&gt;open source y self-hosted&lt;/strong&gt; corriendo en producción: más de 20 proyectos de Machine Learning, cada uno con su demo interactiva real, sobre un único VPS. Este artículo explica cómo está montado y qué decisiones técnicas lo sostienen — porque la parte interesante no es la lista de proyectos, sino que todos funcionan a la vez sin reventar un servidor de 7,6 GB de RAM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por qué self-hosted y open source
&lt;/h2&gt;

&lt;p&gt;La alternativa fácil era encadenar APIs de pago (OpenAI, Pinecone, servicios gestionados) y enseñar pantallazos. Pero quería demostrar algo distinto: que se puede construir IA aplicada &lt;strong&gt;controlando el stack completo&lt;/strong&gt;, con costes marginales y código abierto. El &lt;a href="https://github.com/Chupacharcos/chatbot" rel="noopener noreferrer"&gt;repositorio del chatbot RAG es público&lt;/a&gt;, y cada demo es ejecutable, no un vídeo.&lt;/p&gt;

&lt;h2&gt;
  
  
  El stack de recuperación: RAG sin servicios gestionados
&lt;/h2&gt;

&lt;p&gt;El chatbot documental usa una arquitectura RAG enteramente self-hosted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vector store: FAISS&lt;/strong&gt; en disco, no una base vectorial gestionada. Índices pre-generados por idioma + índices dinámicos en RAM para los PDFs que sube el usuario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Embeddings: intfloat/multilingual-e5-base&lt;/strong&gt; (768 dimensiones), corriendo localmente. Se eligió la variante &lt;em&gt;base&lt;/em&gt; sobre &lt;em&gt;large&lt;/em&gt; tras un incidente de memoria: la calidad extra no justificaba el consumo de RAM en un servidor compartido por 20 servicios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reranker: cross-encoder mMiniLMv2&lt;/strong&gt; para reordenar los candidatos antes de pasarlos al LLM.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LLM: Groq&lt;/strong&gt; (Llama 3.1/3.3) como motor principal, con &lt;strong&gt;Ollama local&lt;/strong&gt; como alternativa. El failover entre ambos es automático.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El resultado: un pipeline de recuperación que no depende de ninguna factura mensual por consultas vectoriales.&lt;/p&gt;

&lt;h2&gt;
  
  
  20+ servicios FastAPI en un solo VPS
&lt;/h2&gt;

&lt;p&gt;Cada proyecto de ML es un &lt;strong&gt;proceso FastAPI independiente&lt;/strong&gt; en su propio puerto, con su propio modelo y artefactos. Predicción de precio inmobiliario, calidad del aire, detección de fraude, separación de pistas musicales, detección de alergias felinas por visión por computador… cada uno aislado, cada uno desplegado como servicio systemd.&lt;/p&gt;

&lt;p&gt;El problema obvio: 20 modelos cargados en memoria a la vez no caben. La solución fue un sistema &lt;strong&gt;lazy-load&lt;/strong&gt;: las demos pesadas están detenidas por defecto y arrancan on-demand cuando un visitante pulsa "Activar demo", apagándose solas tras 30 minutos sin tráfico. Eso liberó ~2 GB de RAM y permite que el portfolio entero conviva en una máquina modesta.&lt;/p&gt;

&lt;h2&gt;
  
  
  NeuralOps: el sistema multi-agente que lo mantiene vivo
&lt;/h2&gt;

&lt;p&gt;La pieza que más disfruto: el portfolio se mantiene, promociona y mejora a sí mismo mediante un sistema de &lt;strong&gt;agentes autónomos&lt;/strong&gt;. Monitores que vigilan latencia y reinician servicios caídos, un reparador de errores que escala a GitHub Issues lo que no puede arreglar solo, agentes de contenido que sindican los artículos del blog, y un ecosistema "darwiniano" donde cada agente acumula una puntuación de rendimiento y los mejores se reproducen con mutaciones de sus parámetros.&lt;/p&gt;

&lt;p&gt;Todo corre con el mismo principio de coste marginal: razonamiento en Groq cuando importa la calidad, modelo local para las tareas baratas, y &lt;em&gt;timers&lt;/em&gt; de systemd en lugar de procesos residentes para no malgastar RAM.&lt;/p&gt;

&lt;h2&gt;
  
  
  El frontend
&lt;/h2&gt;

&lt;p&gt;Laravel + MySQL para la capa web, nginx con HTTPS, Tailwind compilado y auto-alojado (sin CDN). Cada proyecto tiene su ficha, su demo y su artículo técnico en este blog explicando las decisiones reales: qué arquitectura elegí, qué descarté y qué métricas conseguí.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué puedes mirar
&lt;/h2&gt;

&lt;p&gt;Si te interesa la IA aplicada construida sin atajos de pago: explora las &lt;a href="https://dev.to/proyectos"&gt;demos&lt;/a&gt;, lee el resto de &lt;a href="https://dev.to/blog"&gt;artículos técnicos&lt;/a&gt; donde detallo cada proyecto, o revisa el &lt;a href="https://github.com/Chupacharcos/chatbot" rel="noopener noreferrer"&gt;código del chatbot RAG en GitHub&lt;/a&gt;. Todo lo que se describe aquí está funcionando ahora mismo en producción.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente en &lt;a href="https://adrianmoreno-dev.com/blog/portfolio-ia-open-source-llm-self-hosted" rel="noopener noreferrer"&gt;adrianmoreno-dev.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>iaopensource</category>
      <category>llmselfhosted</category>
      <category>rag</category>
      <category>fastapi</category>
    </item>
    <item>
      <title>Generador de imágenes con FLUX.1-schnell: text-to-image en producción</title>
      <dc:creator>Adrian</dc:creator>
      <pubDate>Sun, 14 Jun 2026 11:33:05 +0000</pubDate>
      <link>https://dev.to/adrian_368e1d3e691afab697/generador-de-imagenes-con-flux1-schnell-text-to-image-en-produccion-2d3a</link>
      <guid>https://dev.to/adrian_368e1d3e691afab697/generador-de-imagenes-con-flux1-schnell-text-to-image-en-produccion-2d3a</guid>
      <description>&lt;p&gt;Este proyecto nació de una necesidad propia: generar las imágenes de portada de los demás proyectos del portfolio con un estilo coherente, sin depender de bancos de imágenes ni de herramientas de pago. La solución fue desplegar mi propio generador text-to-image.&lt;/p&gt;

&lt;h2&gt;
  
  
  El modelo: por qué FLUX.1-schnell
&lt;/h2&gt;

&lt;p&gt;La familia &lt;strong&gt;FLUX.1&lt;/strong&gt; es de lo mejor que hay hoy en generación de imágenes abierta. Elegí la variante &lt;strong&gt;schnell&lt;/strong&gt; ("rápido" en alemán) por una razón práctica: está destilada para generar en muy pocos pasos de difusión, lo que la hace mucho más ligera y veloz que las variantes de máxima calidad. En un portfolio que corre sobre recursos modestos, esa diferencia entre "tarda 3 segundos" y "tarda un minuto" es la diferencia entre una demo usable y una que nadie espera.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estilos predefinidos
&lt;/h2&gt;

&lt;p&gt;Para mantener coherencia visual, el generador ofrece &lt;strong&gt;estilos predefinidos&lt;/strong&gt; orientados a categorías (tech, educación, finanzas, IA). Detrás, cada estilo es esencialmente un &lt;em&gt;prompt template&lt;/em&gt; cuidado que envuelve la petición del usuario con los modificadores adecuados de composición, paleta y acabado. Es una capa fina pero muy efectiva: convierte un prompt mediocre del usuario en uno bueno.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arquitectura
&lt;/h2&gt;

&lt;p&gt;El modelo se sirve desde el ecosistema &lt;strong&gt;HuggingFace&lt;/strong&gt; a través de una API &lt;strong&gt;FastAPI&lt;/strong&gt;, con post-procesado de imagen vía &lt;strong&gt;Pillow&lt;/strong&gt; y descarga directa en PNG, integrado en el frontend Laravel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Una reflexión sobre los modelos de difusión
&lt;/h2&gt;

&lt;p&gt;Un modelo de difusión genera partiendo de ruido puro y "quitándolo" iterativamente hasta revelar una imagen coherente con el texto. Las variantes destiladas como schnell comprimen ese proceso de decenas de pasos a unos pocos, sacrificando algo de fidelidad a cambio de velocidad. Para iconografía y portadas, ese intercambio es claramente favorable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué aprendí
&lt;/h2&gt;

&lt;p&gt;Que "usar el mejor modelo" no siempre es la decisión correcta: el &lt;strong&gt;mejor modelo para tu contexto&lt;/strong&gt; tiene en cuenta la latencia, los recursos y el uso real. Y que una buena capa de &lt;em&gt;prompt templating&lt;/em&gt; aporta más calidad percibida que saltar a un modelo más pesado.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Publicado originalmente en &lt;a href="https://adrianmoreno-dev.com/blog/generador-imagenes-flux-schnell-text-to-image" rel="noopener noreferrer"&gt;adrianmoreno-dev.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>iagenerativa</category>
      <category>difusin</category>
      <category>flux</category>
      <category>huggingface</category>
    </item>
  </channel>
</rss>
