<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>CodeWithBotina</title>
    <description>Technical insights on software development, programming tutorials, and best practices</description>
    <link>https://blog.codewithbotina.com/es/</link>
    <language>es</language>
    <lastBuildDate>Tue, 07 Apr 2026 13:35:19 GMT</lastBuildDate>
    <atom:link href="https://blog.codewithbotina.com/es/rss.xml" rel="self" type="application/rss+xml"/>
    
    <item>
      <title><![CDATA[¡Adiós a las imágenes estáticas! Ahora en CodeWithBotina: Diagramas Interactivos con Mermaid]]></title>
      <link>https://blog.codewithbotina.com/es/posts/adios-a-las-imagenes-estaticas-ahora-en-codewithbotina-diagramas-interactivos-con-mermaid</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/adios-a-las-imagenes-estaticas-ahora-en-codewithbotina-diagramas-interactivos-con-mermaid</guid>
      <pubDate>Mon, 06 Apr 2026 18:30:05 GMT</pubDate>
      <description><![CDATA[¡Adiós a las imágenes estáticas! Ahora en CodeWithBotina: Diagramas Interactivos con Mermaid Bienvenidos a una actualización especial de CodeWithBotina. Si eres un lector habitual, sabes que nos apasi...]]></description>
      <enclosure url="https://www.mermaidonline.live/imgs/features/mermaid-editor.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# ¡Adiós a las imágenes estáticas! Ahora en CodeWithBotina: Diagramas Interactivos con Mermaid

Bienvenidos a una actualización especial de [CodeWithBotina](https://blog.codewithbotina.com/). Si eres un lector habitual, sabes que nos apasiona explicar arquitecturas complejas y flujos de datos. Sin embargo, a veces una imagen estática no es suficiente para capturar la esencia de un sistema dinámico.

Hoy estamos emocionados de anunciar que **CodeWithBotina ahora soporta renderizado de diagramas Mermaid**. 

¿Qué significa esto para ti?
1. **Interactividad:** Puedes pasar el cursor sobre los diagramas para resaltar flujos.
2. **Descargables:** Ahora puedes exportar estos diagramas para tus propios apuntes o proyectos.
3. **Claridad:** Diagramas siempre nítidos, sin importar la resolución de tu pantalla.

Aquí te mostramos algunos ejemplos de lo que verás a partir de ahora en nuestros artículos:

---

### 1. Diagrama de Flujo (Lógica de Autenticación)
Ideal para entender procesos de decisión en el código.

```mermaid
graph TD
    A[Inicio de Sesión] --> B{¿Usuario existe?}
    B -- No --> C[Error: Usuario no encontrado]
    B -- Sí --> D{¿Contraseña correcta?}
    D -- No --> E[Error: Credenciales inválidas]
    D -- Sí --> F[Generar Token JWT]
    F --> G[Acceso Concedido]
````

### 2\. Diagrama de Secuencia (API Request)

Perfecto para visualizar cómo interactúan tus microservicios.

```mermaid
sequenceDiagram
    participant Cliente
    participant API_Gateway
    participant AuthService
    participant Database

    Cliente->>API_Gateway: POST /login
    API_Gateway->>AuthService: Validar Credenciales
    AuthService->>Database: Buscar Usuario
    Database-->>AuthService: Datos de Usuario
    AuthService-->>API_Gateway: Token Creado
    API_Gateway-->>Cliente: 200 OK (JWT)
```

### 3\. Diagrama de Arquitectura (Nuestras 3 Capas)

Recordando nuestro post anterior sobre arquitectura en capas:

```mermaid
graph BT
    subgraph Capa_de_Datos
        DB[(Base de Datos)]
    end
    subgraph Capa_de_Negocio
        Logic[Lógica de Dominio]
    end
    subgraph Capa_de_Presentación
        UI[Interfaz de Usuario]
    end
    
    UI --> Logic
    Logic --> DB
```

-----

## ¿Cómo funciona?

Estamos utilizando **Mermaid.js**, una herramienta basada en JavaScript que renderiza definiciones de texto simple en gráficos vectoriales (SVG). Esto hace que el blog cargue más rápido y que la información sea accesible para lectores de pantalla.

Esperamos que esta nueva herramienta haga que tu camino en el desarrollo de software sea mucho más visual y sencillo. ¡Pruébalo ahora descargando cualquiera de los diagramas de arriba\!

**Fuentes para aprender más sobre Mermaid:**

  * **Mermaid Live Editor:** [mermaid.live](https://mermaid.live/)
  * **Documentación Oficial:** [mermaid-js.github.io](https://www.google.com/search?q=https://mermaid-js.github.io/mermaid/)

-----

*Visualiza el código, domina el sistema. Solo en [CodeWithBotina](https://blog.codewithbotina.com/).*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[El Arte de Separar: Arquitectura en Capas en Web, Mobile y Desktop]]></title>
      <link>https://blog.codewithbotina.com/es/posts/el-arte-de-separar-arquitectura-en-capas-en-web-mobile-y-desktop</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/el-arte-de-separar-arquitectura-en-capas-en-web-mobile-y-desktop</guid>
      <pubDate>Mon, 30 Mar 2026 22:55:13 GMT</pubDate>
      <description><![CDATA[El Arte de Separar: Arquitectura en Capas en Web, Mobile y Desktop Bienvenidos a CodeWithBotina. Si alguna vez has sentido que tu código es un laberinto donde una pequeña modificación en la base de da...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/el-arte-de-separar-arquitectura-en-capas-en-web-mobile-y-desktop-1774911500209.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# El Arte de Separar: Arquitectura en Capas en Web, Mobile y Desktop

Bienvenidos a [CodeWithBotina](https://blog.codewithbotina.com/). Si alguna vez has sentido que tu código es un laberinto donde una pequeña modificación en la base de datos rompe la interfaz de usuario, es porque te falta "capas".

La **Arquitectura en Capas (Layered Architecture)** es el patrón más utilizado en el mundo. Su principio es la **Separación de Preocupaciones (Separation of Concerns)**: cada parte del código tiene una única responsabilidad y solo se comunica con la capa inmediatamente inferior.

---

## 1. Las 3 Capas Fundamentales

Aunque pueden ser más, la mayoría de los sistemas se dividen en estas tres:

1.  **Capa de Presentación (UI):** Lo que el usuario ve y toca. Captura eventos y muestra datos.
2.  **Capa de Lógica de Negocio (Domain):** El cerebro. Aquí residen las reglas, cálculos y validaciones.
3.  **Capa de Datos (Data/Infrastructure):** Donde viven las bases de datos, APIs externas o el sistema de archivos.

---

## 2. Adaptación por Plataforma

### 🌐 Web (APIs)
En una API REST (Node.js, Spring Boot, .NET), las capas suelen verse así:
* **Controllers:** Reciben la petición HTTP y validan los parámetros.
* **Services:** Ejecutan la lógica (ej. "Si el usuario es VIP, aplicar 10% de descuento").
* **Repositories:** Realizan las consultas SQL o interactúan con el ORM.

### 📱 Aplicaciones Móviles (Android/iOS)
Aquí la arquitectura evoluciona a patrones como **MVVM (Model-View-ViewModel)** o **Clean Architecture**:
* **UI (Activity/SwiftUI):** Solo muestra estados.
* **ViewModel/Use Cases:** Actúan como la lógica que sobrevive a los cambios de rotación de pantalla.
* **Remote/Local Data:** Gestionan si los datos vienen de una API o del almacenamiento interno (SQLite).

### 🖥️ Aplicaciones de Escritorio (Desktop)
En entornos como WPF o JavaFX, la separación es vital para mantener el rendimiento:
* **View:** XAML o archivos FXML.
* **Business Logic:** Clases que procesan archivos locales o hardware (sensores).
* **DataAccess:** Drivers para bases de datos locales o conectores de red.

---

## 3. ¿Por qué usarla en 2026?
* **Mantenibilidad:** Puedes cambiar tu base de datos de MySQL a PostgreSQL sin tocar una sola línea de la interfaz.
* **Testeabilidad:** Puedes probar la lógica de negocio sin necesidad de abrir un navegador o un emulador.

---

## Fuentes verificables para seguir aprendiendo:
* **Martin Fowler (Patterns of Enterprise Application Architecture):** La biblia de la organización de software. [martinfowler.com](https://martinfowler.com/eaaCatalog/layeredArchitecture.html)
* **Microsoft Learn:** Guía sobre estilos de arquitectura (N-tier applications). [learn.microsoft.com](https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier)
* **Google Developers:** Guía de arquitectura de apps móviles (Android). [developer.android.com](https://developer.android.com/topic/architecture)

---
*Construye software sólido, no castillos de naipes. Nos vemos en el próximo post de [CodeWithBotina](https://blog.codewithbotina.com/).*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Cuando el motor se apaga: Crónica de la desmotivación y el poder de la disciplina]]></title>
      <link>https://blog.codewithbotina.com/es/posts/cuando-el-motor-se-apaga-cronica-de-la-desmotivacion-y-el-poder-de-la-disciplina</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/cuando-el-motor-se-apaga-cronica-de-la-desmotivacion-y-el-poder-de-la-disciplina</guid>
      <pubDate>Fri, 27 Mar 2026 16:55:42 GMT</pubDate>
      <description><![CDATA[He estado ahí. He sido el estudiante de Jala University que siente que el "estilo bootcamp" le está pasando factura. He sido el emprendedor que ve cómo su sitio no recibe las visitas que esperaba. He ...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/cuando-el-motor-se-apaga-cronica-de-la-desmotivacion-y-el-poder-de-la-disciplina-1774630540932.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[He estado ahí. He sido el estudiante de Jala University que siente que el "estilo bootcamp" le está pasando factura. He sido el emprendedor que ve cómo su sitio no recibe las visitas que esperaba. He sido el empleado que solo cuenta las horas para cerrar la laptop. La desmotivación no es pereza; es un agotamiento emocional y cognitivo que ocurre cuando la brecha entre el esfuerzo que das y el resultado que recibes se vuelve demasiado grande.

La ciencia lo respalda. No es que "no tengas fuerza de voluntad". Cuando el estrés crónico llega, nuestro cerebro entra en un estado de fatiga que afecta la corteza prefrontal, encargada de la toma de decisiones. Es lo que los psicólogos llaman el **Efecto de Desgaste (Burnout)**, y no se cura con un video motivacional de un minuto.

#### La trampa de la "chispa"
Nos han vendido que para crear cosas increíbles necesitamos estar "inspirados". La realidad es que la motivación es un impulso biológico (gracias a la dopamina) diseñado para iniciarnos, no para mantenernos. Si dependes de la motivación para trabajar en tu blog o en tus tareas, estás a merced de tu estado de ánimo, y el estado de ánimo es traicionero.

#### La disciplina: El equipo de emergencia
Aquí es donde entra la disciplina. No es esa palabra militar y rígida que suena a castigo. La disciplina es, simplemente, **cumplirle una promesa a tu "yo" del pasado**. Es decir: "Ayer decidí que hoy escribiría este post, y aunque hoy no tengo ganas, lo voy a hacer porque confío en el criterio que tuve ayer".

Cuando la motivación se acaba, la disciplina es la que sostiene el edificio. Es la que te hace abrir el IDE cuando preferirías estar durmiendo. Lo curioso es que, a menudo, la motivación regresa *después* de que empiezas a trabajar gracias a la disciplina, no antes.

**Fuentes para profundizar:**
* *Duhigg, C. (2012). The Power of Habit.* Explica cómo los hábitos y la disciplina cerebral reemplazan la necesidad de motivación constante.
* *Maslach, C., & Leiter, M. P. (2016). Understanding the burnout experience.* Un estudio profundo sobre cómo el agotamiento afecta el rendimiento profesional y académico.]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Guerra de IAs en 2026: ¿Cuál es la más potente para programar y quién ofrece el mejor plan gratuito?]]></title>
      <link>https://blog.codewithbotina.com/es/posts/guerra-de-ias-en-2026-cual-es-la-mas-potente-para-programar-y-quien-ofrece-el-mejor-plan-gratuito</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/guerra-de-ias-en-2026-cual-es-la-mas-potente-para-programar-y-quien-ofrece-el-mejor-plan-gratuito</guid>
      <pubDate>Wed, 25 Mar 2026 17:20:06 GMT</pubDate>
      <description><![CDATA[Guerra de IAs en 2026: ¿Cuál es la más potente para programar y quién ofrece el mejor plan gratuito? Bienvenidos a Code With Botina. Si programas en 2026 y no estás usando un asistente de IA, es como ...]]></description>
      <enclosure url="https://www.extrasoft.es/wp-content/uploads/2026/03/AGENTES-IA-03.jpg" type="image/jpeg"/>
      <content:encoded><![CDATA[# Guerra de IAs en 2026: ¿Cuál es la más potente para programar y quién ofrece el mejor plan gratuito?

Bienvenidos a [Code With Botina](https://blog.codewithbotina.com/). Si programas en 2026 y no estás usando un asistente de IA, es como intentar picar piedra con una cuchara. Sin embargo, con tantas opciones como **GitHub Copilot**, **Cursor**, **Claude** y **Gemini**, es fácil perderse.

Hoy vamos a analizar cuál es la IA más potente actualmente para escribir código y, lo más importante para nuestra comunidad: **¿Cuál tiene el plan gratuito más generoso?**

---

## 1. La IA más potente: Claude 3.7 Sonnet (Anthropic) e Indexación de Cursor

A día de hoy, según los benchmarks más recientes de **LiveCodeBench** y **SWE-bench**, el modelo **Claude 3.7 Sonnet** se posiciona como el líder indiscutible en razonamiento lógico y generación de código limpio.

Sin embargo, la "potencia" no es solo el modelo, sino cómo se integra. Aquí es donde **Cursor** (el fork de VS Code) gana la batalla. Su capacidad para indexar todo tu repositorio local permite que la IA entienda no solo el archivo que tienes abierto, sino cómo se conecta tu API con tu base de datos y tus tipos de TypeScript.

## 2. El Plan Gratuito más generoso: Gemini 3 Flash (Google)

Si hablamos de "dar más por cero euros/dólares", Google se está llevando la corona en 2026. Mientras que otros limitan sus planes gratuitos a modelos pequeños o pocas peticiones al día, **Gemini 3 Flash** ofrece:

* **Ventana de Contexto Masiva:** Hasta 1 millón de tokens en su nivel gratuito a través de Google AI Studio. Esto significa que puedes subir la documentación completa de un framework y 50 archivos de tu proyecto, y la IA seguirá recordando todo.
* **Integración Nativa:** Su integración con **Project IDX** y los plugins de **Android Studio** permiten un flujo de trabajo sin fricciones para estudiantes.
* **Cuotas de uso:** Es, por mucho, el que permite más mensajes por minuto antes de pedirte que pases por caja.

---

## 3. Comparativa Rápida de Planes Gratuitos (2026)

| Herramienta | Potencia (Modelo) | Ventaja del Plan Gratuito |
| :--- | :--- | :--- |
| **Cursor** | Altísima (Claude 3.7 / GPT-5o) | 20 usos de modelos "Premium" al mes + usos ilimitados de modelos básicos. |
| **Gemini (Google AI Studio)** | Muy Alta (Gemini 3 Flash) | **El mejor:** Contexto inmenso (1M tokens) y cuotas de mensajes muy altas. |
| **GitHub Copilot** | Alta (GPT-5o / Claude) | Limitado. Requiere el *GitHub Student Developer Pack* para ser gratuito. |
| **Codeium** | Media-Alta (Propio) | Uso individual ilimitado para siempre (excelente alternativa a Copilot). |

---

## Conclusión y Recomendación de "Botina"

Si buscas **potencia bruta** para resolver un bug complejo: Usa **Cursor** con Claude 3.7. Es quirúrgico.

Si buscas **economía y capacidad de análisis** para proyectos grandes de la universidad: Usa **Gemini 3 Flash**. La capacidad de que la IA lea todo tu proyecto de una vez sin pagar un centavo es una ventaja injusta.

Fuentes: *State of AI Report 2026, LiveCodeBench, IEEE Spectrum Top Programming Assistants.*

¿Y tú? ¿Cuál estás usando para tus proyectos de este semestre? ¡Cuéntanos tu experiencia en los comentarios!

---
*Optimiza tu flujo de trabajo y programa de forma inteligente en [Code With Botina](https://blog.codewithbotina.com/).*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Lagrimas y Código: La tecnología detrás de Anohana y la animación japonesa]]></title>
      <link>https://blog.codewithbotina.com/es/posts/lagrimas-y-codigo-la-tecnologia-detras-de-anohana-y-la-animacion-japonesa</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/lagrimas-y-codigo-la-tecnologia-detras-de-anohana-y-la-animacion-japonesa</guid>
      <pubDate>Tue, 24 Mar 2026 18:03:07 GMT</pubDate>
      <description><![CDATA[Lágrimas y Código: La tecnología detrás de Anohana y la animación japonesa Bienvenidos a Code With Botina. Este fin de semana me salí un poco de los servidores y las bases de datos para ver Anohana: T...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/the-technology-behind-anohana-and-japanese-animation-1774362453648.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# Lágrimas y Código: La tecnología detrás de Anohana y la animación japonesa

Bienvenidos a [Code With Botina](https://blog.codewithbotina.com/). Este fin de semana me salí un poco de los servidores y las bases de datos para ver **Anohana: The Flower We Saw That Day**. Si no lo han visto, preparen los pañuelos porque es una historia que te pone sumamente sentimental (¡super recomendadísimo!).

Mientras intentaba procesar mis emociones, mi cerebro de desarrollador no pudo evitar preguntarse: **¿Con qué tecnología se logra este nivel de detalle? ¿Qué lenguajes de programación dan vida a los motores de animación en Japón?**

Hoy vamos a explorar el stack tecnológico que utiliza la industria del anime para convertir líneas de código en pura emoción.

---

## 1. El Software Rey: RETAS Studio y CLIP STUDIO PAINT

A diferencia de la animación occidental, que ha migrado casi totalmente al 3D, el anime sigue fiel a sus raíces 2D. El software estándar en Japón durante años ha sido **RETAS Studio** (especialmente *Stylos* y *PaintMan*).

¿En qué está escrito? Estos programas veteranos fueron desarrollados principalmente en **C++**. ¿Por qué? Por la gestión directa de memoria y la velocidad necesaria para manejar miles de capas de dibujo a mano en alta resolución.

## 2. Toonz y la Magia del Código Abierto

¿Sabían que **Studio Ghibli** ayudó a desarrollar su propia versión de software? Se llama **OpenToonz**. 
* **El Lenguaje:** Está escrito mayoritariamente en **C++**.
* **El Dato Técnico:** Utiliza librerías como **Qt** para la interfaz de usuario y algoritmos complejos de procesamiento de imágenes para que los dibujos escaneados parezcan pintados digitalmente de forma natural.

## 3. La Integración 3D: Blender y su avance en Japón

Últimamente, estudios como *A-1 Pictures* (los creadores de Anohana) usan mucho **Blender** para fondos complejos o vehículos.
* **Lenguajes:** Blender es una mezcla poderosa de **C, C++ y Python**. 
* **Uso:** Python se usa para los "scripts" y herramientas personalizadas que los animadores crean para automatizar tareas repetitivas, mientras que C++ maneja el motor de renderizado que calcula la luz y las sombras.

## 4. Los Motores de Composición: After Effects

La "magia" final (los efectos de luz, el desenfoque sentimental y la lluvia) ocurre usualmente en **Adobe After Effects**. 
* **Bajo el capó:** Aunque es un software comercial, su arquitectura permite *plugins* escritos en **C++ (SDK de Adobe)**. Los estudios japoneses suelen programar sus propios filtros para darle ese look "analógico" y cálido que nos hizo llorar en Anohana.

---

## Conclusión

Detrás de cada escena que nos hace llorar, hay miles de líneas de código en **C++** optimizando procesos y scripts en **Python** automatizando el color. La animación japonesa es el matrimonio perfecto entre el arte tradicional hecho a mano y la ingeniería de software de alto rendimiento.

Si te gusta el anime y el código, ya tienes una nueva motivación: ¡aprender C++ para optimizar los pinceles del futuro!

¿Qué otro anime te ha hecho preguntarte cómo fue creado? ¡Cuéntamelo en los comentarios!

---
*Explorando la intersección entre el arte y la ingeniería en [Code With Botina](https://blog.codewithbotina.com/).*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Desmontando al Gigante: La Arquitectura Backend y Bases de Datos detrás de ChatGPT]]></title>
      <link>https://blog.codewithbotina.com/es/posts/desmontando-al-gigante-la-arquitectura-backend-y-bases-de-datos-detras-de-chatgpt</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/desmontando-al-gigante-la-arquitectura-backend-y-bases-de-datos-detras-de-chatgpt</guid>
      <pubDate>Mon, 23 Mar 2026 22:02:09 GMT</pubDate>
      <description><![CDATA[Desmontando al Gigante: La Arquitectura Backend y Bases de Datos detrás de ChatGPT Bienvenidos a una nueva entrega de Code With Botina. Todos usamos ChatGPT a diario para depurar código, redactar corr...]]></description>
      <enclosure url="https://s.13.cl/sites/default/files/styles/manualcrop_850x475/public/13c/articulos/field-imagen/2025-08/chatgpt.JPG.jpeg?h=31857ea2&amp;itok=-Q7PG7nE" type="image/jpeg"/>
      <content:encoded><![CDATA[# Desmontando al Gigante: La Arquitectura Backend y Bases de Datos detrás de ChatGPT

Bienvenidos a una nueva entrega de [Code With Botina](https://blog.codewithbotina.com/). Todos usamos ChatGPT a diario para depurar código, redactar correos o entender conceptos complejos. Pero, como ingenieros de software, no podemos quedarnos solo en la interfaz; tenemos que preguntarnos: **¿Qué demonios está pasando en el backend cuando presiono "Enter"?**

Hoy vamos a diseccionar la arquitectura de ChatGPT. Hablaremos de cómo distribuyen sus servicios, qué bases de datos utilizan para recordar tus conversaciones y cómo logran ese famoso efecto de "escritura en tiempo real".

---

## 1. La Infraestructura Base: El Imperio de Azure

OpenAI no tiene sus propios centros de datos de la forma tradicional; corren sobre la infraestructura de **Microsoft Azure**. 

Para manejar la inmensa cantidad de tráfico global, toda la arquitectura está contenerizada y orquestada con **Kubernetes (Azure Kubernetes Service - AKS)**. Esto les permite escalar horizontalmente: si de repente medio millón de estudiantes entran al mismo tiempo a hacer sus tareas, Kubernetes levanta cientos de contenedores (pods) nuevos al instante para manejar la carga.

El verdadero "músculo" físico son clústeres gigantescos de miles de GPUs de NVIDIA (como las A100 o H100), conectadas por redes de altísima velocidad llamadas *InfiniBand*. 

---

## 2. El Secreto Mejor Guardado: Los LLMs son "Stateless" (Sin Estado)

Aquí es donde los conceptos que hemos visto en el blog se conectan. Al igual que los JWT que explicamos antes, **los modelos de IA no tienen memoria**. Son sistemas sin estado (*stateless*).

Si tú le dices a ChatGPT "Hola, me llamo Botina" y luego en otro mensaje le preguntas "¿Cómo me llamo?", el modelo por sí solo no tiene idea. Para que la IA recuerde, **el backend tiene que enviar el historial completo de la conversación en cada nueva petición HTTP**.

### ¿Cómo fluyen los microservicios entonces?
1. **API Gateway / Load Balancer:** Tu petición entra y es enrutada al servidor menos ocupado.
2. **Servicio de Sesión/Historial:** Antes de tocar la IA, este microservicio va a la base de datos, busca tus últimos mensajes de esa sesión y los concatena con tu nuevo mensaje.
3. **Servicio de Moderación:** Todo ese texto pasa por una API secundaria de seguridad que verifica que no estés pidiendo cosas ilegales o peligrosas.
4. **Inference Fleet (La Flota de Inferencia):** Finalmente, el texto completo llega a los servidores con GPUs que ejecutan el modelo (GPT-4), procesan la respuesta y la devuelven.

---

## 3. ¿Qué Bases de Datos usa ChatGPT?

Para mantener este flujo a la velocidad de la luz, una base de datos relacional tradicional (como MySQL) colapsaría bajo el peso de millones de lecturas y escrituras por segundo globales. Su estrategia de datos se divide en capas:

* **Capa de Caché (Redis):** Se utiliza para almacenar el contexto de la conversación activa. Redis vive en la memoria RAM, por lo que el *Servicio de Historial* puede recuperar tus últimos mensajes en milisegundos para armar el prompt.
* **Base de Datos Persistente (Distribuida):** Para guardar tu historial de chats de forma permanente (esa barra lateral que ves a la izquierda), utilizan bases de datos NoSQL altamente distribuidas (muy probablemente **Cosmos DB** de Azure u otra base del estilo Cassandra). Estas bases de datos replican la información en múltiples regiones del mundo, asegurando que si un servidor en Estados Unidos se cae, tus chats sigan a salvo.

---

## 4. El Efecto "Máquina de Escribir": Server-Sent Events (SSE)

Si ChatGPT usara una petición HTTP normal (`GET` o `POST`), tendrías que mirar una pantalla en blanco durante 10 o 20 segundos hasta que la IA terminara de pensar toda la respuesta para enviarla de golpe.

Para evitar esa mala experiencia, utilizan **Server-Sent Events (SSE)**. Es un flujo de datos unidireccional. El cliente abre una conexión HTTP y la mantiene viva. A medida que la GPU adivina la siguiente palabra (token), el servidor la empuja inmediatamente al cliente.

Así se vería un ejemplo básico de un endpoint simulando esto en un backend de Node.js/Express:

```javascript
// Ejemplo de un endpoint de Streaming (SSE)
app.get('/api/chat/stream', (req, res) =&gt; {
    // Configuramos los headers para mantener la conexión abierta
    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-cache');
    res.setHeader('Connection', 'keep-alive');

    const respuestaIA = ["Hola, ", "soy ", "ChatGPT ", "y ", "estoy ", "escribiendo."];
    let iteracion = 0;

    // Simulamos la IA generando tokens cada 500ms
    const intervalo = setInterval(() =&gt; {
        if (iteracion &lt; respuestaIA.length) {
            res.write(`data: ${respuestaIA[iteracion]}\n\n`);
            iteracion++;
        } else {
            res.write('data: [DONE]\n\n');
            clearInterval(intervalo);
            res.end();
        }
    }, 500);
});
```

---

## Conclusión

Detrás de la "magia" de la Inteligencia Artificial, hay una arquitectura clásica de microservicios llevada al extremo. Balanceadores de carga, bases de datos en memoria, gestión de estados y conexiones persistentes. Todo lo que aprendes hoy sobre backend es la base para construir los sistemas del futuro.

¿Qué parte de la arquitectura de ChatGPT te parece más fascinante? ¡Déjalo en los comentarios!

---
*Si te apasiona el backend y quieres seguir descubriendo cómo se construyen las aplicaciones reales, sigue leyendo [Code With Botina](https://blog.codewithbotina.com/).*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[La Guía Definitiva de Verbos en Inglés para Sobrevivir a tus Ceremonias Scrum]]></title>
      <link>https://blog.codewithbotina.com/es/posts/la-guia-definitiva-de-verbos-en-ingles-para-sobrevivir-a-tus-ceremonias-scrum</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/la-guia-definitiva-de-verbos-en-ingles-para-sobrevivir-a-tus-ceremonias-scrum</guid>
      <pubDate>Fri, 20 Mar 2026 16:43:10 GMT</pubDate>
      <description><![CDATA[La Guía Definitiva de Verbos en Inglés para Sobrevivir a tus Ceremonias Scrum Bienvenidos de nuevo a Code With Botina. Hoy vamos a hacer una pausa en el código puro y duro para hablar de otra herramie...]]></description>
      
      <content:encoded><![CDATA[# La Guía Definitiva de Verbos en Inglés para Sobrevivir a tus Ceremonias Scrum

Bienvenidos de nuevo a [Code With Botina](https://blog.codewithbotina.com/). Hoy vamos a hacer una pausa en el código puro y duro para hablar de otra herramienta fundamental en nuestro stack tecnológico: **el idioma inglés**.

Si trabajas en la industria del software, lo más probable es que utilices metodologías ágiles como Scrum. Y si aspiras a trabajar en equipos internacionales o proyectos de código abierto, vas a tener que comunicarte en inglés. A veces no se trata de no saber programar, sino de no saber cómo explicar lo que hiciste ayer, lo que harás hoy o qué te está bloqueando.

Para ayudar a toda nuestra comunidad a subir de nivel, he recopilado esta lista extensa y definitiva de los verbos en inglés más utilizados durante las ceremonias Scrum. Incluyo cómo se dicen en presente, su forma en pasado (para reportar lo que ya hiciste) y en futuro (para comprometerte a lo que harás).

¡Guarda este post en tus favoritos para tu próxima reunión!

---

## 1. Sprint Planning (Planificación del Sprint)
En esta ceremonia se define qué se va a hacer y cómo. Aquí necesitas verbos de estimación, compromiso y organización.

* **Estimate** (Pasado: *Estimated* | Futuro: *Will estimate*)
  * *Uso:* Cuando le das una puntuación (story points) o tiempo a una tarea. *"We estimated this task at 5 points."*
* **Allocate** (Pasado: *Allocated* | Futuro: *Will allocate*)
  * *Uso:* Para asignar recursos, tiempo o capacidad a una tarea específica.
* **Prioritize** (Pasado: *Prioritized* | Futuro: *Will prioritize*)
  * *Uso:* Cuando ordenas el Backlog decidiendo qué es más importante entregar primero.
* **Commit** (Pasado: *Committed* | Futuro: *Will commit*)
  * *Uso:* Para expresar que el equipo se compromete a entregar un conjunto de historias de usuario al final del Sprint.
* **Break down** (Pasado: *Broke down* | Futuro: *Will break down*)
  * *Uso:* Cuando una historia de usuario es muy grande y necesitas dividirla en tareas técnicas más pequeñas.
* **Define** (Pasado: *Defined* | Futuro: *Will define*)
  * *Uso:* Al establecer los criterios de aceptación (Acceptance Criteria) o la definición de "Hecho" (Definition of Done).
* **Assign** (Pasado: *Assigned* | Futuro: *Will assign*)
  * *Uso:* Cuando una tarea se vincula al nombre de un desarrollador específico.
* **Clarify** (Pasado: *Clarified* | Futuro: *Will clarify*)
  * *Uso:* Cuando le pides al Product Owner que te explique mejor un requerimiento confuso.
* **Forecast** (Pasado: *Forecasted* | Futuro: *Will forecast*)
  * *Uso:* Para predecir cuánto trabajo creen que podrán completar basándose en la velocidad (velocity) de Sprints anteriores.
* **Scope** (Pasado: *Scoped* | Futuro: *Will scope*)
  * *Uso:* Para definir el alcance exacto y los límites de una característica que van a desarrollar.

---

## 2. Daily Scrum (El "Stand-up" Diario)
La reunión de 15 minutos donde respondes: ¿Qué hice ayer? ¿Qué haré hoy? ¿Qué me bloquea? Aquí necesitas verbos de acción pura.

* **Work on** (Pasado: *Worked on* | Futuro: *Will work on*)
  * *Uso:* El verbo más común. Lo usas para decir en qué tarea estuviste metiendo código. *"Yesterday, I worked on the login API."*
* **Block** (Pasado: *Blocked* | Futuro: *Will block*)
  * *Uso:* Crucial para levantar la mano cuando algo te impide avanzar. *"I am blocked by the database migration."*
* **Complete** (Pasado: *Completed* | Futuro: *Will complete*)
  * *Uso:* Para reportar que terminaste una tarea al 100%.
* **Tackle** (Pasado: *Tackled* | Futuro: *Will tackle*)
  * *Uso:* Una forma muy profesional de decir que vas a "enfrentar" o empezar a trabajar en un problema difícil.
* **Update** (Pasado: *Updated* | Futuro: *Will update*)
  * *Uso:* Cuando refrescaste una librería, actualizaste el estado de tu ticket en Jira o modificaste documentación.
* **Sync** (Pasado: *Synced* | Futuro: *Will sync*)
  * *Uso:* Cuando necesitas hablar rápidamente con otro desarrollador después de la Daily para alinear su trabajo. *"I will sync with John regarding the JWT implementation."*
* **Resolve** (Pasado: *Resolved* | Futuro: *Will resolve*)
  * *Uso:* Cuando arreglas un bug o un conflicto de código.
* **Implement** (Pasado: *Implemented* | Futuro: *Will implement*)
  * *Uso:* Cuando plasmas la lógica de negocio en el código (ej. "Implementé la pasarela de pago").
* **Investigate** (Pasado: *Investigated* | Futuro: *Will investigate*)
  * *Uso:* Cuando aún no estás programando, sino leyendo logs o buscando por qué algo está fallando.
* **Review** (Pasado: *Reviewed* | Futuro: *Will review*)
  * *Uso:* Muy usado para decir que estuviste revisando el código de un compañero (Pull Requests).

---

## 3. Sprint Review (Revisión del Sprint)
Aquí le muestras el software funcionando a los stakeholders (clientes/dueños). Es momento de lucirse.

* **Demonstrate / Demo** (Pasado: *Demonstrated / Demoed* | Futuro: *Will demonstrate / Will demo*)
  * *Uso:* Cuando compartes pantalla y muestras cómo funciona la nueva característica en vivo.
* **Present** (Pasado: *Presented* | Futuro: *Will present*)
  * *Uso:* Similar a demo, pero más enfocado a explicar el valor de negocio de lo entregado.
* **Deliver** (Pasado: *Delivered* | Futuro: *Will deliver*)
  * *Uso:* Para hablar del valor o de las funcionalidades que el equipo logró terminar en este Sprint.
* **Accept** (Pasado: *Accepted* | Futuro: *Will accept*)
  * *Uso:* Lo usa el Product Owner cuando revisa tu trabajo y confirma que cumple con los criterios.
* **Reject** (Pasado: *Rejected* | Futuro: *Will reject*)
  * *Uso:* Cuando el trabajo no cumple los requisitos y debe volver al backlog.
* **Gather** (Pasado: *Gathered* | Futuro: *Will gather*)
  * *Uso:* Generalmente usado con "feedback". Sirve para decir que estás recolectando las opiniones de los clientes.
* **Showcase** (Pasado: *Showcased* | Futuro: *Will showcase*)
  * *Uso:* Exhibir con orgullo el trabajo realizado por el equipo de desarrollo.
* **Release** (Pasado: *Released* | Futuro: *Will release*)
  * *Uso:* Cuando la característica que muestran ya está disponible para que los usuarios reales la utilicen en producción.
* **Inspect** (Pasado: *Inspected* | Futuro: *Will inspect*)
  * *Uso:* Analizar el incremento de software entregado para ver si se alinea con la meta del producto.

---

## 4. Sprint Retrospective (Retrospectiva del Sprint)
La ceremonia para hablar de nosotros, el equipo. Qué hicimos bien, qué hicimos mal y cómo mejorar nuestros procesos.

* **Improve** (Pasado: *Improved* | Futuro: *Will improve*)
  * *Uso:* El corazón de la retrospectiva. Hablar de qué procesos técnicos o humanos vamos a hacer mejor.
* **Reflect** (Pasado: *Reflected* | Futuro: *Will reflect*)
  * *Uso:* Tomarse un momento para pensar profundamente sobre el último ciclo de trabajo.
* **Identify** (Pasado: *Identified* | Futuro: *Will identify*)
  * *Uso:* Cuando el equipo encuentra la causa raíz de un problema o un cuello de botella en su forma de trabajar.
* **Brainstorm** (Pasado: *Brainstormed* | Futuro: *Will brainstorm*)
  * *Uso:* Generar una lluvia de ideas rápida entre todos para solucionar un problema específico.
* **Propose** (Pasado: *Proposed* | Futuro: *Will propose*)
  * *Uso:* Cuando sugieres una nueva herramienta, una nueva regla de equipo o un cambio de arquitectura.
* **Adapt** (Pasado: *Adapted* | Futuro: *Will adapt*)
  * *Uso:* Cambiar nuestro comportamiento o procesos en respuesta a los problemas que identificamos.
* **Iterate** (Pasado: *Iterated* | Futuro: *Will iterate*)
  * *Uso:* Aplicar pequeños cambios continuos a nuestro proceso de trabajo para irlo perfeccionando paso a paso.
* **Fail** (Pasado: *Failed* | Futuro: *Will fail*)
  * *Uso:* Es sano hablar de los errores. Lo usas para admitir qué cosas salieron mal durante el Sprint.
* **Learn** (Pasado: *Learned* | Futuro: *Will learn*)
  * *Uso:* La consecuencia de fallar. Qué conocimiento sacamos del error.
* **Celebrate** (Pasado: *Celebrated* | Futuro: *Will celebrate*)
  * *Uso:* Reconocer los logros, felicitar a un compañero por su ayuda y aplaudir el buen trabajo.

---

## 5. Backlog Refinement (Refinamiento del Backlog)
La reunión donde preparamos el trabajo del futuro para que esté listo cuando llegue la Planning.

* **Refine** (Pasado: *Refined* | Futuro: *Will refine*)
  * *Uso:* Limpiar, aclarar y detallar las historias de usuario para que queden listas para el desarrollo.
* **Detail** (Pasado: *Detailed* | Futuro: *Will detail*)
  * *Uso:* Agregar información técnica, mocks o descripciones exactas a un ticket vacío.
* **Split** (Pasado: *Split* [irregular] | Futuro: *Will split*)
  * *Uso:* Dividir una historia de usuario gigantesca (Épica) en historias más pequeñas que quepan en un solo Sprint.
* **Discard** (Pasado: *Discarded* | Futuro: *Will discard*)
  * *Uso:* Eliminar tickets del backlog que ya no tienen sentido para el negocio o que están obsoletos.
* **Analyze** (Pasado: *Analyzed* | Futuro: *Will analyze*)
  * *Uso:* Estudiar los requerimientos técnicos antes de comprometerse a programarlos.
* **Revise** (Pasado: *Revised* | Futuro: *Will revise*)
  * *Uso:* Volver a mirar una estimación antigua o un requerimiento porque las reglas de negocio cambiaron.
* **Reorder** (Pasado: *Reordered* | Futuro: *Will reorder*)
  * *Uso:* Cambiar el orden de prioridad de los tickets en el tablero.

---

El inglés técnico no tiene que ser un bloqueador en tu carrera. Toma estos verbos, escríbelos en notas adhesivas o úsalos de plantilla para tu próxima Daily. Mientras más los uses, más naturales se volverán.

¿Hay algún otro verbo que uses mucho en tus reuniones y que no esté en la lista? ¡Déjalo en los comentarios y hagamos crecer esta guía!

---
*Sigue escalando tu nivel técnico (y de idiomas) con [Code With Botina](https://blog.codewithbotina.com/).*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Java no está muerto, está evolucionando: Las 10 mejores librerías y frameworks para crear APIs en 2026]]></title>
      <link>https://blog.codewithbotina.com/es/posts/java-no-esta-muerto-esta-evolucionando-las-10-mejores-librerias-y-frameworks-para-crear-apis-en-2026</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/java-no-esta-muerto-esta-evolucionando-las-10-mejores-librerias-y-frameworks-para-crear-apis-en-2026</guid>
      <pubDate>Thu, 19 Mar 2026 20:19:02 GMT</pubDate>
      <description><![CDATA[Java no está muerto, está evolucionando: Las 10 mejores librerías y frameworks para crear APIs en 2026 Bienvenidos de nuevo a Code With Botina. Si alguna vez has tenido que construir un backend en Jav...]]></description>
      <enclosure url="https://www.tatvasoft.com/outsourcing/wp-content/uploads/2025/01/Best-Java-Frameworks.jpg" type="image/jpeg"/>
      <content:encoded><![CDATA[# Java no está muerto, está evolucionando: Las 10 mejores librerías y frameworks para crear APIs en 2026

Bienvenidos de nuevo a [Code With Botina](https://blog.codewithbotina.com/). Si alguna vez has tenido que construir un backend en Java para un proyecto universitario, probablemente te hayas enfrentado a configuraciones interminables, archivos XML gigantescos y un consumo de memoria brutal. Es normal que termines agotado y pensando que lenguajes como Node.js o Go son la única salida.

Pero la realidad de la industria es diferente. Java sigue siendo el rey indiscutible de las arquitecturas empresariales, y su ecosistema ha evolucionado de manera increíble. Hoy vamos a explorar las 10 herramientas más utilizadas para crear APIs en Java, en qué tipo de proyectos brillan realmente, y cómo se ve un endpoint en cada una de ellas. 

Olvídate del código espagueti; es hora de hablar de arquitectura moderna.

---

### 1. Spring Boot (El Rey Indiscutible)
Si hay un estándar en la industria, es Spring Boot. Nació para eliminar la pesadilla de configuración del antiguo Spring Framework. Viene con "baterías incluidas": seguridad, acceso a datos, métricas y servidores embebidos.
* **Ideal para:** Arquitecturas de microservicios complejas, aplicaciones monolíticas empresariales y proyectos donde necesitas un ecosistema gigante con integraciones para todo (bases de datos, colas de mensajes, cloud).
* **Ejemplo de Endpoint:**

```java
@RestController
@RequestMapping("/api")
public class HolaController {
    
    @GetMapping("/saludo")
    public String saludar() {
        return "¡Hola desde Spring Boot!";
    }
}
```

### 2. Quarkus (El Java Supersónico Subatómico)
Creado por Red Hat, Quarkus es la respuesta de Java a la era del Edge Computing y Serverless. Utiliza GraalVM para compilar tu código Java en un binario nativo. ¿El resultado? Arranca en milisegundos y consume una fracción de la memoria RAM que usa Spring.
* **Ideal para:** Entornos Serverless (como AWS Lambda), despliegues masivos en Kubernetes y arquitecturas nativas de la nube donde el consumo de recursos cuesta dinero.
* **Ejemplo de Endpoint:**

```java
@Path("/api/saludo")
public class HolaResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String saludar() {
        return "¡Hola desde Quarkus!";
    }
}
```

### 3. Micronaut
Muy similar a Quarkus en su filosofía. Micronaut está diseñado desde cero para microservicios. A diferencia de Spring (que usa "Reflection" en tiempo de ejecución y ralentiza el arranque), Micronaut hace toda su magia de inyección de dependencias en tiempo de compilación.
* **Ideal para:** Microservicios ligeros, aplicaciones Serverless y proyectos de Internet de las Cosas (IoT) donde el hardware tiene memoria limitada.
* **Ejemplo de Endpoint:**

```java
@Controller("/api")
public class HolaController {

    @Get(uri="/saludo", produces="text/plain")
    public String saludar() {
        return "¡Hola desde Micronaut!";
    }
}
```

### 4. Javalin (Simplicidad al estilo Express.js)
Si vienes del mundo de JavaScript/Node.js y amas la simplicidad de Express.js, Javalin te va a encantar. No usa anotaciones mágicas (`@`). Es un framework puramente programático, increíblemente ligero y escrito en Kotlin (pero 100% interoperable con Java).
* **Ideal para:** Proyectos rápidos, prototipos (MVPs), APIs REST sencillas y desarrolladores que están aprendiendo y no quieren lidiar con la magia negra de frameworks pesados.
* **Ejemplo de Endpoint:**

```java
import io.javalin.Javalin;

public class App {
    public static void main(String[] args) {
        Javalin app = Javalin.create().start(8080);
        app.get("/api/saludo", ctx -> ctx.result("¡Hola desde Javalin!"));
    }
}
```

### 5. Eclipse Vert.x (La Bestia Reactiva)
Vert.x no es un framework tradicional, es un *toolkit* para construir aplicaciones reactivas en la JVM. Utiliza un "Event Loop" (igual que Node.js), lo que significa que puede manejar decenas de miles de conexiones concurrentes utilizando muy pocos hilos del procesador.
* **Ideal para:** Aplicaciones de tiempo real (chats, dashboards financieros en vivo con WebSockets), streaming de video y sistemas con una carga de red extremadamente alta.
* **Ejemplo de Endpoint:**

```java
import io.vertx.core.Vertx;

public class App {
    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();
        vertx.createHttpServer().requestHandler(req -> {
            if (req.uri().equals("/api/saludo")) {
                req.response().end("¡Hola desde Vert.x!");
            }
        }).listen(8080);
    }
}
```

### 6. Dropwizard
Dropwizard fue uno de los pioneros en empaquetar una aplicación Java con un servidor web integrado (Jetty) en un solo archivo `.jar`. Es muy "opinionado", es decir, te obliga a usar las librerías que ellos consideran mejores (Jersey para REST, Jackson para JSON, Metrics para monitoreo).
* **Ideal para:** Servicios RESTful de grado de producción donde la estabilidad es primordial y necesitas métricas operacionales desde el minuto cero.
* **Ejemplo de Endpoint:**

```java
@Path("/api/saludo")
@Produces(MediaType.APPLICATION_JSON)
public class HolaResource {

    @GET
    public String saludar() {
        return "{\"mensaje\": \"¡Hola desde Dropwizard!\"}";
    }
}
```

### 7. Helidon (El contendiente de Oracle)
Helidon es una colección de librerías para escribir microservicios, respaldada por Oracle. Tiene dos sabores: *Helidon MP* (para quienes gustan de los estándares empresariales clásicos) y *Helidon SE* (su versión reactiva y ultraligera que no usa anotaciones).
* **Ideal para:** Migrar aplicaciones legacy a microservicios dentro del ecosistema Oracle o crear APIs reactivas de alto rendimiento.
* **Ejemplo de Endpoint (Helidon SE):**

```java
import io.helidon.webserver.Routing;
import io.helidon.webserver.WebServer;

public class App {
    public static void main(String[] args) {
        Routing routing = Routing.builder()
                .get("/api/saludo", (req, res) -> res.send("¡Hola desde Helidon!"))
                .build();
        WebServer.create(routing).start();
    }
}
```

### 8. Spark Java (El Minimalista)
*Nota: No confundir con Apache Spark (que es para Big Data).*
Spark Java es otro micro-framework inspirado en Sinatra (Ruby). Fue creado para facilitar la creación de aplicaciones web en Java con un esfuerzo mínimo y sin configuraciones XML.
* **Ideal para:** Estudiantes, pruebas de concepto rápidas y servicios extremadamente pequeños que no requieren una arquitectura compleja.
* **Ejemplo de Endpoint:**

```java
import static spark.Spark.*;

public class App {
    public static void main(String[] args) {
        get("/api/saludo", (req, res) -> "¡Hola desde Spark Java!");
    }
}
```

### 9. Play Framework
Play fue diseñado para solucionar las deficiencias de rendimiento de los frameworks web tradicionales. Está construido sobre Akka (una herramienta de concurrencia muy potente) y es "Stateless" (sin estado), lo que lo hace perfecto para escalar horizontalmente.
* **Ideal para:** Aplicaciones web Full-Stack (con frontend integrado), portales de alto tráfico y arquitecturas que requieren procesamiento asíncrono pesado.
* **Ejemplo de Endpoint:**

```java
import play.mvc.*;

public class HolaController extends Controller {
    public Result saludar() {
        return ok("¡Hola desde Play Framework!");
    }
}
```

### 10. Jersey (El Estándar JAX-RS)
Jersey no es un framework completo, sino una librería que implementa la especificación oficial de Java para APIs RESTful (JAX-RS). Muchas herramientas (como Dropwizard o Helidon) lo usan por debajo.
* **Ideal para:** Desarrolladores que necesitan apegarse estrictamente a los estándares de Jakarta EE (antes Java EE) y corporaciones tradicionales.
* **Ejemplo de Endpoint:**

```java
@Path("/api")
public class HolaResource {

    @GET
    @Path("/saludo")
    @Produces(MediaType.TEXT_PLAIN)
    public String saludar() {
        return "¡Hola desde Jersey!";
    }
}
```

---

### Conclusión

Aprender a programar no debería tratarse de sufrir configurando herramientas obsoletas, sino de elegir la pieza de tecnología adecuada para resolver un problema específico. 

Si necesitas el peso pesado de la industria, ve por **Spring Boot**. Si quieres modernizarte y ahorrar en la nube, aprende **Quarkus** o **Micronaut**. Y si solo quieres probar una idea este fin de semana sin estresarte, dale una oportunidad a **Javalin**.

¿Cuál de estos has usado en tus proyectos o cuál te obligan a usar en la universidad? ¡Hablemos de código y arquitectura en los comentarios!

---
*Mantente al tanto de [Code With Botina](https://blog.codewithbotina.com/) para seguir dominando el backend real y dejar atrás las malas prácticas.*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Adiós al Over-fetching: Qué es GraphQL y por qué está revolucionando las APIs]]></title>
      <link>https://blog.codewithbotina.com/es/posts/adios-al-over-fetching-que-es-graphql-y-por-que-esta-revolucionando-las-apis</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/adios-al-over-fetching-que-es-graphql-y-por-que-esta-revolucionando-las-apis</guid>
      <pubDate>Tue, 17 Mar 2026 12:45:03 GMT</pubDate>
      <description><![CDATA[Adiós al Over-fetching: Qué es GraphQL y por qué está revolucionando las APIs Bienvenidos de nuevo a Code With Botina. En nuestros posts anteriores, hablamos maravillas de la arquitectura Cliente-Serv...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/adios-al-over-fetching-que-es-graphql-y-por-que-esta-revolucionando-las-apis-1773751500919.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# Adiós al Over-fetching: Qué es GraphQL y por qué está revolucionando las APIs

Bienvenidos de nuevo a [Code With Botina](https://blog.codewithbotina.com/). En nuestros posts anteriores, hablamos maravillas de la arquitectura Cliente-Servidor y de las peticiones HTTP que dan vida a las APIs REST. Pero seamos honestos: REST tiene sus problemas, especialmente cuando las aplicaciones crecen y se vuelven complejas.

Hoy vamos a hablar de **GraphQL**, la tecnología creada por Facebook (Meta) que llegó para cambiar las reglas del juego y solucionar los mayores dolores de cabeza de los desarrolladores Frontend y Backend.

---

## El Problema con REST: Demasiada o muy poca información

Imagina que estás construyendo la pantalla de perfil de un usuario para tu aplicación móvil. Solo necesitas mostrar su **nombre** y su **foto de perfil**.

En una API REST tradicional, harías una petición `GET` a `/api/usuarios/1`. 
¿El problema? El servidor te devuelve un archivo JSON gigante con el nombre, la foto, el correo electrónico, la dirección, la fecha de nacimiento, el historial de compras y el número de teléfono. 

A esto se le llama **Over-fetching (Sobrecarga de datos)**. Estás descargando un montón de datos que no necesitas, desperdiciando ancho de banda y batería del dispositivo del usuario.

Por otro lado, si también quieres mostrar los últimos 3 posts de ese usuario, la API REST tal vez te obligue a hacer *otra* petición a `/api/usuarios/1/posts`. A esto se le llama **Under-fetching (Falta de datos)**, porque una sola petición no fue suficiente para armar tu interfaz.

---

## La Solución: ¿Qué es GraphQL?

**GraphQL** es un lenguaje de consultas para tu API. En lugar de tener múltiples rutas (endpoints) como en REST (`/usuarios`, `/posts`, `/comentarios`), **GraphQL tiene un solo endpoint** (generalmente `/graphql`).

La magia radica en que el Cliente (el Frontend) tiene el control absoluto. En lugar de que el servidor decida qué datos enviar, **el cliente le dice al servidor exactamente qué datos necesita, y el servidor le devuelve solo eso. Ni más, ni menos.**

### Ejemplo Práctico de Código

Siguiendo nuestro ejemplo anterior, si solo queremos el nombre, la foto y los títulos de los últimos posts, enviaríamos esta consulta (Query) al servidor GraphQL:

```graphql
query {
  usuario(id: "1") {
    nombre
    fotoPerfil
    posts(limite: 3) {
      titulo
    }
  }
}
```

¿Y qué nos devuelve el servidor? Exactamente la misma estructura en formato JSON:

```json
{
  "data": {
    "usuario": {
      "nombre": "Botina",
      "fotoPerfil": "[https://img.com/foto.jpg](https://img.com/foto.jpg)",
      "posts": [
        { "titulo": "Qué es una API" },
        { "titulo": "Edge Computing Explicado" },
        { "titulo": "El daño de los falsos docentes" }
      ]
    }
  }
}
```

¡Boom! Una sola petición, cero datos basura descargados.

---

## ¿Por qué GraphQL es tan relevante en la actualidad?

1. **Rendimiento en Dispositivos Móviles:** Al descargar solo lo estrictamente necesario, las aplicaciones cargan mucho más rápido y consumen menos datos móviles.
2. **Desarrollo Ágil:** En REST, si el equipo de Frontend necesita un dato nuevo en la pantalla, el equipo de Backend tiene que modificar el endpoint. En GraphQL, el Frontend simplemente agrega un campo más a su consulta y listo. ¡Independencia total!
3. **Fuertemente Tipado:** GraphQL tiene un "Esquema" (Schema) estricto. El Frontend sabe exactamente qué tipos de datos existen (String, Int, Boolean), lo que hace que herramientas como el autocompletado en el editor de código funcionen de maravilla y se eviten miles de bugs.

---

## Conclusión

REST no va a desaparecer, sigue siendo excelente para servicios simples o microservicios internos. Pero para aplicaciones complejas, modernas y orientadas al usuario final, GraphQL es el rey indiscutible. Nos devuelve el control y optimiza nuestras aplicaciones al máximo.

¿Alguna vez has sufrido peleando con una API REST que te devolvía demasiada basura? ¡Déjalo en los comentarios!

---
*Si te apasiona la arquitectura de software y el buen código, asegúrate de seguir explorando [Code With Botina](https://blog.codewithbotina.com/).*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[El lenguaje oculto de la Web: Qué son las peticiones HTTP y los métodos que nadie te enseña]]></title>
      <link>https://blog.codewithbotina.com/es/posts/el-lenguaje-oculto-de-la-web-que-son-las-peticiones-http-y-los-metodos-que-nadie-te-ensena</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/el-lenguaje-oculto-de-la-web-que-son-las-peticiones-http-y-los-metodos-que-nadie-te-ensena</guid>
      <pubDate>Fri, 13 Mar 2026 00:25:25 GMT</pubDate>
      <description><![CDATA[El lenguaje oculto de la Web: Qué son las peticiones HTTP y los métodos que nadie te enseña Cada vez que abres tu navegador, le das "me gusta" a una foto o envías un mensaje, tu dispositivo está tenie...]]></description>
      <enclosure url="https://parzibyte.me/blog/posts/peticion-http-php-json-formulario/Petici%C3%B3n-HTTP-en-PHP-M%C3%A9todo-POST-con-datos-de-formulario_hu_c65c2db43953336b.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# El lenguaje oculto de la Web: Qué son las peticiones HTTP y los métodos que nadie te enseña

Cada vez que abres tu navegador, le das "me gusta" a una foto o envías un mensaje, tu dispositivo está teniendo una conversación invisible con un servidor en alguna parte del mundo. Esa conversación ocurre gracias al protocolo HTTP.

Hoy vamos a sumergirnos en el núcleo de la arquitectura web: **las peticiones HTTP**. Vamos a ver qué son exactamente, cómo funcionan, los métodos más populares y aquellos métodos "raros" que casi nadie menciona pero que son vitales para la red.

---

## ¿Qué es una petición HTTP y cómo funciona?

HTTP significa *HyperText Transfer Protocol* (Protocolo de Transferencia de Hipertexto). Es el conjunto de reglas que define cómo se envían los mensajes entre un Cliente (tu navegador o aplicación) y un Servidor.

Piensa en una petición HTTP como enviar una carta formal por correo. Para que el servidor entienda lo que quieres, tu carta debe tener una estructura muy específica:

1. **La URL (El destino):** A dónde envías la carta (ej. `https://api.sitio.com/usuarios`).
2. **El Método (La intención):** Qué quieres que el servidor haga con esa carta (ej. "dame información" o "guarda esto").
3. **Los Headers (Los metadatos):** Información extra como "hablo español", "este es mi token de seguridad" o "el formato de mi mensaje es JSON".
4. **El Body (El cuerpo):** El contenido real de tu mensaje. (Ojo: no todas las peticiones llevan cuerpo).

Cuando el servidor recibe esta "carta", la procesa y te devuelve una **Respuesta HTTP**, que incluye un Código de Estado (como el famoso `404 Not Found` o un `200 OK`) y los datos que pediste.

---

## Los protagonistas: Los métodos del día a día (CRUD)

Si estás construyendo una API REST, pasarás el 95% de tu tiempo usando estos cinco métodos, los cuales se alinean perfectamente con las operaciones de base de datos (Crear, Leer, Actualizar, Borrar):

* **GET:** Sirve para **Leer** o solicitar datos. Es una petición de solo lectura. No debería modificar nada en el servidor. *Ejemplo: Cargar tu muro de noticias.*
* **POST:** Sirve para **Crear** un nuevo recurso en el servidor. Los datos viajan en el Body de la petición. *Ejemplo: Registrar un nuevo usuario o publicar un tweet.*
* **PUT:** Sirve para **Actualizar** un recurso por completo. Si el recurso no existe, a veces lo crea. Reemplaza toda la entidad. *Ejemplo: Actualizar todo tu perfil de usuario.*
* **PATCH:** Sirve para **Modificar** solo una parte de un recurso. Es más eficiente que PUT si solo quieres cambiar un detalle. *Ejemplo: Cambiar solo tu foto de perfil, dejando el resto intacto.*
* **DELETE:** Como su nombre indica, sirve para **Borrar** un recurso del servidor.

---

## El lado oscuro: Los métodos HTTP menos conocidos

El protocolo HTTP tiene herramientas muy específicas que a menudo se escapan de los tutoriales básicos. Conocerlas te dará una ventaja técnica enorme:

### 1. OPTIONS (El pre-vuelo)
Antes de que tu navegador haga una petición compleja a un servidor en otro dominio (algo llamado CORS), primero envía una petición `OPTIONS` en secreto. Básicamente le pregunta al servidor: *"Oye, ¿qué métodos y configuraciones me permites usar?"*. Si el servidor da luz verde, el navegador envía la petición real.

### 2. HEAD (El modo fantasma)
Es idéntico a `GET`, pero con una diferencia clave: **el servidor responde sin el Body**. Solo te devuelve los Headers. 
* *¿Para qué se usa?* Para comprobar si un archivo existe, ver cuándo fue modificado por última vez o saber cuánto pesa antes de decidir si vale la pena descargarlo (ahorrando mucho ancho de banda).

### 3. TRACE (El eco)
Se utiliza principalmente para diagnóstico. Le dice al servidor que devuelva exactamente la misma petición que recibió. 
* *¿Para qué se usa?* Para ver si servidores intermedios (como proxies o firewalls) están alterando tu petición por el camino. (Nota: suele desactivarse en producción por motivos de seguridad).

### 4. CONNECT (El túnel)
Este método se utiliza para pedirle a un servidor proxy que abra un túnel de comunicación bidireccional con otro destino. Es la magia que permite que el tráfico cifrado (HTTPS) pase a través de un proxy HTTP normal.

---

## Conclusión

Entender los métodos HTTP es dejar de ver la web como simple "magia" y empezar a entenderla como la máquina bien engrasada que realmente es. La próxima vez que uses una API o inspecciones la pestaña de "Network" en las herramientas de desarrollo de tu navegador, sabrás exactamente qué está pasando detrás de escena.

¿Conocías los métodos HEAD u OPTIONS? ¡Deja un comentario con tu experiencia!]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[JWT Explicado: El estándar moderno de autenticación y cómo sobrevivíamos antes de él]]></title>
      <link>https://blog.codewithbotina.com/es/posts/jwt-explicado-el-estandar-moderno-de-autenticacion-y-como-sobreviviamos-antes-de-el</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/jwt-explicado-el-estandar-moderno-de-autenticacion-y-como-sobreviviamos-antes-de-el</guid>
      <pubDate>Thu, 12 Mar 2026 12:46:01 GMT</pubDate>
      <description><![CDATA[JWT Explicado: El estándar moderno de autenticación y cómo sobrevivíamos antes de él Bienvenidos de nuevo a Code With Botina. Si has estado construyendo APIs o aplicaciones modernas, seguramente te ha...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/jwt-explicado-el-estandar-moderno-de-autenticacion-y-como-sobreviviamos-antes-de-el-1773319559354.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# JWT Explicado: El estándar moderno de autenticación y cómo sobrevivíamos antes de él

Bienvenidos de nuevo a [Code With Botina](https://blog.codewithbotina.com/). Si has estado construyendo APIs o aplicaciones modernas, seguramente te has topado con el gran dilema: *"¿Cómo sé de forma segura quién es el usuario que me está haciendo esta petición?"*. 

Hoy vamos a desmitificar una de las tecnologías más usadas (y a veces peor entendidas) en la arquitectura web: los **JWT (JSON Web Tokens)**. Vamos a ver qué son, cómo se usan en la vida real y cómo era el oscuro mundo de la autenticación antes de que existieran.

---

## El Pasado: ¿Cómo nos autenticábamos antes de JWT? (Sesiones con Estado)

Para entender por qué JWT es tan popular, primero debemos entender el problema que vino a resolver. Antes, el rey indiscutible era la **Autenticación Basada en Sesiones (Stateful)**.

Funcionaba así:
1. Iniciabas sesión con tu usuario y contraseña.
2. El servidor verificaba tus datos y creaba un registro en su propia memoria (o base de datos) diciendo: *"El ID de sesión `abc-123` pertenece a Zeus"*.
3. El servidor te devolvía ese ID (`abc-123`) guardado en una **Cookie**.
4. En cada petición futura, tu navegador enviaba esa Cookie. El servidor tenía que buscar en su memoria: *"A ver, ¿quién era el dueño de `abc-123`? Ah, sí, Zeus. Déjalo pasar"*.

**¿Cuál era el problema? La Escalabilidad.**
Si tu aplicación crecía y necesitabas tener 5 servidores (Microservicios), ¡el servidor número 2 no sabía quién eras porque tu sesión estaba guardada en la memoria del servidor 1! Tenías que implementar bases de datos compartidas solo para sesiones (como Redis), lo cual añadía mucha complejidad y latencia.

---

## El Presente: ¿Qué es un JWT? (Autenticación Sin Estado)

JWT (se pronuncia "jot") significa **JSON Web Token**. Es un estándar abierto que permite transmitir información entre dos partes de forma segura como un objeto JSON.

La magia del JWT es que es **Stateless (Sin Estado)**. El servidor ya no necesita guardar *nada* en su memoria para saber quién eres. Toda la información necesaria viaja dentro del propio token.

Un JWT parece una cadena de texto sin sentido, pero en realidad está compuesto por tres partes separadas por puntos (`.`):
1. **Header (Cabecera):** Dice qué tipo de token es y qué algoritmo se usó para firmarlo.
2. **Payload (Carga útil):** Aquí van tus datos (llamados *claims*). Por ejemplo: tu ID de usuario, tu rol (admin o usuario), y cuándo expira el token.
3. **Signature (Firma):** Es la parte más importante. El servidor toma el Header, el Payload y una **Clave Secreta** que solo él conoce, y genera una firma criptográfica. 

Si un hacker intenta cambiar su rol de "usuario" a "admin" en el Payload, la firma ya no coincidirá matemáticamente y el servidor rechazará el token instantáneamente.

---

## ¿Cómo se utiliza un JWT en la vida práctica?

Los JWT se usan principalmente para la **Autenticación en APIs**. Así es el flujo moderno cuando inicias sesión en una SPA (Single Page Application) o desde tu teléfono:

1. **El Inicio de Sesión (Login):** Ingresas tu usuario y contraseña. El servidor verifica en la base de datos que eres tú.
2. **La Creación del Token:** El servidor toma tus datos básicos (tu ID, tu correo, cuándo expira la sesión) y los firma con su clave secreta creando un JWT.
3. **El Token viaja al Cliente:** El servidor te devuelve ese token como un "pase de abordar" digital.
4. **Almacenamiento en el Cliente:** Tu navegador o aplicación móvil guarda ese token (usualmente en `localStorage`, o idealmente en una `HTTPOnly Cookie` por seguridad).
5. **Las Peticiones Futuras:** En cada petición (por ejemplo, ver tu perfil o comprar algo), el cliente envía este token al servidor, normalmente en la cabecera de la petición llamada **`Authorization: Bearer `**.
6. **La Verificación (Sin Base de Datos):** El servidor recibe el token y con su clave secreta verifica matemáticamente la firma del JWT. **No necesita consultar ninguna base de datos para saber quién eres ni tu rol.** Sabe todo lo que necesita solo con leer la carga útil.

---

## Conclusión

JWT nos ha salvado de la pesadilla de sincronizar servidores y crear bases de datos gigantescas solo para recordar quién estaba conectado. Su naturaleza "Sin Estado" lo hace perfecto para arquitecturas de Microservicios, APIs REST y Serverless.

Pero ten cuidado: **Los JWT están codificados, no encriptados**. ¡Cualquiera puede leer el Payload de un token! NUNCA pongas información sensible como contraseñas en el payload de tu token.

¿Ya has implementado JWT en tus proyectos o sigues usando sesiones con estado? ¡Cuéntame en los comentarios!

---
*Suscríbete a [Code With Botina](https://blog.codewithbotina.com/) para seguir escalando tus conocimientos de backend, APIs y seguridad.*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Si no tienes vocación, vete: El daño de los falsos "docentes" y por qué los estudiantes debemos alzar la voz]]></title>
      <link>https://blog.codewithbotina.com/es/posts/si-no-tienes-vocacion-vete-el-dano-de-los-falsos-docentes-y-por-que-los-estudiantes-debemos-alzar-la-voz</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/si-no-tienes-vocacion-vete-el-dano-de-los-falsos-docentes-y-por-que-los-estudiantes-debemos-alzar-la-voz</guid>
      <pubDate>Tue, 10 Mar 2026 17:38:59 GMT</pubDate>
      <description><![CDATA[Si no tienes vocación, vete: El daño de los falsos "docentes" y por qué los estudiantes debemos alzar la voz En Code With Botina solemos hablar de código, arquitecturas y metodologías. Pero el conocim...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/if-you-lack-the-vocation-leave-the-damage-of-fake-teachers-and-why-students-must-speak-up-1773154629275.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# Si no tienes vocación, vete: El daño de los falsos "docentes" y por qué los estudiantes debemos alzar la voz

En [Code With Botina](https://blog.codewithbotina.com/) solemos hablar de código, arquitecturas y metodologías. Pero el conocimiento no se adquiere en el vacío; se transmite. Y hoy, necesito hacer una pausa en lo técnico para hablar de algo que nos está afectando a miles de estudiantes en todo el mundo: **la crisis de la verdadera docencia.**

Hoy quiero alzar la voz por todos aquellos que nos hemos sentado frente a una pantalla o en un aula, sintiendo la frustración de intentar aprender de personas que, simplemente, no quieren enseñar.

---

## El muro del falso "Profesionalismo"

Todos nos hemos topado con ellos. Personas poco capacitadas para la pedagogía que se hacen llamar "docentes". Se ocultan detrás de un muro de arrogancia y de un malentendido "profesionalismo" para justificar su mediocridad en el aula. 

Tienen títulos, sí, pero no se sabe de dónde sacaron las credenciales para estar frente a un grupo humano. Creen que leer diapositivas en voz alta, asignar trabajos absurdos y responder con soberbia a las dudas legítimas es dar clases. En su forma de hablar, en su tono de voz y en su actitud, se respira un desprecio absoluto por su propia labor y por sus alumnos.

Ser un experto en tu área no te hace un buen profesor. La docencia requiere un don, requiere paciencia, requiere empatía y, sobre todo, **requiere vocación**. Si careces de todo esto, no eres un educador; eres solo un obstáculo en el camino de quienes sí queremos aprender.

---

## Un mensaje directo y sin filtros

A esos "profesores" que nos miran por encima del hombro y que nos culpan de no entender sus nulas explicaciones, hay que decirles las cosas sin pelos en la lengua:

**Si no les gusta enseñar, váyanse.** Váyanse al lugar más alejado posible, donde nadie los reconozca y donde no tengan en sus manos el futuro, la salud mental y las aspiraciones de ningún estudiante. La educación no es un refugio para egos frágiles ni un lugar para cobrar un cheque a costa de frustrar a la próxima generación de profesionales. Si detestan estar en el aula, les hacemos un favor al pedirles que den un paso al costado. Dejen el espacio a los verdaderos maestros que sí tienen el don de transformar vidas.

---

## A mis compañeros estudiantes: No nos quedemos callados

A pesar de la rabia que genera esta situación, este no es un mensaje de derrota. Todo lo contrario.

A ti, que estás leyendo esto después de una clase donde te hicieron sentir que no eras lo suficientemente bueno: **el problema no eres tú**. No permitas que la amargura de una persona sin vocación apague tu pasión por tu carrera. 

Tenemos que dejar de normalizar el maltrato académico. Es hora de alzar la voz. 
* Evalúen a sus profesores con honestidad.
* Quéjense formalmente cuando la enseñanza sea deficiente.
* Únanse como grupo y exijan la educación de calidad por la que están invirtiendo su tiempo y su esfuerzo.

No estamos solos en esto. Somos la generación que tiene las herramientas para aprender por su cuenta, para construir comunidades como esta y para exigir respeto. **No te quedes callado.** Tu educación es tu derecho, no un favor que te están haciendo.

¿Has tenido que lidiar con este tipo de "docentes" en tu carrera? Deja tu experiencia en los comentarios. Hagamos de este espacio un lugar donde podamos apoyarnos y alzar la voz juntos.

---
*Gracias por ser parte de [Code With Botina](https://blog.codewithbotina.com/). Seguimos aprendiendo, seguimos programando y, sobre todo, seguimos exigiendo lo que merecemos.*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Edge Computing Explicado: Qué es un "Worker" y cómo desplegar tus APIs GRATIS]]></title>
      <link>https://blog.codewithbotina.com/es/posts/edge-computing-explicado-que-es-un-worker-y-como-desplegar-tus-apis-gratis</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/edge-computing-explicado-que-es-un-worker-y-como-desplegar-tus-apis-gratis</guid>
      <pubDate>Mon, 09 Mar 2026 22:22:29 GMT</pubDate>
      <description><![CDATA[Edge Computing Explicado: Qué es un "Worker" y cómo desplegar tus APIs GRATIS Bienvenidos de nuevo a Code With Botina. En nuestros posts anteriores, hablamos sobre las APIs y la arquitectura tradicion...]]></description>
      <enclosure url="https://cf-assets.www.cloudflare.com/slt3lc6tev37/6elch54Rkrp0HUB7UJNNLd/0dd12730b17615dc97513c618b164973/Improving_Developer_Experience_for_Framework_Users.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# Edge Computing Explicado: Qué es un "Worker" y cómo desplegar tus APIs GRATIS

Bienvenidos de nuevo a [Code With Botina](https://blog.codewithbotina.com/). En nuestros posts anteriores, hablamos sobre las APIs y la arquitectura tradicional Cliente-Servidor. Pero internet evoluciona rápido. ¿Qué pasaría si te dijera que no siempre necesitas un servidor tradicional encendido 24/7 para alojar tu backend?

Entramos en la era del **Serverless Edge Computing** y la estrella del show: **El Worker**.

Hoy vamos a explorar qué es un Worker, por qué está revolucionando la forma en que desplegamos código, las plataformas más famosas para utilizarlos y cómo puedes lanzar tu propia API de forma completamente gratuita.

---

## ¿Qué es exactamente un "Worker"?

En el desarrollo backend tradicional, alquilas un servidor (como una instancia EC2 de AWS o un Droplet de DigitalOcean), instalas Node.js o Python, y lo mantienes encendido constantemente esperando peticiones.

Un **Worker** (específicamente un *Edge Worker*) es un fragmento de código pequeño y ligero que se ejecuta en la nube *solo* cuando un evento lo activa (como una petición HTTP).

En lugar de ejecutarse en un solo servidor en una ubicación específica (ej. Virginia, EE. UU.), el código de tu Worker se copia y distribuye en cientos de centros de datos en todo el mundo (el "Borde" o *Edge* de la red). Cuando un usuario de Colombia hace una petición, el código se ejecuta en un servidor en Colombia. Cuando un usuario en Japón hace la misma petición, se ejecuta en Japón.

### ¿Por qué es tan rápido? (V8 Isolates)
Los servidores tradicionales o los contenedores Docker tardan en arrancar (lo que se conoce como *Cold Starts* o arranques en frío). Los Workers evitan esto usando **V8 Isolates**, el mismo motor que usa Google Chrome para ejecutar JavaScript. En lugar de arrancar todo un sistema operativo, un Worker simplemente crea un pequeño entorno de ejecución en milisegundos.

---

## Plataformas famosas para ejecutar Workers

Varios gigantes tecnológicos lideran la revolución del *Serverless Edge*:

1. **Cloudflare Workers:** El rey absoluto del sector. Tienen servidores en más de 300 ciudades a nivel mundial. Su plataforma es increíblemente rápida y amigable para el desarrollador.
2. **Vercel Edge Functions:** Construido sobre la infraestructura de Cloudflare pero altamente optimizado para frameworks modernos como Next.js y Nuxt.
3. **Deno Deploy:** Creado por el desarrollador original de Node.js. Ejecuta TypeScript de forma nativa y es extremadamente rápido.
4. **AWS Lambda@Edge:** La solución de Amazon. Es muy potente, pero notoriamente compleja de configurar en comparación con las demás.

---

## Cómo usarlos GRATIS (Con ejemplo de código)

Vamos a crear una API sencilla usando **Cloudflare Workers**. Ofrecen una capa gratuita ridículamente buena: **100.000 peticiones al día, totalmente gratis.**

Mira lo simple que es el código. No necesitas Express.js, no necesitas librerías de enrutamiento. Solo necesitas JavaScript estándar:

```javascript
// index.js - Un Cloudflare Worker simple
export default {
  async fetch(request, env, ctx) {
    // 1. Revisamos la URL de la petición
    const url = new URL(request.url);

    // 2. Creamos una ruta de API simple
    if (url.pathname === "/api/hola") {
      const data = {
        mensaje: "¡Hola desde el Edge!",
        fecha: new Date().toISOString(),
        blog: "Code With Botina"
      };

      // 3. Retornamos una respuesta JSON
      return new Response(JSON.stringify(data), {
        headers: { "Content-Type": "application/json" },
        status: 200
      });
    }

    // 4. Respuesta por defecto si la ruta no existe
    return new Response("No Encontrado", { status: 404 });
  },
};

```

**Cómo desplegarlo:**

1. Instala su herramienta de terminal (CLI): `npm install -g wrangler`
2. Inicia sesión en tu cuenta gratuita: `wrangler login`
3. Despliega tu código al mundo: `wrangler deploy`

En menos de 5 segundos, tu API estará en vivo a nivel global. Sin mantenimiento de servidores, sin configuración de Linux, sin preocupaciones de escalabilidad.

---

## Conclusión

Los Workers están cambiando las reglas del juego. Nos obligan a escribir código más limpio, rápido y eficiente. Aunque no son perfectos para absolutamente todos los casos de uso (las tareas pesadas en segundo plano aún necesitan servidores tradicionales), son la herramienta definitiva para APIs modernas y microservicios.

¿Alguna vez has desplegado un proyecto usando arquitectura Serverless? ¡Hablemos de ello en los comentarios!

---

*Sigue escalando tus conocimientos con [Code With Botina](https://blog.codewithbotina.com/). ¡Nos vemos en el próximo post!*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[El pegamento digital del 2026: Qué es una API, Protocolos y por qué dominan el mundo]]></title>
      <link>https://blog.codewithbotina.com/es/posts/el-pegamento-digital-del-2026-que-es-una-api-protocolos-y-por-que-dominan-el-mundo</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/el-pegamento-digital-del-2026-que-es-una-api-protocolos-y-por-que-dominan-el-mundo</guid>
      <pubDate>Sun, 08 Mar 2026 21:39:42 GMT</pubDate>
      <description><![CDATA[El pegamento digital del 2026: Qué es una API, Protocolos y por qué dominan el mundo Bienvenidos de nuevo a Code With Botina. Si han estado siguiendo nuestras publicaciones sobre la arquitectura clien...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/el-pegamento-digital-del-2026-que-es-una-api-protocolos-y-por-que-dominan-el-mundo-1773005979872.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# El pegamento digital del 2026: Qué es una API, Protocolos y por qué dominan el mundo

Bienvenidos de nuevo a [Code With Botina](https://blog.codewithbotina.com/). Si han estado siguiendo nuestras publicaciones sobre la arquitectura cliente-servidor, ya saben que internet es una conversación masiva entre diferentes máquinas. Pero, ¿cómo se entienden exactamente estas máquinas? La respuesta es simple: **APIs**.

Hoy vamos a desglosar qué es una API, los tipos que existen, cómo se comunican y por qué en 2026, simplemente no puedes construir software moderno sin ellas.

---

## ¿Qué es una API?

API significa **Interfaz de Programación de Aplicaciones** (por sus siglas en inglés: *Application Programming Interface*).

Imagina que estás sentado en un restaurante. Tú (el cliente) quieres pedir comida a la cocina (el servidor). Sin embargo, no puedes simplemente entrar a la cocina y cocinarla tú mismo. Necesitas un mesero. Tú le dices tu orden al mesero, el mesero la lleva a la cocina y luego trae tu comida de vuelta a la mesa.

En el mundo digital, **la API es el mesero**. Es un conjunto de reglas y mecanismos que permite que una aplicación de software se comunique con otra.

**Ejemplo del mundo real:** Cuando usas una app como Uber, la app no tiene su propio sistema de mapas. En su lugar, usa una API para hablar con Google Maps, pidiéndole: *"Oye, muéstrame el mapa de estas coordenadas"*, y Google Maps devuelve la imagen a tu pantalla.

---

## Tipos de APIs (Por Acceso)

No todas las APIs están abiertas para todos. Dependiendo de quién pueda usarlas, se dividen en tres categorías principales:

1. **APIs Privadas (Internas):** Se usan exclusivamente dentro de una empresa para conectar sus propios microservicios internos. Por ejemplo, el sistema de recursos humanos de una empresa hablando con su sistema de nóminas.
2. **APIs de Socios (Partner APIs):** Se comparten solo con socios comerciales específicos. Necesitas una licencia o acuerdo especial para acceder a ellas.
3. **APIs Públicas (Abiertas):** Disponibles para que cualquier desarrollador las use. Piensa en la API de X (Twitter), APIs del clima, o la API de Stripe para procesar pagos.

---

## ¿Cómo se comunican? (Protocolos y Arquitecturas)

Para que dos sistemas hablen, necesitan acordar cómo formatear los mensajes. Estas son las arquitecturas dominantes en 2026:

* **REST (Representational State Transfer):** El rey indiscutible de la web. Utiliza peticiones HTTP estándar (GET, POST, PUT, DELETE) para gestionar datos. Es ligero, no guarda estado y utiliza principalmente JSON para enviar datos.
* **GraphQL:** Creado por Facebook. A diferencia de REST, donde el servidor decide qué datos enviar, GraphQL permite al cliente pedir *exactamente* lo que necesita—ni más, ni menos. Resuelve el problema de descargar demasiados datos innecesarios.
* **gRPC:** Desarrollado por Google. Es increíblemente rápido y utiliza un formato llamado *Protocol Buffers* en lugar de JSON. En 2026, se usa muchísimo para la comunicación interna de microservicios donde la velocidad es crítica.
* **WebSockets:** ¡Ya hablamos de esto antes! Mientras que REST es una petición de una sola vez, los WebSockets mantienen una conexión bidireccional permanente abierta, perfecta para chats en vivo o dashboards financieros en tiempo real.

---

## ¿Por qué las APIs son tan críticas en 2026?

Te preguntarás por qué hablamos de APIs justo ahora. En 2026, el panorama tecnológico ha evolucionado, y las APIs son el centro de todo:

1. **El boom de la integración de IA:** Todas las aplicaciones quieren incluir funciones de Inteligencia Artificial. Los desarrolladores no están entrenando modelos de lenguaje masivos desde cero; simplemente se conectan a las APIs de modelos como Gemini u OpenAI para añadir inteligencia al instante a sus apps.
2. **El estándar de los Microservicios:** Las aplicaciones monolíticas (donde todo es un solo bloque de código) son cosa del pasado. Hoy en día, una app es un rompecabezas de 50 pequeños servicios (autenticación, base de datos, interfaz) hablando entre sí constantemente a través de APIs.
3. **La Web "Headless" (Sin cabeza):** El Frontend (React, Vue) y el Backend (Node, Python) ahora están completamente separados. El único puente entre una hermosa interfaz de usuario y la base de datos es una API robusta.

---

## Conclusión

Las APIs son los hilos invisibles que mantienen unido el mundo digital moderno. Ya sea que estés construyendo un simple blog o una compleja plataforma impulsada por IA, dominar el diseño y la integración de APIs es una habilidad obligatoria para cualquier desarrollador hoy en día.

¿Cuál es tu API favorita para experimentar? ¡Hablemos de ello en los comentarios!

---
*¡Suscríbete a [Code With Botina](https://blog.codewithbotina.com/) para más inmersiones profundas en la arquitectura de software y redes!*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Deja de adivinar, empieza a testear: Por qué el TDD (Desarrollo Guiado por Pruebas) salvará tus proyectos]]></title>
      <link>https://blog.codewithbotina.com/es/posts/deja-de-adivinar-empieza-a-testear-por-que-el-tdd-desarrollo-guiado-por-pruebas-salvara-tus-proyectos</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/deja-de-adivinar-empieza-a-testear-por-que-el-tdd-desarrollo-guiado-por-pruebas-salvara-tus-proyectos</guid>
      <pubDate>Sat, 07 Mar 2026 22:48:50 GMT</pubDate>
      <description><![CDATA[Deja de adivinar, empieza a testear: Por qué el TDD (Desarrollo Guiado por Pruebas) salvará tus proyectos Bienvenidos de nuevo a Code With Botina. ¿Alguna vez has arreglado un bug en tu código, lo has...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/deja-de-adivinar-empieza-a-testear-por-que-el-tdd-desarrollo-guiado-por-pruebas-salvara-tus-proyectos-1772923728435.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# Deja de adivinar, empieza a testear: Por qué el TDD (Desarrollo Guiado por Pruebas) salvará tus proyectos

Bienvenidos de nuevo a [Code With Botina](https://blog.codewithbotina.com/). ¿Alguna vez has arreglado un bug en tu código, lo has subido a producción e inmediatamente has roto otras tres funcionalidades que no tenían nada que ver? Todos hemos pasado por ahí. Ese terror de hacer despliegues un viernes por la tarde es una experiencia universal para cualquier desarrollador.

Pero, ¿y si te dijera que hay una metodología que prácticamente elimina ese miedo? Hoy vamos a hablar del **TDD (Test-Driven Development o Desarrollo Guiado por Pruebas)**, qué es y por qué necesitas empezar a aplicarlo en tus proyectos desde ya.

---

## ¿Qué es exactamente el TDD?

A diferencia de la programación tradicional, donde primero escribes tu código y *quizás* escribes algunas pruebas después (si te sobra tiempo), el TDD invierte el proceso por completo. **Escribes la prueba (test) antes de escribir el código.**

Se basa en un ciclo muy corto, estricto y altamente efectivo conocido como **Red-Green-Refactor (Rojo-Verde-Refactorizar)**:

1. 🔴 **Rojo (Escribe un test que falle):** Escribes una prueba para una funcionalidad que aún no existe. Naturalmente, si la ejecutas, va a fallar.
2. 🟢 **Verde (Haz que pase):** Escribes la cantidad mínima de código necesaria —incluso si es feo o poco óptimo— solo para hacer que ese test se ponga verde (pase con éxito).
3. 🔵 **Refactorizar (Hazlo limpio):** Ahora que el test pasa, limpias tu código, lo optimizas y aplicas principios de *Clean Code*, con la total confianza de que si rompes algo, el test te avisará inmediatamente.

---

## ¿Por qué el TDD cambiará tu vida como desarrollador?

### 1. Refactorización sin miedo
Este es el mayor superpoder que te da el TDD. Cuando tienes una suite de pruebas sólida, puedes reescribir funciones enteras o actualizar librerías sin el miedo paralizante de tirar abajo todo el sistema. Si los tests están en verde, todo está bien.

### 2. Obliga a tener una mejor Arquitectura
¿Alguna vez has intentado escribir un test para una función gigante de 500 líneas? Es imposible. El TDD te obliga a escribir código pequeño, modular y desacoplado (siguiendo los principios SOLID) porque el código desacoplado es el único que es fácil de testear.

### 3. Las pruebas son Documentación Viva
Los comentarios se desactualizan; la documentación en la wiki se pierde. ¿Pero los tests? Los tests se ejecutan todos los días. Si un nuevo desarrollador entra a tu equipo, solo tiene que leer las pruebas para entender exactamente qué debe hacer una función y qué casos extremos maneja.

### 4. Menos Debugging, Más Programación
Sí, escribir pruebas al principio toma tiempo extra. Pero piensa en las horas (o días) que pasas haciendo *debugging* de código espagueti en producción. El TDD atrapa los bugs exactamente en el momento en que los escribes, ahorrándote incontables horas a largo plazo.

---

## Conclusión

El TDD no es solo una estrategia de pruebas; es una **estrategia de diseño**. Cambia tu mentalidad de "Voy a programar esto a ver si funciona" a "¿Qué necesita hacer exactamente esto y cómo voy a demostrar que lo hace?".

Si aún no lo has probado, empieza poco a poco. Escribe un test para tu próxima función de utilidad. La paz mental que obtendrás es adictiva.

¿Utilizas TDD en tu trabajo actual, o tu equipo todavía hace pruebas manuales? ¡Déjamelo saber en los comentarios!

---
*Mantente conectado a [Code With Botina](https://blog.codewithbotina.com/) para más artículos sobre arquitectura de software y prácticas de Clean Code.*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[El dilema de la formación "High-Performance": ¿Educación o explotación en la era de la IA?]]></title>
      <link>https://blog.codewithbotina.com/es/posts/el-dilema-de-la-formacion-high-performance-educacion-o-explotacion-en-la-era-de-la-ia</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/el-dilema-de-la-formacion-high-performance-educacion-o-explotacion-en-la-era-de-la-ia</guid>
      <pubDate>Sat, 07 Mar 2026 18:54:38 GMT</pubDate>
      <description><![CDATA[El dilema de la formación "High-Performance": ¿Educación o explotación en la era de la IA? Bienvenidos de nuevo a Code With Botina. Hoy nos alejamos un poco de los tutoriales técnicos para hablar de u...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/la-trampa-de-la-universidad-bootcamp-por-que-instituciones-como-jala-necesitan-un-golpe-de-realidad-sobre-la-ia-y-el-burnout-1772909674469.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[## El dilema de la formación "High-Performance": ¿Educación o explotación en la era de la IA?

Bienvenidos de nuevo a [Code With Botina](https://blog.codewithbotina.com/). Hoy nos alejamos un poco de los tutoriales técnicos para hablar de una realidad que muchos estudiantes de ingeniería de software estamos viviendo: el límite entre el **alto rendimiento** y el **burnout académico**.

### El espejismo del "Rigor Extremo"

Existe una tendencia creciente en las instituciones tecnológicas de adoptar una mentalidad de *bootcamp* constante. La promesa es atractiva: "Te preparamos para el mundo real con una intensidad sin precedentes". Sin embargo, en la práctica, a veces confundimos la **exigencia académica** con la **saturación operativa**.

Cuando el volumen de tareas mecánicas y repetitivas (como escribir miles de líneas de *boilerplate* a mano) supera el tiempo físico disponible para el análisis de arquitectura o la lógica profunda, dejamos de formar ingenieros y empezamos a entrenar operarios de código. Un ingeniero no se define por cuántas horas puede pasar sin dormir, sino por la calidad y escalabilidad de sus soluciones.

### La brecha de la Inteligencia Artificial

Estamos en un punto de inflexión. Muchas instituciones mantienen políticas restrictivas hacia la IA, bajo el argumento de proteger el aprendizaje auténtico. Es una intención noble, pero que choca con dos realidades inevitables:

1. **La carga de trabajo:** No se puede exigir un rendimiento de nivel industrial prohibiendo las herramientas que la industria usa para alcanzar esa velocidad. Es como pedirle a un arquitecto que diseñe un rascacielos en una semana, pero prohibiéndole usar software de CAD.
2. **La realidad del mercado:** En el mundo profesional, la eficiencia es clave. La IA no reemplaza al ingeniero, pero potencia al que sabe usarla con criterio. La verdadera educación moderna debería centrarse en cómo auditar, refactorizar y validar el código generado por IA, no en pretender que no existe.

### Calidad vs. Cantidad

El "Clean Code", los principios SOLID y los patrones de diseño son los primeros que mueren cuando un estudiante está en modo supervivencia para entregar un proyecto antes de las 11:59 PM. Si solo escribimos código para "que funcione" y pasar el módulo, estamos sacrificando la excelencia técnica por el simple cumplimiento de métricas de volumen.

**¿Qué tipo de profesionales queremos ser?** Aquellos que entienden el "porqué" de cada decisión técnica, o aquellos que simplemente sobreviven a una semana de *crunch culture*.

---

### Un mensaje para mi comunidad (y una reflexión final)

A mis compañeros que hoy se sienten agotados: sus inquietudes son válidas. Sin embargo, también he aprendido que en nuestra carrera, la **prudencia** es una herramienta tan importante como el código.

Ser profesional implica saber cuándo y cómo levantar la voz. No se trata de atacar a las instituciones que nos forman —a las cuales agradecemos las oportunidades y el espacio— sino de fomentar un diálogo constructivo que nos permita mejorar a todos. **Quedarse callado no es una opción cuando algo no funciona, pero hablar con respeto y estrategia es lo que realmente genera cambios.**

Aprendamos a ser prudentes para proteger nuestro camino, pero nunca dejemos de ser críticos para mejorar nuestra industria.]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Tu teléfono es más poderoso de lo que crees: Descubre Termux y lleva un entorno Linux en tu bolsillo]]></title>
      <link>https://blog.codewithbotina.com/es/posts/tu-telefono-es-mas-poderoso-de-lo-que-crees-descubre-termux-y-lleva-un-entorno-linux-en-tu-bolsillo</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/tu-telefono-es-mas-poderoso-de-lo-que-crees-descubre-termux-y-lleva-un-entorno-linux-en-tu-bolsillo</guid>
      <pubDate>Thu, 05 Mar 2026 12:55:39 GMT</pubDate>
      <description><![CDATA[Tu teléfono es más poderoso de lo que crees: Descubre Termux y lleva un entorno Linux en tu bolsillo Hoy en día, nuestros teléfonos inteligentes tienen procesadores (ARM) con más núcleos y memoria RAM...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/tu-telefono-es-mas-poderoso-de-lo-que-crees-descubre-termux-y-lleva-un-entorno-linux-en-tu-bolsillo-1772715337780.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# Tu teléfono es más poderoso de lo que crees: Descubre Termux y lleva un entorno Linux en tu bolsillo

Hoy en día, nuestros teléfonos inteligentes tienen procesadores (ARM) con más núcleos y memoria RAM que muchas de las computadoras que usábamos hace una década. Sin embargo, la mayoría de nosotros los usamos solo para redes sociales, WhatsApp y consumir contenido. 

¿Qué pasaría si te dijera que puedes convertir ese dispositivo que llevas en el bolsillo en una auténtica estación de trabajo para desarrolladores y administradores de sistemas? En [Code With Botina](https://blog.codewithbotina.com/) hoy vamos a hablar de **Termux**, la herramienta que desatará el verdadero potencial de tu Android.

---

## ¿Qué es Termux?

Termux es un **emulador de terminal para Android** que incluye un entorno de Linux muy completo. Pero ojo, no es solo una pantalla negra para ejecutar comandos básicos de Android. 

Termux instala un sistema base mínimo de Linux automáticamente y te permite instalar paquetes adicionales utilizando el famoso gestor de paquetes `APT` (el mismo que usa Ubuntu o Debian). 



Lo mejor de todo y la pregunta que seguro te estás haciendo: **¿Necesito rootear mi teléfono? ¡NO!** Termux funciona de manera nativa y segura en el espacio de usuario de tu teléfono sin necesidad de configuraciones complejas ni permisos de superusuario (root).

---

## ¿Para qué sirve? (Casos de uso reales)

Tener una terminal de Linux en tu teléfono abre un abanico de posibilidades increíbles. Aquí tienes algunas cosas que puedes hacer desde cualquier lugar, solo con tu móvil:

### 1. Conectarte a tus servidores por SSH
¿El servidor de producción se cayó mientras estabas en el transporte público o lejos de tu laptop? No hay problema. Con Termux puedes instalar OpenSSH (`pkg install openssh`), generar tus llaves públicas y conectarte a tu servidor remoto para reiniciar servicios o revisar logs de emergencia.

### 2. Entorno de desarrollo portátil
Puedes instalar lenguajes de programación y probar scripts directamente en tu teléfono. Termux soporta oficialmente:
* **Python** (puedes instalar librerías con `pip`)
* **Node.js** (viene con `npm` listo para usar)
* **C / C++** (usando compiladores como `clang`)
* **Ruby, Go, Rust**, entre otros.

### 3. Control de versiones con Git
Si necesitas revisar el código de un compañero, hacer un commit rápido o clonar un repositorio para leerlo offline, puedes usar `git` tal cual lo harías en tu computadora.

### 4. Herramientas de red y Ethical Hacking
Muchos administradores de red e ingenieros de seguridad usan Termux porque soporta herramientas de auditoría de red de nivel profesional. Puedes correr `Nmap` para escanear puertos, usar `cURL` para probar el consumo de APIs, o incluso instalar `Metasploit`.

### 5. Edición de código en la terminal
Al no tener una interfaz gráfica (GUI) convencional, te obliga (de buena manera) a mejorar tus habilidades con editores de texto de terminal como **Vim** o **Nano**. 

---

## ⚠️ ¡CUIDADO! Cómo instalarlo correctamente (El error del novato)

Si vas a la Google Play Store y buscas Termux, lo vas a encontrar. **¡Pero NO lo descargues de ahí!** Por cambios en las políticas de Google Play sobre cómo las aplicaciones pueden descargar código ejecutable, la versión de la Play Store está **obsoleta y abandonada**. Si la instalas, te dará errores al intentar descargar paquetes.

**La forma correcta de instalar Termux hoy en día es:**
1. Descargando la tienda de aplicaciones de código abierto **F-Droid** y buscando Termux allí.
2. O descargando el archivo `.apk` directamente desde el repositorio oficial de Termux en **GitHub**.

---

## Conclusión

Termux no va a reemplazar tu laptop principal para escribir proyectos de miles de líneas de código (a menos que conectes un teclado físico y un monitor a tu teléfono, ¡lo cual también es posible!). Sin embargo, es una navaja suiza invaluable para cualquier desarrollador, estudiante de sistemas o entusiasta de la tecnología.

Tener el poder de la línea de comandos de Linux siempre contigo te saca de apuros y te permite seguir aprendiendo y experimentando estés donde estés.

¿Ya conocías Termux? ¿Qué es lo primero que vas a instalar o probar en tu nueva terminal de bolsillo? ¡Te leo en los comentarios!

---
¿Te gustó este artículo? Comparte este post con ese amigo desarrollador que siempre lleva su laptop a todas partes. Y recuerda pasarte por [Code With Botina](https://blog.codewithbotina.com/) para más herramientas, trucos y tutoriales de desarrollo.]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[El lenguaje de programación más importante no es Python ni JavaScript: Es el Inglés (Mi experiencia y cómo aprenderlo gratis)]]></title>
      <link>https://blog.codewithbotina.com/es/posts/el-lenguaje-de-programacion-mas-importante-no-es-python-ni-javascript-es-el-ingles-mi-experiencia-y-como-aprenderlo-gratis</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/el-lenguaje-de-programacion-mas-importante-no-es-python-ni-javascript-es-el-ingles-mi-experiencia-y-como-aprenderlo-gratis</guid>
      <pubDate>Wed, 04 Mar 2026 17:57:23 GMT</pubDate>
      <description><![CDATA[El lenguaje de programación más importante no es Python ni JavaScript: Es el Inglés (Mi experiencia y cómo aprenderlo gratis) Aquí en Code With Botina solemos hablar de arquitecturas, metodologías ági...]]></description>
      <enclosure url="https://d2a5isokysfowx.cloudfront.net/wp-content/uploads/2021/10/%C2%BFQue-tan-importante-es-el-ingles-para-programacion.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# El lenguaje de programación más importante no es Python ni JavaScript: Es el Inglés (Mi experiencia y cómo aprenderlo gratis)

Aquí en [Code With Botina](https://blog.codewithbotina.com/) solemos hablar de arquitecturas, metodologías ágiles y código limpio. Pero hoy quiero ser completamente honesto con ustedes y hablar de un "lenguaje" que me ha costado sangre, sudor y lágrimas: **el Inglés**.

A mí, personalmente, se me dificulta muchísimo. Mientras que puedo pasar horas resolviendo un bug complejo o entendiendo cómo funciona un servidor, sentarme a leer o hablar en inglés siempre ha sido mi talón de Aquiles. Sin embargo, he tenido que chocar con una realidad innegable: **si quiero llegar al siguiente nivel en mi carrera como desarrollador, tengo que fortalecer mi inglés desde ya.**

Hoy quiero compartir con ustedes por qué este idioma es no negociable en el mundo del desarrollo y cuáles son las mejores herramientas gratuitas para que, al igual que yo, empiecen a dominarlo hoy mismo.

---

## ¿Por qué el Inglés es el verdadero "Core" del Desarrollo?

Es tentador pensar que con saber lógica de programación y un par de frameworks es suficiente, pero la realidad de la industria es otra:

* **La sintaxis es inglés:** Desde `if`, `while`, `function`, hasta los nombres de los métodos. Escribir código es, esencialmente, dar instrucciones en inglés.
* **La documentación oficial no espera:** Cuando sale una nueva versión de React, un nuevo framework de Node.js o una actualización de AWS, la documentación está 100% en inglés. Las traducciones al español pueden tardar meses, o a veces nunca llegan y suelen estar desactualizadas.
* **Stack Overflow y la comunidad global:** Si tienes un error rarísimo en la consola y lo buscas en español, quizás encuentres 2 respuestas. Si lo buscas en inglés, encontrarás 50 hilos resolviendo tu problema exacto. La comunidad global de tech se comunica en este idioma.
* **Ofertas de trabajo y salarios:** Esta es la cruda verdad. Un desarrollador Junior/Mid que sabe inglés puede aspirar a trabajos remotos en EE. UU. o Europa, multiplicando su salario en comparación con el mercado local. El inglés rompe la barrera geográfica.

---

## Mis opciones gratuitas favoritas para aprender Inglés

Sé que pagar academias costosas no siempre es una opción. Por suerte, en internet hay recursos increíbles y gratuitos. Estas son las herramientas con las que he empezado a forzarme a practicar todos los días:

### 1. Consumo pasivo en YouTube (El mejor maestro)
No busques solo canales de "clases de inglés". Busca canales de programación en inglés. 
* **El truco:** Mira tutoriales de temas que *ya dominas*. Como ya sabes de qué están hablando técnicamente, tu cerebro asociará el vocabulario en inglés mucho más rápido. Empieza con subtítulos en español, luego pásalos a inglés y finalmente quítalos.

### 2. Duolingo y Memrise (Para la constancia)
Sí, el búho verde puede ser intenso, pero la gamificación funciona. Estas apps no te harán bilingüe por sí solas, pero son excelentes para crear el **hábito diario** y mejorar tu vocabulario básico mientras vas en el transporte o tienes 10 minutos libres.

### 3. BBC Learning English / VOA Learning English
Son plataformas oficiales y 100% gratuitas creadas por medios de comunicación. Tienen secciones dedicadas a vocabulario de trabajo, tecnología y noticias habladas a una velocidad más lenta para estudiantes. 

### 4. Discord y Comunidades Open Source
Únete a servidores de Discord de tus tecnologías favoritas (como el de Next.js, Python o FreeCodeCamp). 
* **El reto:** Oblígate a leer los chats en inglés y a hacer al menos una pregunta a la semana en los canales de ayuda. Escribir te da tiempo para pensar y usar traductores como DeepL o Grammarly para corregir tus errores antes de enviar.

### 5. Configura tu entorno (Inmersión total)
Este es el paso que más me ha ayudado. Cambia el idioma de tu celular, de tu sistema operativo, de tu IDE (VS Code) y de tu navegador a inglés. Al principio es frustrante, pero tu cerebro se adaptará por supervivencia.

---

## Conclusión: Un bug a la vez

Aprender inglés cuando se te dificulta es exactamente igual que enfrentarse a un proyecto legacy gigante: asusta, no sabes por dónde empezar y da dolores de cabeza. Pero, al igual que en la programación, la clave está en dividir el problema en partes pequeñas y ser constante.

Si yo estoy tomando la decisión de enfrentar este reto ahora para no limitar mi futuro, te invito a que lo hagas conmigo. No necesitamos acentos perfectos, solo necesitamos comunicarnos.

¿Cuál es tu mayor obstáculo con el inglés? ¿Conoces alguna otra herramienta gratuita que me puedas recomendar? ¡Dejen sus comentarios y apoyémonos entre todos!

---
*Si te sientes identificado con este post, no olvides compartirlo y seguir de cerca [Code With Botina](https://blog.codewithbotina.com/). ¡Prometo seguir trayéndoles contenido real y útil para nuestras carreras!*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Arquitectura Cliente-Servidor: El motor invisible que usas todos los días sin saberlo]]></title>
      <link>https://blog.codewithbotina.com/es/posts/arquitectura-cliente-servidor-el-motor-invisible-que-usas-todos-los-dias-sin-saberlo</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/arquitectura-cliente-servidor-el-motor-invisible-que-usas-todos-los-dias-sin-saberlo</guid>
      <pubDate>Wed, 04 Mar 2026 01:45:25 GMT</pubDate>
      <description><![CDATA[Arquitectura Cliente-Servidor: El motor invisible que usas todos los días sin saberlo Piensa en lo primero que hiciste esta mañana. ¿Revisaste WhatsApp? ¿Viste un video en YouTube? ¿Leíste tus correos...]]></description>
      <enclosure url="https://i.ytimg.com/vi/4IAgB-6oAT0/maxresdefault.jpg" type="image/jpeg"/>
      <content:encoded><![CDATA[# Arquitectura Cliente-Servidor: El motor invisible que usas todos los días sin saberlo

Piensa en lo primero que hiciste esta mañana. ¿Revisaste WhatsApp? ¿Viste un video en YouTube? ¿Leíste tus correos? Detrás de cada uno de esos simples toques en tu pantalla, se desata una coreografía tecnológica fascinante. 

En [Code With Botina](https://blog.codewithbotina.com/), hoy vamos a levantar el capó de Internet para entender su motor principal: **La Arquitectura Cliente-Servidor**. Vamos a ver qué es, cómo se comunican sus partes y por qué es la base de casi todo lo que hacemos en el mundo digital.

---

## ¿Qué es la Arquitectura Cliente-Servidor?

En términos muy sencillos, es un modelo de diseño de software donde las tareas se reparten entre los proveedores de recursos (los **Servidores**) y los demandantes de esos recursos (los **Clientes**).



Piénsalo como ir a un restaurante:
1. **El Cliente (Tú):** Eres quien mira el menú y hace un pedido. En la tecnología, el cliente es tu navegador web (Chrome, Firefox), tu aplicación de Spotify o la app de tu banco en el celular. Su trabajo principal es mostrarte una interfaz bonita y enviar tus peticiones.
2. **El Servidor (La Cocina):** Es quien recibe tu pedido, busca los ingredientes, prepara el plato y te lo entrega. En tecnología, un servidor es una computadora potente (o un conjunto de ellas en la nube) que almacena bases de datos, procesa lógica pesada y devuelve la información que el cliente solicitó.

**Ejemplo del día a día:** Cuando buscas una serie en Netflix, tu Smart TV (el cliente) no tiene la película guardada. Le envía una petición a los servidores de Netflix pidiendo el video. El servidor lo busca en sus inmensos discos duros y te lo envía en pequeños pedazos para que lo reproduzcas.

---

## ¿Cómo se comunican? Los Protocolos de Red

Para que el cliente y el servidor se entiendan, necesitan hablar el mismo idioma. En redes, a estos idiomas los llamamos **Protocolos**. Aquí están los más importantes que hacen posible esta magia:

* **HTTP / HTTPS (Hypertext Transfer Protocol Secure):** Es el rey de la web. Funciona con un modelo de *Petición-Respuesta* (Request-Response). Tu navegador pide "Dame la página principal del blog" (GET) y el servidor responde con el código HTML de la página. La "S" final significa que la comunicación viaja encriptada y segura.
* **TCP/IP (Transmission Control Protocol / Internet Protocol):** Es el sistema de paquetería de internet. IP se encarga de las direcciones (saber dónde está el cliente y dónde el servidor), y TCP se asegura de que los datos se dividan en paquetes, viajen por la red y lleguen completos y en orden.
* **WebSockets:** Mientras que HTTP es como enviar una carta y esperar respuesta, los WebSockets son como una llamada telefónica. Mantienen una conexión abierta y constante entre cliente y servidor. ¡Es lo que hace posible que los mensajes de WhatsApp lleguen en tiempo real o que juegues videojuegos online sin lag!

---

## ¿Por dónde viaja la información? Tipos de Redes

Esta arquitectura no funcionaría sin las autopistas por las que viajan los datos. Dependiendo de la distancia entre el cliente y el servidor, usamos diferentes tipos de redes:

### 1. LAN (Local Area Network - Red de Área Local)
Es una red pequeña, limitada a un edificio o una casa. 
* **El ejemplo:** Cuando envías a imprimir un documento desde tu laptop a la impresora Wi-Fi de tu cuarto. Tu laptop es el cliente, la impresora actúa como servidor de impresión, y todo ocurre dentro de la LAN de tu casa.

### 2. WAN (Wide Area Network - Red de Área Amplia)
Son redes que cubren grandes distancias geográficas (ciudades, países o continentes). **Internet es la WAN más grande del mundo**.
* **El ejemplo:** Cuando entras a un sitio web, tu cliente en Latinoamérica está solicitando información a través de la WAN global (cables submarinos de fibra óptica incluidos) a un servidor de Amazon Web Services que físicamente está en Virginia, Estados Unidos.

### 3. Redes Celulares (4G / 5G)
Cuando vas por la calle usando datos móviles, tu smartphone (cliente) se conecta a la antena más cercana de tu operadora. Esta antena te enruta hacia el internet global para alcanzar el servidor de la app que estés usando.

---

## Conclusión

La próxima vez que envíes un mensaje, subas una foto o cargues una página, recuerda el increíble viaje que hacen tus datos. Un **cliente** empaquetó tu petición, la envió a través de una inmensa red **WAN** usando protocolos como **HTTPS** y **TCP**, para que un **servidor** a miles de kilómetros la procesara y te devolviera una respuesta en milisegundos. 

Entender este flujo es el primer gran paso para convertirte en un desarrollador o arquitecto de software de alto nivel.

¿Qué parte de esta arquitectura te parece más interesante? ¿Te gustaría aprender a crear tu propio servidor básico? ¡Te leo en los comentarios!

---
*No olvides suscribirte al newsletter de [Code With Botina](https://blog.codewithbotina.com/) para seguir desentrañando los secretos de la programación y la arquitectura de sistemas juntos.*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Desmitificando los Archivos ISO y Sistemas Bootables: ¿Cómo cabe todo un SO en un USB?]]></title>
      <link>https://blog.codewithbotina.com/es/posts/desmitificando-los-archivos-iso-y-sistemas-bootables-como-cabe-todo-un-so-en-un-usb</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/desmitificando-los-archivos-iso-y-sistemas-bootables-como-cabe-todo-un-so-en-un-usb</guid>
      <pubDate>Tue, 03 Mar 2026 19:17:01 GMT</pubDate>
      <description><![CDATA[Desmitificando los Archivos ISO y Sistemas Bootables: ¿Cómo cabe todo un SO en un USB? Todos los que estamos en el mundo de la tecnología hemos pasado por ahí: necesitamos instalar Windows, probar una...]]></description>
      <enclosure url="https://mgainformatik.com/image-blog/pc-booteable.jpg" type="image/jpeg"/>
      <content:encoded><![CDATA[# Desmitificando los Archivos ISO y Sistemas Bootables: ¿Cómo cabe todo un SO en un USB?

Todos los que estamos en el mundo de la tecnología hemos pasado por ahí: necesitamos instalar Windows, probar una distribución de Linux o rescatar un equipo dañado. Vamos a una página, descargamos un archivo con extensión `.iso`, usamos un programa como Rufus o BalenaEtcher, y de repente nuestro USB tiene el poder de encender una computadora vacía. 

Pero, ¿qué magia negra ocurre detrás de esto? En este artículo de [Code With Botina](https://blog.codewithbotina.com/), vamos a destripar qué son los archivos ISO, qué hace que algo sea "booteable" y cómo es posible que sistemas operativos enteros pesen menos de 5 gigabytes.

---

## ¿Qué es exactamente un archivo ISO?

Un archivo ISO (también conocido como imagen ISO) es, en términos sencillos, una **copia digital exacta (clon) de un disco óptico** (CD, DVD o Blu-ray). Su nombre proviene del sistema de archivos estándar que utilizan los CD-ROM: el **ISO 9660**.

A diferencia de un archivo `.zip` o `.rar` que simplemente comprime archivos, un archivo ISO copia los datos **sector por sector**. Esto significa que no solo guarda los archivos, sino también la estructura del sistema de archivos, los metadatos y, lo más importante, las instrucciones de arranque originales del disco.

---

## ¿Qué son los archivos "Booteables" (de arranque)?

Que un dispositivo o archivo sea "booteable" significa que contiene la información necesaria para que la placa base de una computadora (a través de la BIOS o UEFI) pueda **cargar un sistema operativo antes de que exista cualquier otro software ejecutándose**.

Cuando enciendes tu PC, el hardware no sabe qué es Windows o Linux. Solo sabe buscar en los dispositivos de almacenamiento un pequeño programa llamado **Bootloader** (Gestor de arranque).



Para que un archivo ISO o un USB sea booteable, necesita contener:
1. **Un sector de arranque o partición EFI:** Un archivo específico (como `bootx64.efi` en sistemas UEFI modernos) que el hardware reconoce automáticamente.
2. **El Bootloader:** Programas como **GRUB** (en Linux) o **Windows Boot Manager** que toman el control del hardware.
3. **El Kernel y el Initramfs:** El núcleo del sistema operativo y un sistema de archivos temporal mínimo en la memoria RAM que prepara el terreno para cargar el resto del sistema.

---

## ¿Cómo puede un Sistema Operativo compilarse a menos de 5 GB?

Si instalas Windows en tu disco duro, puede ocupar fácilmente entre 20 GB y 30 GB. Entonces, ¿cómo es que su archivo ISO de instalación pesa menos de 5 GB? ¿O cómo existen distribuciones de Linux (como Alpine Linux) que pesan apenas 150 MB?

La respuesta se divide en tres claves de la ingeniería de software:

### 1. Sistemas de archivos ultra-comprimidos
En los ISOs no viajan los archivos "sueltos". Se utilizan contenedores altamente comprimidos de solo lectura.
* **En Windows:** Se utilizan archivos `.WIM` (Windows Imaging Format) o `.ESD` (Electronic Software Download). Estos formatos usan algoritmos de compresión altísimos (como LZMS) y eliminan archivos duplicados mediante *Single Instance Storage* (si un archivo dll está 5 veces, solo se guarda una vez y se crean enlaces).
* **En Linux:** Se utiliza frecuentemente **SquashFS**, un sistema de archivos comprimido de solo lectura que permite mantener gigabytes de información reducidos a una fracción de su tamaño, descomprimiéndose al vuelo en la RAM cuando usas un "Live USB".

### 2. Eliminación de redundancias y archivos generados
Un sistema operativo instalado crece porque genera cachés, archivos de paginación (memoria virtual), puntos de restauración, registros (logs) y archivos temporales de usuario. Una imagen ISO está completamente limpia de todo este "ruido".

### 3. Modularidad y Minimalismo
Sistemas como Linux son modulares. El núcleo (*Kernel*) en sí mismo pesa apenas unas decenas de megabytes. Si omites una interfaz gráfica pesada (GUI) y software preinstalado (bloatware), obtienes sistemas operativos funcionales en menos de 100 MB, ideales para servidores, contenedores Docker o routers.

---

## Tipos de formatos y archivos Bootables

Aunque el ISO es el rey, existen otros formatos relacionados con el arranque de sistemas operativos que todo buen ingeniero debe conocer:

* **ISO (.iso):** El estándar de la industria. Ideal para máquinas virtuales o para quemar en USB/DVD.
* **IMG (.img):** Imágenes crudas (Raw). Copian byte a byte un disco entero, incluyendo tablas de particiones. Son muy comunes en el mundo de Raspberry Pi o sistemas embebidos.
* **WIM / ESD (.wim, .esd):** Propios de Microsoft. No son imágenes de disco completas, sino contenedores basados en archivos que guardan el sistema operativo comprimido. Están *dentro* del ISO de Windows (en la carpeta `sources`).
* **Archivos EFI (.efi):** Son ejecutables que entiende la interfaz UEFI de las placas base modernas. Son la evolución de los antiguos sectores de arranque (MBR) y son los que realmente inician la cadena de arranque.
* **VHD / VHDX:** Discos duros virtuales de Microsoft. Curiosamente, Windows soporta "Boot from VHD", permitiéndote arrancar físicamente tu PC desde un archivo de disco duro virtual.

---

## Conclusión

La próxima vez que uses Rufus o el comando `dd` en la terminal para crear un USB booteable, ya sabrás que no solo estás copiando archivos: estás transfiriendo sectores de arranque, desplegando sistemas de archivos comprimidos de alta eficiencia y preparando un ecosistema para que el hardware cobre vida.

¿Alguna vez has tenido que rescatar tu equipo creando un USB booteable de emergencia? ¡Cuéntanos tu experiencia en los comentarios!

---
*No olvides compartir este artículo si te resultó útil y mantenerte conectado con [Code With Botina](https://blog.codewithbotina.com/) para más inmersiones profundas en el mundo del desarrollo y la arquitectura de sistemas.*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Domina las Metodologías Ágiles: Scrum, Kanban y más para potenciar tu desarrollo]]></title>
      <link>https://blog.codewithbotina.com/es/posts/domina-las-metodologias-agiles-scrum-kanban-y-mas-para-potenciar-tu-desarrollo</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/domina-las-metodologias-agiles-scrum-kanban-y-mas-para-potenciar-tu-desarrollo</guid>
      <pubDate>Mon, 02 Mar 2026 20:01:15 GMT</pubDate>
      <description><![CDATA[Domina las Metodologías Ágiles: Scrum, Kanban y más para potenciar tu desarrollo Si llevas un tiempo en el mundo del desarrollo de software, seguramente has escuchado la palabra "Ágil" (o Agile) en má...]]></description>
      <enclosure url="https://impulso06.com/wp-content/uploads/2023/10/Kanban-y-la-Gestion-del-Tiempo-Como-Hacer-Mas-con-Menos-Estres-2048x1366.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# Domina las Metodologías Ágiles: Scrum, Kanban y más para potenciar tu desarrollo

Si llevas un tiempo en el mundo del desarrollo de software, seguramente has escuchado la palabra "Ágil" (o *Agile*) en más de una reunión. Pero, ¿realmente sabemos qué significa y cómo aplicarlo? En [Code With Botina](https://blog.codewithbotina.com/) sabemos que escribir buen código es solo una parte de la ecuación; la otra es cómo gestionamos el proyecto para entregar valor real de forma constante.

Hoy vamos a desmitificar las **metodologías ágiles** y a repasar lo más importante de las más populares: **Scrum, Kanban y XP**.

---

## ¿Qué es exactamente el Desarrollo Ágil?

Más que una metodología estricta, *Agile* es una **filosofía** basada en el [Manifiesto Ágil](https://agilemanifesto.org/) (creado en 2001). Sus cuatro valores fundamentales priorizan:
1. **Individuos e interacciones** sobre procesos y herramientas.
2. **Software funcionando** sobre documentación exhaustiva.
3. **Colaboración con el cliente** sobre negociación contractual.
4. **Respuesta ante el cambio** sobre seguir un plan estricto.

En resumen: adaptarse rápido, entregar software funcional frecuentemente y trabajar en equipo. Ahora, veamos los marcos de trabajo (*frameworks*) que implementan esta filosofía.

---

## 1. Scrum: El rey de los Sprints

Scrum es el *framework* ágil más utilizado en el mundo del software. Es ideal para proyectos complejos donde los requisitos cambian constantemente. Se basa en dividir el trabajo en ciclos cortos y predecibles llamados **Sprints** (que suelen durar de 1 a 4 semanas).

### Lo más importante que debes saber de Scrum:
* **Roles:**
    * **Product Owner (PO):** La voz del cliente. Define qué hay que hacer y prioriza el *Product Backlog* (la lista de tareas del proyecto).
    * **Scrum Master:** El facilitador. Ayuda al equipo a entender Scrum y elimina los obstáculos que impiden el progreso.
    * **Developers (Equipo de desarrollo):** Los creadores. Son auto-organizados y deciden *cómo* construir el producto.
* **Artefactos:** *Product Backlog* (todo lo que necesita el producto), *Sprint Backlog* (lo que se hará en este Sprint) y el *Incremento* (el software funcionando al final del Sprint).
* **Eventos (Ceremonias):** Sprint Planning, Daily Scrum (reunión diaria de 15 min), Sprint Review (demo al cliente) y Sprint Retrospective (¿qué podemos mejorar como equipo?).

**¿Cuándo usarlo?** Cuando tienes un equipo multidisciplinar y necesitas entregas estructuradas y retroalimentación constante.

---

## 2. Kanban: Flujo continuo y visual

Mientras que Scrum se basa en "cajas de tiempo" (Sprints), Kanban se basa en un **flujo de trabajo continuo**. Su objetivo principal es hacer visible el trabajo, limitar la cantidad de tareas en curso y maximizar la eficiencia.

### Lo más importante que debes saber de Kanban:
* **El Tablero Kanban:** Es el corazón visual del sistema. Las columnas clásicas son *To Do*, *Doing* y *Done* (Por hacer, En progreso, Terminado), aunque se adaptan a tu proceso real (ej. *Code Review*, *Testing*).
* **Límites WIP (Work In Progress):** Es la regla de oro. Limita el número de tareas que pueden estar en una columna al mismo tiempo. Si el límite en "Code Review" es 3, nadie puede pasar una nueva tarea a esa columna hasta que se libere espacio. ¡Esto evita cuellos de botella!
* **Mejora continua:** Al no tener Sprints, el equipo evalúa métricas como el *Lead Time* (cuánto tarda una tarea desde que se pide hasta que se entrega) para optimizar el flujo.

**¿Cuándo usarlo?** Es perfecto para equipos de soporte, mantenimiento, DevOps o proyectos donde las prioridades cambian diariamente y no se pueden esperar semanas para planificar.

---

## 3. Extreme Programming (XP): Llevando el código al límite

Si Scrum se enfoca en la gestión, **Extreme Programming (XP)** se enfoca puramente en la **ingeniería de software**. Su objetivo es mejorar la calidad del código y la calidad de vida del desarrollador.

### Prácticas clave de XP:
* **Programación por pares (Pair Programming):** Dos desarrolladores, un teclado. Uno escribe el código y el otro revisa la estrategia en tiempo real.
* **TDD (Test-Driven Development):** Escribir las pruebas automatizadas *antes* de escribir el código de producción.
* **Integración Continua (CI):** Integrar los cambios de código varias veces al día para detectar errores de inmediato.
* **Refactorización constante:** Mejorar el diseño del código sin cambiar su comportamiento.

**¿Cuándo usarlo?** Muchos equipos hoy en día utilizan un híbrido: usan **Scrum** para gestionar las tareas y el producto, y **XP** para las prácticas de escritura de código.

---

## Conclusión: ¿Cuál deberías elegir?

No existe una "bala de plata" en el desarrollo de software:
* Elige **Scrum** si necesitas estructura, ciclos de planificación claros y alineación constante con el cliente.
* Elige **Kanban** si buscas flexibilidad total, reducción de cuellos de botella y flujo continuo sin interrumpir a los desarrolladores con reuniones de planificación largas.
* Aplica **XP** siempre que quieras llevar la calidad técnica de tu código al siguiente nivel.

Lo mejor de todo es que no son excluyentes. Muchos equipos utilizan **Scrumban** (una mezcla de las ceremonias de Scrum con el flujo visual y los límites WIP de Kanban). 

¿Y tú, qué metodología estás usando actualmente en tus proyectos? ¡Déjalo en los comentarios y sigamos la conversación!

---
*Si te gustó este artículo, no olvides suscribirte al newsletter de [Code With Botina](https://blog.codewithbotina.com/) para más contenido sobre desarrollo, arquitectura y buenas prácticas.*]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Astro: El framework que devolvió la cordura al desarrollo web]]></title>
      <link>https://blog.codewithbotina.com/es/posts/astro-el-framework-que-devolvio-la-cordura-al-desarrollo-web</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/astro-el-framework-que-devolvio-la-cordura-al-desarrollo-web</guid>
      <pubDate>Sat, 28 Feb 2026 02:16:44 GMT</pubDate>
      <description><![CDATA[Durante años, la tendencia en el desarrollo web fue enviar kilobytes (o incluso megabytes) de JavaScript al navegador del usuario para renderizar una página. Frameworks como React, Vue o Angular nos d...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/astro-el-framework-que-devolvio-la-cordura-al-desarrollo-web-1772245002416.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[Durante años, la tendencia en el desarrollo web fue enviar kilobytes (o incluso megabytes) de JavaScript al navegador del usuario para renderizar una página. Frameworks como React, Vue o Angular nos dieron un poder increíble, pero a menudo a costa del rendimiento y la velocidad de carga.

Entonces llegó **Astro**, y decidió cambiar las reglas del juego por completo.

Astro es un framework web todo en uno diseñado para construir sitios web extremadamente rápidos. En lugar de sumarse a la moda de las *Single Page Applications* (SPA) pesadas, Astro volvió a las raíces de la web, pero con una experiencia de desarrollo súper moderna. ¿Por qué es una tecnología tan increíble? Aquí te dejo las claves.

## 1. Cero JavaScript por defecto

Esta es la característica estrella de Astro. Por defecto, Astro compila todo tu código en el servidor y envía **HTML estático, puro y ligero** al navegador. Cero JavaScript. Nada.

Esto significa que tus páginas cargan de manera casi instantánea, obteniendo puntuaciones perfectas en herramientas como Lighthouse o PageSpeed Insights. Es una mejora de rendimiento brutal que impacta directamente en el SEO y en la experiencia del usuario.

## 2. Arquitectura de Islas (Astro Islands)

"Pero, ¿qué pasa si necesito interactividad en mi web?" Aquí es donde Astro demuestra su genialidad.

Astro utiliza un concepto llamado **Arquitectura de Islas**. Imagina que tu página web es un mar de HTML estático y rápido. Dentro de ese mar, puedes crear pequeñas "islas" interactivas (un carrusel de imágenes, un botón de modo oscuro, un formulario de contacto). Astro solo enviará JavaScript y "hidratará" esas pequeñas islas específicas, dejando el resto de la página intacta.

## 3. Usa el framework que ya amas (¡o todos a la vez!)

Astro es "agnóstico" en cuanto a frameworks de UI. ¿Te gusta escribir componentes en React? Puedes usarlos. ¿Prefieres Svelte, Vue, Solid o incluso Web Components puros? También puedes.

```astro
---
// Puedes importar componentes de diferentes frameworks en un mismo archivo
import ReactCounter from '../components/ReactCounter.jsx';
import SvelteCarousel from '../components/SvelteCarousel.svelte';
---


  
    Bienvenidos a mi sitio
    
    
    
  


```

Esta flexibilidad te permite aprovechar el ecosistema de cualquier herramienta sin atarte a una sola.

## 4. El rey del contenido y los portafolios

Para proyectos centrados en contenido, como un blog técnico o el rediseño de un portafolio personal que quieres que luzca profesional e impecable, Astro es insuperable.

Viene con soporte nativo para **Markdown y MDX**. Puedes gestionar todos tus proyectos, artículos o casos de estudio directamente en carpetas, con validación de datos (Content Collections) integrada. Te permite enfocarte en escribir y estructurar tu trabajo sin pelear con bases de datos complejas si no lo necesitas.

## Conclusión

Astro no intenta reemplazar a Next.js o Nuxt en aplicaciones web altamente dinámicas (como un clon de Spotify o un panel de administración complejo). Su objetivo es dominar el resto de la web: sitios corporativos, blogs, portafolios, páginas de aterrizaje (landing pages) y sitios de documentación.

Si estás cansado de configuraciones interminables y de enviar sitios lentos a producción, dale una oportunidad a Astro. Volverás a disfrutar de hacer webs rápidas y simples.]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Deno: La evolución de JavaScript y TypeScript que tu entorno de desarrollo necesita]]></title>
      <link>https://blog.codewithbotina.com/es/posts/deno-la-evolucion-de-javascript-y-typescript-que-tu-entorno-de-desarrollo-necesita</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/deno-la-evolucion-de-javascript-y-typescript-que-tu-entorno-de-desarrollo-necesita</guid>
      <pubDate>Sat, 28 Feb 2026 02:06:01 GMT</pubDate>
      <description><![CDATA[Deno: La evolución de JavaScript y TypeScript que tu entorno de desarrollo necesita Si trabajas con JavaScript o TypeScript, es muy probable que Node.js haya sido tu compañero de batallas durante años...]]></description>
      <enclosure url="https://upload.wikimedia.org/wikipedia/commons/8/84/Deno.svg" type="image/jpeg"/>
      <content:encoded><![CDATA[# Deno: La evolución de JavaScript y TypeScript que tu entorno de desarrollo necesita

Si trabajas con JavaScript o TypeScript, es muy probable que Node.js haya sido tu compañero de batallas durante años. Sin embargo, el ecosistema web evoluciona rápidamente. En 2018, Ryan Dahl (el mismísimo creador de Node.js) presentó **Deno**, un nuevo entorno de ejecución diseñado para corregir las deficiencias de diseño de su creación anterior y modernizar la forma en que construimos aplicaciones.

Hoy, Deno ha madurado enormemente y se ha convertido en una herramienta increíblemente robusta para los desarrolladores. ¿Por qué deberías considerar integrarlo en tus próximos proyectos? Aquí te cuento las razones principales.

## 1. Seguridad por defecto

Una de las mayores críticas a Node.js es que cualquier script tiene acceso total a tu sistema: red, sistema de archivos, variables de entorno, etc. Deno cambia las reglas del juego al ejecutarse en un entorno seguro ("sandbox").

Por defecto, un script en Deno no puede acceder a tus archivos ni conectarse a internet. Tienes que concederle permisos explícitos al ejecutarlo desde la terminal mediante *flags*, por ejemplo: `deno run --allow-net --allow-read app.ts`. Esto te da una tranquilidad inmensa al ejecutar código de terceros.

## 2. TypeScript nativo, cero configuraciones

Olvídate de configurar complejos archivos `tsconfig.json`, instalar compiladores como `tsc` o configurar herramientas como Babel o Webpack. Deno entiende y ejecuta TypeScript de forma nativa desde el primer segundo.

Escribes tu código con tipado estático, lo ejecutas y Deno se encarga del resto. Esto acelera el flujo de trabajo de manera espectacular.

## 3. Todo lo que necesitas viene "de fábrica"

El ecosistema tradicional a menudo sufre de fatiga de configuración ("config hell"). Con Deno, no necesitas buscar e instalar dependencias de terceros para las tareas más comunes. Ya incluye herramientas integradas en su núcleo:

* **Linter:** `deno lint`
* **Formateador de código:** `deno fmt`
* **Ejecutor de pruebas (Testing):** `deno test`
* **Generador de documentación:** `deno doc`

Un solo ejecutable limpio y rápido para gobernar todo tu flujo de trabajo.

## 4. Adiós al agujero negro de `node_modules`

Deno simplifica la gestión de paquetes eliminando la necesidad de un archivo `package.json` y de la pesada carpeta `node_modules`.

En su lugar, Deno utiliza módulos ES estándar y permite importar módulos directamente desde URLs, exactamente igual que en el navegador:

```typescript
import { serve } from "https://deno.land/std@0.200.0/http/server.ts";

```

Deno descarga el módulo la primera vez que lo ejecutas, lo almacena en caché de forma global y no vuelve a descargarlo a menos que se lo pidas, ahorrando espacio valioso en tu disco duro.

## 5. APIs Web Estándar

Deno está diseñado para ser lo más compatible posible con el navegador. Esto significa que puedes usar las mismas APIs estándar que ya conoces en el frontend, como `fetch`, `WebSocket`, `URL`, `crypto`, o los `Workers`, sin necesidad de instalar librerías adicionales. El código que escribes para Deno es mucho más fácil de compartir con tu entorno cliente.

## Conclusión

Deno no es solo una alternativa a Node.js; es un replanteamiento de cómo debería ser el desarrollo moderno con JavaScript y TypeScript. Su enfoque en la seguridad, su soporte nativo para TypeScript y sus herramientas integradas lo convierten en una opción fantástica para construir desde pequeños scripts para la terminal hasta APIs escalables y complejas.

Si aún no lo has probado, abre tu terminal y dale una oportunidad. Es muy probable que no quieras mirar atrás.]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[¡Ahora puedes interactuar! Login, comentarios y reacciones en CodeWithBotina]]></title>
      <link>https://blog.codewithbotina.com/es/posts/nuevo-sistema-login-comentarios-reacciones</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/nuevo-sistema-login-comentarios-reacciones</guid>
      <pubDate>Fri, 27 Feb 2026 02:26:20 GMT</pubDate>
      <description><![CDATA[¡Gran actualización en el blog! 🚀 Hola comunidad 👋, Después de un tiempo trabajando en mejorar la experiencia, ¡por fin está aquí! Ahora nuestro blog pasa de ser solo lectura pasiva a un espacio don...]]></description>
      <enclosure url="https://images.unsplash.com/photo-1555066931-4365d14bab8c?w=800" type="image/jpeg"/>
      <content:encoded><![CDATA[# ¡Gran actualización en el blog! 🚀

Hola comunidad 👋,

Después de un tiempo trabajando en mejorar la experiencia, ¡por fin está aquí! Ahora nuestro blog pasa de ser solo lectura pasiva a un espacio donde realmente puedes participar:

## Lo nuevo que llegó
- **Sistema de login seguro** con Supabase Auth  
  Regístrate o inicia sesión con email, Google, GitHub o lo que prefieras. Todo gestionado de forma sencilla y segura.

- **Comentarios nativos** en cada post  
  Deja tu opinión, comparte tu experiencia, haz preguntas o simplemente di "me gustó". Los comentarios aparecen en tiempo real y están moderados para mantener el buen rollo.

- **Reacciones rápidas**  
  ¿Te encantó el post? ¿Te hizo pensar? ¿Te sacó una sonrisa? Dale 👍. Ayuda a destacar el contenido que más conecta con todos.

## ¿Por qué lo hicimos?
Porque CodeWithBotina no es solo un blog… es una comunidad. Queremos que aprendas, pero también que compartas lo que sabes, resuelvas dudas juntos y celebremos los logros de cada uno.

Tecnologías clave detrás de esto:
- **Supabase Auth** → autenticación sin complicaciones
- **Supabase Database** → almacenamiento de comentarios y reacciones
- **Astro + edge functions** (con Deno/Fresh) → todo rápido y sin recargas pesadas

## ¿Qué viene ahora?
- Notificaciones cuando alguien responda tus comentarios
- Perfil básico para cada usuario
- Posible integración con el newsletter para no perderte nada

¡Gracias por estar aquí desde el día 1! Ahora ve al blog, inicia sesión y déjame tu primer comentario o reacción en este post 😄

¿Qué te parece la actualización? ¿Qué feature te gustaría ver próxima?

Nos leemos en los comentarios 👇]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Guia Tecnica Completa: Construye un Servidor Web Seguro con Integracion a Active Directory en Ubuntu Server]]></title>
      <link>https://blog.codewithbotina.com/es/posts/guia-tecnica-completa-construye-un-servidor-web-seguro-con-integracion-a-active-directory-en-ubuntu-server</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/guia-tecnica-completa-construye-un-servidor-web-seguro-con-integracion-a-active-directory-en-ubuntu-server</guid>
      <pubDate>Tue, 24 Feb 2026 03:23:53 GMT</pubDate>
      <description><![CDATA[Introducción: ¡Construye Tu Propio Servidor Web con Autenticación Centralizada! ¡Hola, estudiante o desarrollador junior! Si estás estudiando sistemas operativos o quieres aprender a configurar un ser...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/guia-tecnica-completa-construye-un-servidor-web-seguro-con-integracion-a-active-directory-en-ubuntu-server.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[### Introducción: ¡Construye Tu Propio Servidor Web con Autenticación Centralizada!

¡Hola, estudiante o desarrollador junior! Si estás estudiando sistemas operativos o quieres aprender a configurar un servidor web profesional desde cero, esta guía es perfecta para ti. Imagina crear un entorno seguro donde usuarios de Active Directory (AD) puedan autenticarse en un sitio WordPress, todo corriendo en Ubuntu Server. Basado en la configuración de Ubuntu 22.04 LTS, te llevaré paso a paso a través de la instalación, integración con AD, hardening de seguridad y más. No necesitas experiencia avanzada; explicaré todo con comandos claros y hasta scripts en Python para automatizar tareas. Al final, tendrás un servidor funcional que puedes usar en proyectos escolares o laborales. ¡Empecemos y conviértete en un sysadmin experto!

Esta guía cubre desde la creación de una VM en VirtualBox hasta el monitoreo, aplicando conceptos como redes, seguridad y autenticación.

### Tecnologías y Requisitos: Lo que Necesitas Saber

- **Ubuntu Server 22.04 LTS**: Base del sistema.
- **Apache2, PHP, MariaDB**: Stack LAMP para el servidor web.
- **Active Directory**: Para gestión de usuarios vía LDAP/Kerberos.
- **Herramientas de Seguridad**: UFW, Fail2Ban, AppArmor.
- **Python**: Usaremos scripts para verificación y automatización (requiere Python 3, incluido en Ubuntu).

Requisitos: VirtualBox, ISO de Ubuntu Server 22.04 (descárgala de ubuntu.com), un servidor Windows con AD configurado (IP: 192.168.101.10, dominio: empresa.local).

### Parte 1: Instalación y Configuración Básica

Sigue los pasos para instalar Ubuntu en VM.

#### Código Python: Script para Verificar Configuración Inicial

Usa este script Python ejecutable para chequear la instalación post-boot.

```python
import subprocess
import socket

def check_network():
    """Verifica conexión de red y hostname."""
    try:
        hostname = socket.gethostname()
        print(f"Hostname: {hostname}")
        ip = subprocess.check_output(["ip", "a", "show", "enp0s3"]).decode()
        print(f"IP Info: {ip}")
        ping = subprocess.call(["ping", "-c", "1", "192.168.101.10"])
        if ping == 0:
            print("Ping a Windows DC: Éxito")
        else:
            print("Ping a Windows DC: Fallo")
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    check_network()
```

Explicación paso a paso:
- Importa `subprocess` para ejecutar comandos bash y `socket` para hostname.
- Función `check_network`: Obtiene hostname, info de IP y prueba ping.
- Ejecuta: `python check_network.py`. Útil para verificar red después de instalación.

### Parte 2: Configuración de Red y Unión a AD

Configura IP estática y une al dominio.

#### Código Python: Automatizador de Configuración Netplan

Script para generar y aplicar config Netplan.

```python
import yaml
import subprocess

def generate_netplan_config(interface="enp0s3", ip="192.168.101.20/24", gateway="192.168.101.1", dns=["192.168.101.10", "8.8.8.8"], domain="empresa.local"):
    config = {
        "network": {
            "version": 2,
            "renderer": "networkd",
            "ethernets": {
                interface: {
                    "dhcp4": False,
                    "dhcp6": False,
                    "addresses": [ip],
                    "routes": [{"to": "default", "via": gateway}],
                    "nameservers": {"addresses": dns, "search": [domain]},
                    "optional": True
                }
            }
        }
    }
    with open("/etc/netplan/00-installer-config.yaml", "w") as f:
        yaml.dump(config, f)
    print("Config Netplan generada.")
    subprocess.call(["sudo", "netplan", "apply"])
    print("Config aplicada.")

if __name__ == "__main__":
    generate_netplan_config()
```

Explicación:
- Usa `yaml` para generar archivo (instala si necesitas: `sudo apt install python3-yaml`).
- Escribe config y aplica con subprocess.
- Ejecuta como sudo: `sudo python generate_netplan.py`.

Incluye todos los pasos del guía original para unión a AD, firewall, etc.

### Funcionalidades: Gestión de Usuarios en AD

- Autenticación LDAP en WordPress.
- Sudo para grupos AD.
- Leaderboards... espera, no, enfocados en AD: Usuarios AD pueden loguear en SSH, web.

### Ejemplos Prácticos del Mundo Real

- **Educación**: Usa en clases de SO para demostrar integración cliente-servidor.
- **Empresa**: Implementa para intranets corporativas con autenticación centralizada.
- **Freelance**: Configura servidores para clientes con AD, agregando valor con hardening.
- **Personal**: Monta un blog seguro con login AD para familia/equipo.

### Parte 3: Instalación LAMP y WordPress

Sigue los comandos para Apache, MariaDB, PHP y WordPress con auth AD.

#### Código Python: Verificador de Servicios

```python
import subprocess

def check_services(services=["apache2", "mariadb", "sssd"]):
    """Verifica estado de servicios."""
    for service in services:
        status = subprocess.check_output(["systemctl", "is-active", service]).decode().strip()
        print(f"{service}: {status}")

if __name__ == "__main__":
    check_services()
```

Explicación: Usa subprocess para chequear si servicios están active. Ejecuta: `python check_services.py`.

Incluye hardening, monitoreo con Monit, backups.

### Conclusión: ¡Tu Servidor Está Listo para el Mundo Real!

¡Increíble trabajo! Has construido un servidor web completo con integración AD, seguridad robusta y automatización. Experimenta, modifica y aplica en proyectos reales. ¡Sigue aprendiendo y domina los sistemas operativos!

Autor: Diego Alejandro Botina (CodeWithBotina)

### Referencias
- Documentación Ubuntu: https://ubuntu.com/tutorials/install-ubuntu-server
- Apache Docs: https://httpd.apache.org/docs/
- Active Directory Integration: https://wiki.debian.org/LDAP
- WordPress: https://wordpress.org/support/
- Python YAML: https://pyyaml.org/wiki/PyYAMLDocumentation
- Flathub (para distribuciones similares): https://docs.flathub.org/]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Los Revisores de Flathub: Groseros e Inprofesionales? Mi Experiencia con el Proyecto Pac-Man Bloqueado y Cómo Superar Obstáculos en Publicaciones Open-Source]]></title>
      <link>https://blog.codewithbotina.com/es/posts/los-revisores-de-flathub-groseros-e-inprofesionales-mi-experiencia-con-el-proyecto-pac-man-bloqueado-y-como-superar-obstaculos-en-publicaciones-open-source</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/los-revisores-de-flathub-groseros-e-inprofesionales-mi-experiencia-con-el-proyecto-pac-man-bloqueado-y-como-superar-obstaculos-en-publicaciones-open-source</guid>
      <pubDate>Mon, 23 Feb 2026 01:06:34 GMT</pubDate>
      <description><![CDATA[Introducción: ¡No Dejes que los Obstáculos te Detengan en Tu Camino como Desarrollador! ¡Hola, aspirante a programador! Si eres un estudiante o junior dev que ha invertido horas en un proyecto genial ...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/los-revisores-de-flathub-groseros-e-inprofesionales-mi-experiencia-con-el-proyecto-pac-man-bloqueado-y-como-superar-obstaculos-en-publicaciones-open-source.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[### Introducción: ¡No Dejes que los Obstáculos te Detengan en Tu Camino como Desarrollador!

¡Hola, aspirante a programador! Si eres un estudiante o junior dev que ha invertido horas en un proyecto genial como un juego retro, y luego te topas con barreras absurdas al intentar publicarlo, este post es para ti. Imagina crear una recreación moderna de Pac-Man con .NET y Avalonia UI, solo para que quede atascado en revisión por una semana en Flathub porque un supervisor acusa –sin ni siquiera revisar– que está hecho por IA. Yo uso IA para testing, debugging y optimización, pero mis proyectos hablan por sí solos de su calidad. Hablo en nombre de todos los devs que han visto rechazados sus trabajos por "idiotas" sin visión. En este artículo, desde cero, exploraremos el proyecto Pac-Man, el proceso de submission a Flathub, las frustraciones comunes y cómo superarlas. ¡Aprende y motiva a no rendirte!

Este post no solo es un desahogo; es una guía práctica para navegar plataformas como Flathub. Si eres nuevo, piensa en esto como una lección real de resiliencia en open-source.

### Tecnologías en el Proyecto Pac-Man y Preparación para Flathub

Repasemos el stack del proyecto (https://github.com/JalaU-Capstones/pacman-recreation.git) y cómo adaptarlo para Flathub:

- **.NET 9.0 y Avalonia UI**: Core para cross-platform.
- **Python**: En tools para assets.
- **Flatpak**: Formato para distribución en Linux vía Flathub.
- Otras: GitHub Actions para CI, NuGet.

Para publicar en Flathub, crea un manifest YAML. Requiere revisión manual, que puede demorar y ser subjetiva.

### Funcionalidades del Proyecto: Por Qué Merece Ser Publicado

El proyecto no es IA-generado; es código real con:

1. **Modo Single y Multiplayer**: Hasta 5 jugadores online.
2. **Leaderboards**: Globales con cache offline.
3. **Editor de Niveles**: Crea proyectos personalizados.
4. **Cross-Platform**: Windows/Linux.
5. **v1.0.0 Features**: DevConsole, highscores.

A pesar de esto, bloqueado por acusaciones infundadas. Muchos devs enfrentan lo mismo: revisores groseros que descartan sin ver el código.

### El Proceso de Submission a Flathub: Paso a Paso y Frustraciones

Guía para juniors, incluyendo código.

**Paso 1: Prepara tu Manifest**

Usa Python para generar un manifest básico (ejecutable).

Crea `generate_manifest.py`:

```python
import yaml

def generate_flatpak_manifest(app_id, runtime, sdk, command, modules):
    manifest = {
        "app-id": app_id,
        "runtime": runtime,
        "sdk": sdk,
        "command": command,
        "modules": modules
    }
    with open("com.example.App.yaml", "w") as f:
        yaml.dump(manifest, f)
    print("Manifest generado!")

# Ejemplo para Pac-Man
if __name__ == "__main__":
    generate_flatpak_manifest(
        "io.github.jalaucapstones.pacman-recreation",
        "org.freedesktop.Platform//23.08",
        "org.freedesktop.Sdk//23.08",
        "pacman-game",
        [{"name": "dotnet", "buildsystem": "simple", "build-commands": ["dotnet publish"]}]
    )
```

Explicación:
- Importa `yaml` (instala con pip si necesitas, pero en env base).
- Función genera dict YAML.
- Escribe archivo.
- Ejecuta: `python generate_manifest.py`. Útil para automatizar submissions.

**Paso 2: Sube PR a Flathub GitHub**

Fork flathub/flathub, agrega tu YAML, crea PR. Espera revisión... que puede ser eterna.

En mi caso: Una semana sin respuesta, luego acusación de "hecho por IA" sin evidencia. ¡Poco profesional! Revisores ignoran commits (94 en main) mostrando trabajo humano.

**Paso 3: Maneja Acusaciones de IA**

Snippet C# de ejemplo (del proyecto) para probar autenticidad:

```csharp
using System;

class GhostAI {
    public void Chase() {
        Console.WriteLine("Fantasma persiguiendo Pac-Man – lógica manual, no IA generada!");
    }
}

class Program {
    static void Main() {
        var ghost = new GhostAI();
        ghost.Chase();
    }
}
```

Explicación: Código simple, pero demuestra OOP humano. Envíalo como prueba.

### Ejemplos Prácticos del Mundo Real

- **Otros Devs**: Muchos en Reddit reportan delays en Flathub por revisores sobrecargados o bias (busca "flathub review delays").
- **Mi Proyecto**: Pac-Man con multiplayer real; calidad evidente, pero bloqueado por "visionarios" que no ven más allá.
- **Solución**: Publica en itch.io o Steam mientras esperas; no dependas de una plataforma.
- **Comunidad**: Únete a foros para presionar mejoras en procesos.

### Conclusión: ¡Lucha por Tu Código y No Te Rindas!

Has visto las entrañas de un proyecto real y las barreras en open-source. No dejes que revisores groseros te detengan; usa IA inteligentemente, documenta tu trabajo y persiste. ¡Tú representas a todos los devs con proyectos increíbles rechazados por falta de visión. Sigue codificando!

Autor: Diego Alejandro Botina (CodeWithBotina)

### Referencias
- Docs Flathub: https://docs.flathub.org/docs/for-app-authors/submission
- .NET Docs: https://learn.microsoft.com/dotnet
- Flatpak Docs: https://docs.flatpak.org
- Repositorio: https://github.com/JalaU-Capstones/pacman-recreation
- Python YAML: https://pyyaml.org/wiki/PyYAMLDocumentation]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Recreación Moderna de Pac-Man: Aprende a Desarrollar Juegos Cross-Platform con .NET y Avalonia UI]]></title>
      <link>https://blog.codewithbotina.com/es/posts/recreacion-moderna-de-pac-man-aprende-a-desarrollar-juegos-cross-platform-con-net-y-avalonia-ui</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/recreacion-moderna-de-pac-man-aprende-a-desarrollar-juegos-cross-platform-con-net-y-avalonia-ui</guid>
      <pubDate>Mon, 23 Feb 2026 00:55:45 GMT</pubDate>
      <description><![CDATA[Introducción: ¡Revive el Clásico Pac-Man y Aprende Programación de Juegos! ¡Hola, futuro desarrollador! Si eres un estudiante o principiante en programación y siempre has soñado con crear tu propio vi...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/recreacion-moderna-de-pac-man-aprende-a-desarrollar-juegos-cross-platform-con-net-y-avalonia-ui.png" type="image/jpeg"/>
      <content:encoded><![CDATA[### Introducción: ¡Revive el Clásico Pac-Man y Aprende Programación de Juegos!

¡Hola, futuro desarrollador! Si eres un estudiante o principiante en programación y siempre has soñado con crear tu propio videojuego, este artículo es para ti. Imagina recrear el icónico Pac-Man, ese juego arcade que ha entretenido a generaciones, pero con herramientas modernas que funcionan en Windows y Linux. El proyecto "Pac-Man Recreation" del repositorio de GitHub (https://github.com/JalaU-Capstones/pacman-recreation) es un ejemplo perfecto para empezar. No necesitas ser un experto; te guiaré paso a paso desde cero, explicando cada funcionalidad, tecnología y cómo puedes contribuir o modificarlo. ¡Al final, tendrás las bases para desarrollar tus propios juegos!

Este proyecto no solo es un juego divertido, sino una lección práctica en desarrollo cross-platform. Usaremos .NET 9.0 y Avalonia UI, que permiten crear aplicaciones de escritorio que corren en múltiples sistemas operativos sin complicaciones. Si eres nuevo, piensa en esto como tu primer paso hacia una carrera en game dev. ¡Vamos a sumergirnos!

### Tecnologías Utilizadas: El Stack Moderno para Juegos de Escritorio

Antes de entrar en el código, veamos las herramientas clave que hacen posible este proyecto:

- **.NET 9.0 SDK**: El framework principal de Microsoft para desarrollar aplicaciones en C#. Es gratuito, open-source y soporta cross-platform (Windows, Linux, macOS). Proporciona todo lo necesario para lógica de juego, como manejo de eventos y threading.
- **Avalonia UI**: Una biblioteca UI open-source para crear interfaces gráficas cross-platform. Similar a WPF, pero más ligera y compatible con Linux. Se usa para renderizar el mapa, Pac-Man, fantasmas y UI como scores.
- **C#**: El lenguaje principal (83.8% del código). Fácil de aprender si vienes de Java o Python.
- **Python**: Usado en herramientas auxiliares (16.2% del código), como generación de assets en la carpeta `tools/AssetGeneration`. Ayuda en scripts para procesar imágenes o datos.
- **Flathub**: Para distribución en Linux, facilitando la instalación como un paquete flatpak.
- **GitHub Actions**: Para CI/CD, automatizando builds y tests.
- **NuGet**: Gestor de paquetes para dependencias .NET.
- **AWS**: Mencionado para deployment, posiblemente para hostear leaderboards.

Requisitos para empezar: Instala .NET 9.0 SDK desde el sitio oficial de Microsoft (https://dotnet.microsoft.com/download/dotnet/9.0). Para Linux, usa Flathub.

### Funcionalidades del Proyecto: Todo lo que Ofrece Esta Recreación

Este no es solo un clon básico; incluye mejoras modernas. Vamos a desglosar todas las funcionalidades:

1. **Modo Single-Player Clásico**:
   - 3 niveles con dificultad creciente.
   - Comportamiento auténtico de fantasmas: Blinky (rojo, persigue directamente), Pinky (rosa, embosca), Inky (azul, impredecible), Clyde (naranja, aleatorio).
   - Sonidos y gráficos originales del arcade.

2. **Multiplayer Online**:
   - Soporta hasta 5 jugadores.
   - Unión directa a partidas en progreso.

3. **Leaderboards Globales**:
   - Top 10 mundial.
   - Envío de scores después de completar los 3 niveles.
   - Cache local y cola offline para envíos pendientes.

4. **Sistema de Perfiles**:
   - Tracking de high scores locales y globales.

5. **Modo Creativo (Editor de Proyectos)**:
   - Diseña niveles personalizados (hasta 10 por proyecto).
   - Configura vidas, puntaje para ganar, dificultad por nivel.
   - Exporta/importa como paquetes .pacproj.

6. **Soporte Cross-Platform**:
   - Linux (x64 y ARM64) y Windows.

7. **Características Adicionales en v1.0.0**:
   - Highscores globales.
   - DevConsole para debugging.
   - Editor de proyectos.

Otras detalles: Licencia MIT (puedes usarlo libremente), 94 commits en la rama main, release v1.0.0 con foco en editor y highscores.

### Instalación y Ejecución Paso a Paso: ¡Clona y Juega!

Para principiantes, empecemos con lo básico. Usa Git para clonar el repo.

**Paso 1: Clona el Repositorio**

Abre tu terminal y ejecuta:

```bash
git clone https://github.com/JalaU-Capstones/pacman-recreation.git
cd pacman-recreation
```

**Paso 2: Restaura Dependencias**

```bash
dotnet restore
```

Esto descarga todos los paquetes NuGet definidos en `Directory.Packages.props`.

**Paso 3: Ejecuta el Juego**

```bash
dotnet run --project src/PacmanGame/PacmanGame.csproj
```

Para Linux vía Flathub (más fácil):

```bash
flatpak install flathub io.github.jalaucapstones.pacman-recreation
flatpak run io.github.jalaucapstones.pacman-recreation
```

Si usas Python para assets, navega a `tools/AssetGeneration` y ejecuta scripts (asumiendo un archivo como generate_assets.py, que procesa imágenes para el juego).

### Secciones con Código: Explicaciones Paso a Paso

Aunque el core es C#, incluiremos ejemplos de código Python de las tools (para asset generation) y snippets C# conceptuales basados en el proyecto. Todo es ejecutable.

#### Sección 1: Generación de Assets con Python (de tools/AssetGeneration)

Supongamos un script simple para procesar imágenes (basado en el uso de Python en el repo). Crea un archivo `generate_assets.py`:

```python
import os
from PIL import Image  # Requiere pip install pillow (pero nota: el entorno del repo no permite installs extras)

def generate_thumbnail(image_path, output_path, size=(128, 128)):
    """Genera un thumbnail para assets del juego."""
    with Image.open(image_path) as img:
        img.thumbnail(size)
        img.save(output_path)
        print(f"Thumbnail generado en {output_path}")

# Ejemplo de uso
if __name__ == "__main__":
    generate_thumbnail("pacman.png", "pacman_thumb.png")
```

Explicación paso a paso:
- Importa `PIL` para manipular imágenes.
- Función `generate_thumbnail`: Abre imagen, redimensiona y guarda.
- Útil para preparar sprites de Pac-Man o fantasmas en el juego.

Ejecútalo: `python generate_assets.py`. En el mundo real, esto optimiza assets para rendimiento en Avalonia.

#### Sección 2: Lógica Básica de Movimiento en C# (Conceptual del Juego)

En `src/PacmanGame`, imagina una clase para Pac-Man. Snippet ejecutable (prueba en un proyecto .NET console):

```csharp
using System;

class PacMan {
    public int X { get; set; }
    public int Y { get; set; }

    public void Move(string direction) {
        switch (direction) {
            case "up": Y--; break;
            case "down": Y++; break;
            case "left": X--; break;
            case "right": X++; break;
            default: Console.WriteLine("Dirección inválida"); break;
        }
        Console.WriteLine($"Nueva posición: ({X}, {Y})");
    }
}

// Ejemplo de uso
class Program {
    static void Main() {
        PacMan pac = new PacMan { X = 0, Y = 0 };
        pac.Move("right");
        pac.Move("up");
    }
}
```

Explicación:
- Clase `PacMan` con propiedades X/Y.
- Método `Move`: Actualiza posición basado en dirección.
- En el juego real, esto se integra con Avalonia para renderizar en canvas.

Compila y ejecuta: `dotnet run`. En el mundo real, aplica a colisiones con fantasmas o puntos.

#### Sección 3: Integración de Leaderboards (Ejemplo Avanzado)

Usa HTTP para enviar scores (conceptual):

```csharp
using System.Net.Http;
using System.Threading.Tasks;
using System;

class Leaderboard {
    private static readonly HttpClient client = new HttpClient();

    public async Task SendScore(string player, int score) {
        var content = new StringContent($"{{ \"player\": \"{player}\", \"score\": {score} }}");
        var response = await client.PostAsync("https://example-leaderboard.com/submit", content);
        Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}

// Uso
async Task Main() {
    var lb = new Leaderboard();
    await lb.SendScore("Diego", 10000);
}
```

Esto simula envío a AWS. En el proyecto, usa cache local si offline.

### Ejemplos Prácticos del Mundo Real

- **Educación**: Usa este proyecto en clases de programación para enseñar OOP (clases para entidades como fantasmas).
- **Portfolio**: Modifícalo agregando un nuevo fantasma y súbelo a tu GitHub para impresionar en entrevistas.
- **Comunidad**: Contribuye fixing bugs (ver commits como resolución de assembly loading).
- **Negocios**: Extiéndelo a mobile con .NET MAUI para una app de juegos retro.

### Conclusión: ¡Tú Puedes Crear Juegos Increíbles!

¡Felicidades por llegar hasta aquí! Has explorado un proyecto completo que revive Pac-Man con toques modernos. Ahora, clona el repo, experimenta y crea tu versión. Recuerda, el desarrollo de juegos es iterativo: empieza pequeño y construye. ¡Sigue programando y conviértete en un game dev estrella!

Autor: Diego Alejandro Botina (CodeWithBotina)

### Referencias
- Documentación .NET 9.0: https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9
- Avalonia UI Docs: https://docs.avaloniaui.net/
- Repositorio Original: https://github.com/JalaU-Capstones/pacman-recreation
- Python PIL: https://pillow.readthedocs.io/en/stable/
- Flathub: https://flathub.org/apps/io.github.jalaucapstones.pacman-recreation]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Optimizando Python para Concurrencia y Eficiencia: Respuesta a los Críticos de su "Lentitud"]]></title>
      <link>https://blog.codewithbotina.com/es/posts/optimizacion-python-concurrencia-eficiencia</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/optimizacion-python-concurrencia-eficiencia</guid>
      <pubDate>Mon, 16 Feb 2026 13:52:38 GMT</pubDate>
      <description><![CDATA[Optimizando Python para Concurrencia y Eficiencia: Respuesta a los Críticos de su "Lentitud" ¿Python es lento e ineficiente comparado con lenguajes compilados como C++ o Rust? Es un mito persistente, ...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/optimizacion-python-concurrencia.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# Optimizando Python para Concurrencia y Eficiencia: Respuesta a los Críticos de su "Lentitud"

¿Python es lento e ineficiente comparado con lenguajes compilados como C++ o Rust? Es un mito persistente, pero la realidad es más matizada. Sí, Python es interpretado y tiene limitaciones como el Global Interpreter Lock (GIL), pero con las herramientas y técnicas adecuadas, puede manejar programación concurrente de forma eficiente y escalable. En este post técnico, exploramos la mejor forma de implementar concurrencia en Python, cómo comunicar entre hilos/procesos, y estrategias de optimización para que tu código vuele —incluso en 2026, con Python 3.13 liberando parte del GIL en subinterpreters. Esto es para desarrolladores que quieren probar que Python no es "solo para scripts", sino una bestia para apps reales.

Dirigido a juniors y estudiantes: usaremos ejemplos prácticos, código runnable y explicaciones paso a paso. Al final, verás que Python puede rivalizar en eficiencia para muchas tareas, especialmente I/O-bound o con optimizaciones híbridas.

## Entendiendo la Concurrencia en Python: Threads vs. Procesos vs. Async

Python soporta tres paradigmas principales de concurrencia:
- **Threads**: Para tareas concurrentes en un solo proceso (módulo `threading`).
- **Procesos**: Para paralelismo real, evitando el GIL (módulo `multiprocessing`).
- **Asyncio**: Para concurrencia asíncrona, ideal para I/O (e.g., redes, archivos).

El GIL limita threads a un núcleo de CPU a la vez, haciendo Python "lento" en CPU-bound tasks. Pero para I/O-bound (e.g., APIs, DBs), es genial. En Python 3.13+, subinterpreters permiten threads sin GIL en contextos aislados.

### 1. Concurrencia con Threads: Básicos y Comunicación

Threads son livianos y comparten memoria, pero por el GIL, no paralelizan CPU. Úsalos para I/O.

**Ejemplo básico de threads:**

```python
import threading
import time

def tarea(nombre):
    print(f"{nombre} empezando...")
    time.sleep(2)
    print(f"{nombre} terminada.")

hilos = [threading.Thread(target=tarea, args=(f"Hilo {i}",)) for i in range(5)]
for hilo in hilos:
    hilo.start()
for hilo in hilos:
    hilo.join()  # Espera a que terminen
```

Esto ejecuta "concurrentemente", pero no en paralelo real por GIL.

**Comunicación entre threads**: Usa locks para evitar race conditions, queues para pasar datos seguros.

- **Lock**: Protege secciones críticas.
  
```python
lock = threading.Lock()
contador = 0

def incrementar():
    global contador
    with lock:
        contador += 1
```

- **Queue**: Para producer-consumer patterns (thread-safe).
  
```python
from queue import Queue

q = Queue()

def productor():
    for i in range(5):
        q.put(i)
        print(f"Producido: {i}")

def consumidor():
    while True:
        item = q.get()
        if item is None: break
        print(f"Consumido: {item}")
        q.task_done()

threading.Thread(target=productor).start()
consumidor_thread = threading.Thread(target=consumidor)
consumidor_thread.start()
q.join()  # Espera a que se procese todo
q.put(None)  # Señala fin
consumidor_thread.join()
```

Esto evita corrupción de datos y es eficiente para comunicación.

### 2. Paralelismo Real con Multiprocessing

Para CPU-bound (e.g., cálculos intensos), usa procesos: cada uno tiene su propio intérprete, bypassing GIL.

**Ejemplo:**

```python
from multiprocessing import Process, Pool
import os

def cuadrado(n):
    print(f"Proceso {os.getpid()}: {n**2}")

if __name__ == "__main__":  # Obligatorio en Windows
    with Pool(4) as p:  # Pool de 4 procesos
        p.map(cuadrado, range(10))
```

**Comunicación entre procesos**: No comparten memoria, usa queues, pipes o managers.

- **Queue (multiprocessing.Queue)**: Similar a threading, pero para procesos.
- **Manager**: Para estructuras compartidas (e.g., listas, dicts).
  
```python
from multiprocessing import Manager, Process

def modificar(lista):
    lista.append(os.getpid())

if __name__ == "__main__":
    with Manager() as manager:
        shared_list = manager.list()
        procesos = [Process(target=modificar, args=(shared_list,)) for _ in range(5)]
        for p in procesos: p.start()
        for p in procesos: p.join()
        print(shared_list)  # Lista compartida sin locks manuales
```

Esto es más overhead que threads, pero escala en multicore.

### 3. Concurrencia Asíncrona con Asyncio: La Mejor para I/O

Para apps web, APIs o cualquier I/O-heavy, asyncio es rey: single-threaded pero concurrente vía corutinas.

**Ejemplo básico:**

```python
import asyncio

async def tarea(nombre):
    print(f"{nombre} empezando...")
    await asyncio.sleep(2)
    print(f"{nombre} terminada.")

async def main():
    tareas = [tarea(f"Tarea {i}") for i in range(5)]
    await asyncio.gather(*tareas)

asyncio.run(main())
```

**Comunicación**: Usa queues asíncronas o signals.

- **asyncio.Queue**: Para producer-consumer async.
  
```python
async def productor(q):
    for i in range(5):
        await q.put(i)
        print(f"Producido: {i}")

async def consumidor(q):
    while True:
        item = await q.get()
        if item is None: break
        print(f"Consumido: {item}")
        q.task_done()

async def main():
    q = asyncio.Queue()
    await asyncio.gather(productor(q), consumidor(q))
    await q.join()
    await q.put(None)

asyncio.run(main())
```

Asyncio brilla en efficiency para servers (e.g., FastAPI).

## Optimización en Python: Haciendo que Vuele como Lenguajes Compilados

Python no compila a machine code, pero con optimizaciones, rivaliza:

1. **Profiling**: Identifica bottlenecks con `cProfile` o `line_profiler`.
   
```python
import cProfile

def funcion_lenta():
    # Código a perfilar
    pass

cProfile.run("funcion_lenta()")
```

2. **Numba/JIT**: Compila funciones a machine code en runtime.
   
```python
from numba import jit

@jit(nopython=True)
def suma_rapida(arr):
    return arr.sum()
```

3. **Cython**: Convierte Python a C para compilación.
   - Escribe .pyx, compila a .so, importa.
   - Gana hasta 100x en loops.

4. **PyPy**: Interprete JIT alternativo, más rápido que CPython para long-running apps.

5. **Multiprocessing/Concurrent.futures**: Para paralelismo fácil.
   
```python
from concurrent.futures import ProcessPoolExecutor

with ProcessPoolExecutor() as executor:
    results = list(executor.map(funcion, datos))
```

6. **Otras**: Vectorización con NumPy, caching con `functools.lru_cache`, o extensions en C/Rust via pybind11.

En benchmarks 2026, Python optimizado maneja big data o ML tan bien como compilados en muchos casos, gracias a libs como Pandas/NumPy (C-backend).

## Conclusión: Python es Eficiente si lo Usas Bien

A los críticos: Python no es "lento"; es flexible. Con concurrencia adecuada y optimizaciones, resuelve problemas reales eficientemente. Juniors: practiquen estos patrones para construir código robusto. Comunidad, no teman experimentar —la eficiencia viene con experiencia.

¿Cuál técnica probarás? Comenta abajo.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un ingeniero en software en formación, apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

## Referencias
Para este post, me basé en documentación oficial y guías técnicas actualizadas a 2026. Aquí las principales:

- [Concurrencia en Python - Documentación Oficial Python 3.13](https://docs.python.org/3/library/concurrency.html)
- [Multiprocessing y Threading en Python - Real Python](https://realpython.com/python-concurrency)
- [Asyncio Tutorial - Python.org](https://docs.python.org/3/library/asyncio.html)
- [Optimización de Código Python - SciPy Lecture Notes](https://scipy-lectures.org/advanced/optimizing)
- [Numba para Aceleración - Numba Documentation](https://numba.pydata.org)
- [Cython para Performance - Cython Docs](https://cython.readthedocs.io)
- [GIL y Subinterpreters en Python 3.13 - PEP 554](https://peps.python.org/pep-0554)]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[El "Castigo" de Saberlo: Cómo el Uso Excesivo de IA y el Síndrome del Impostor nos Autodestruyen como Desarrolladores]]></title>
      <link>https://blog.codewithbotina.com/es/posts/castigo-saberlo-ia-sindrome-impostor-desarrolladores</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/castigo-saberlo-ia-sindrome-impostor-desarrolladores</guid>
      <pubDate>Mon, 16 Feb 2026 13:41:46 GMT</pubDate>
      <description><![CDATA[El "Castigo" de Saberlo: Cómo el Uso Excesivo de IA y el Síndrome del Impostor nos Autodestruyen como Desarrolladores Imagina saber que estás cavando tu propia tumba profesional, pero seguir haciéndol...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/castigo-saberlo-ia-impostor.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# El "Castigo" de Saberlo: Cómo el Uso Excesivo de IA y el Síndrome del Impostor nos Autodestruyen como Desarrolladores

Imagina saber que estás cavando tu propia tumba profesional, pero seguir haciéndolo porque el mundo te empuja. Eso es lo que muchos desarrolladores viven hoy con la IA: sabemos que depender demasiado de ella nos va a cobrar factura en habilidades perdidas, pero la usamos para cumplir deadlines absurdos o para fingir expertise que no tenemos. Inspirado en "Crimen y Castigo" de Fiódor Dostoyevski —donde Raskólnikov se tortura por un crimen que comete sabiendo que está mal—, este post es una reflexión cruda sobre cómo el síndrome del impostor y la sobredependencia de IA nos llevan a un "castigo" autoimpuesto. Hablemos sin filtros, comunidad: esto nos está pasando a muchos, y es hora de enfrentarlo.

## El Pecado Original: Saber que la IA nos Está Robando Habilidades, pero Seguir Usándola

En el desarrollo software, la IA es como un arma de doble filo: acelera el código, genera ideas y hasta depura bugs. Pero el uso excesivo tiene consecuencias reales. Fuentes como DecisionRules advierten que la dependencia extrema puede deteriorar nuestras habilidades de codificación y depuración, porque nos volvemos perezosos cognitivamente. Un artículo de SimpleThread, basado en 20 años de experiencia, recalca que la simplicidad y el entendimiento profundo ganan, pero si dejamos que la IA haga el trabajo pesado, perdemos esa capacidad.

¿Por qué seguimos? Por deadlines ridículos: jefes que exigen features en días cuando deberían ser semanas, forzándonos a copiar-pegar de ChatGPT o Copilot sin entender del todo. O peor, por inflar el CV: prometemos dominar frameworks que solo "sabemos" gracias a prompts, y luego en producción, el código falla porque no lo internalizamos. Como dice un relato en Reddit: "Síndrome del impostor extremo, código consistentemente malo, y la sensación de ser un desarrollador pésimo". Sabemos que esto nos cobrará factura —en bugs críticos, en despidos por incompetencia percibida, o en burnout por vivir en constante miedo al descubrimiento— pero lo hacemos porque el sistema lo premia a corto plazo.

## El Síndrome del Impostor: El Castigo Interno que Nos Paraliza

El síndrome del impostor no es un "síntoma lindo" de humildad; es una tortura mental que afecta al 70% de los devs, según encuestas. Relatos reales lo pintan crudo: un dev en YouTube cuenta cómo se sentía un fraude en su primer job junior, trabajando horas extras para "probarse" a sí mismo, solo para quemarse. En Ironhack Blog, explican que es común en juniors: dudas constantes como "¿Merezco este puesto?" o "Mis colegas saben más", agravado por la IA que hace que parezcas experto sin serlo.

Esto crea un ciclo vicioso: usas IA para compensar inseguridades, pero saber que dependes de ella intensifica el impostorismo. Como en Dostoyevski, el "castigo" es interno —ansiedad, insomnio, aislamiento— y externo: errores en producción porque no dominas lo básico. Un ingeniero en Ingeniería de Software lo resume: "Todos nos atascamos, pero el síndrome nos hace creer que somos los únicos fraudes".

Sin limitaciones: esto es una mierda para la salud mental. Muchos devs terminan con depresión, cambiando carreras o estancados en roles juniors por años. Y la comunidad tech, con su hype de "rockstars" y "ninjas", lo empeora: fingimos en LinkedIn, pero adentro sabemos que estamos sobrevendidos.

## Mensaje a la Comunidad: Rompamos el Ciclo Antes de que Nos Rompa

Comunidad, escuchen: si estás usando IA como muleta para deadlines imposibles, detente y negocia con tu equipo —mejor un "no" honesto que un colapso. Si inflaste tu CV, invierte tiempo real en aprender; el impostorismo se va con experiencia genuina, no con atajos. A los juniors: acepten desafíos, fallen, aprendan. Como dice un dev en Medium con 8 años: "Cambia equipos para crecer, no dejes emociones tomar control".

El verdadero "castigo" es no actuar. Construyan habilidades sólidas, prioricen simplicidad sobre complejidad IA-generada, y cuiden su mente. La IA es herramienta, no salvador. Si no, terminaremos como Raskólnikov: culpables y solos.

## Conclusión

Este "castigo de saberlo" es evitable si elegimos honestidad sobre fachada. Reflexionen: ¿Estás pagando factura ya? Compartan sus historias abajo —juntos desmontamos estos mitos.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un ingeniero en software en formación, apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

## Referencias
Para este post, me basé en fuentes educativas y relatos reales sobre el uso de IA y el síndrome del impostor en desarrollo software. Aquí las principales:

- [20 Things I've Learned in my 20 Years as a Software Engineer - SimpleThread](https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer) (Sobre simplicidad y riesgos de dependencia).
- [Programación y asistentes de IA: Impacto en los desarrolladores - DecisionRules](https://www.decisionrules.io/es/articles/programming-and-ai-assistants-impact-on-developers) (Dependencia excesiva y deterioro de habilidades).
- [Impacto de la IA en el desarrollo de software - Abstracta](https://es.abstracta.us/blog/ia-en-el-desarrollo-de-software) (Consecuencias en productividad y errores).
- [Cómo superar el síndrome del impostor como desarrollador junior - Ironhack Blog](https://www.ironhack.com/es/blog/como-superar-el-sindrome-de-impostor-como-desarrollador-junior) (Relatos y consejos para juniors).
- [El síndrome del impostor en programación te lo cura Twitch - Ingeniería de Software](https://ingenieriadesoftware.es/el-sindrome-del-impostor-en-programacion-te-lo-cura-twitch) (Experiencias comunes en devs).
- [Advices from a Software Engineer With 8 Years of Experience - Medium](https://medium.com/better-programming/advices-from-a-software-engineer-with-8-years-of-experience-8df5111d4d55) (Lecciones reales sobre crecimiento y emociones).
- Relatos en YouTube: "¿Cómo SUPERÉ el SÍNDROME DEL IMPOSTOR como DESARROLLADOR DE SOFTWARE (JUNIOR)?" y "El Síndrome del Impostor en Programación...".]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[¡Descubre "Vocabulario Tech: Dominando el Lenguaje del Desarrollo"! Mi nueva serie para que hables como pro en cualquier equipo]]></title>
      <link>https://blog.codewithbotina.com/es/posts/vocabulario-tech-dominando-lenguaje-desarrollo-playlist</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/vocabulario-tech-dominando-lenguaje-desarrollo-playlist</guid>
      <pubDate>Sun, 15 Feb 2026 00:58:20 GMT</pubDate>
      <description><![CDATA[¡Descubre "Vocabulario Tech: Dominando el Lenguaje del Desarrollo"! Mi nueva serie para que hables como pro en cualquier equipo Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en ...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/vocabulario-tech-playlist-codewithbotina.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# ¡Descubre "Vocabulario Tech: Dominando el Lenguaje del Desarrollo"! Mi nueva serie para que hables como pro en cualquier equipo

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación que sigue aprendiendo cada día y compartiendo lo que veo en el camino.

Hoy quiero poner en el ojo público una playlist que he estado construyendo con mucho cariño: **Vocabulario Tech: Dominando el Lenguaje del Desarrollo**.

Link directo: https://www.youtube.com/playlist?list=PLkU5_VolAliBx3e7_SZJpn2M2Rw0gH_IO

¿Alguna vez te has sentido perdido en una reunión porque no entendías la mitad de las palabras que volaban? ¿O has leído un artículo técnico y te has quedado pensando “¿qué rayos es eso que mencionan todo el tiempo”?

Esta serie es tu traductor personal. En cada video explico 5 términos, conceptos o herramientas clave que todo desarrollador, ingeniero y profesional tech necesita dominar para comunicarse mejor, colaborar sin fricciones y avanzar en su carrera. Desde los fundamentos hasta las tendencias más actuales del 2025-2026.

Actualmente la playlist tiene **8 videos** (y sigo subiendo más), con temas como:

1. 8vo Diccionario Dev: 5 Palabras que ESCUCHARÁS en TODA Oficina Tech  
2. Más Allá del Código: 5 Conceptos que Están Redefiniendo Nuestra Profesión  
3. Del Green Coding al Data Mesh: El Vocabulario que Define el Desarrollo Moderno  
4. Observability, IA Generativa y Más: El Vocabulario Obligatorio para Devs en 2025  
5. De 0 a 100: Domina Estos 5 Términos Clave de Programación en 2025 | #5 Términos Tech  
6. 5 Herramientas que Todo Desarrollador Usa (aunque no lo sepa)  
7. Algoritmo, Docker, DevOps: 5 Términos que DEFINEN 2024 (Parte 2)  
8. API, Git, Debugging: Lo que Todo Dev Debe Saber (Parte 1)

Es perfecta para:
- Estudiantes y juniors que quieren sonar más seguros en entrevistas o reuniones.
- Profesionales que cambian de stack o entran a equipos grandes.
- Cualquiera que quiera entender mejor el ecosistema tech sin sentirse perdido.

Si estás empezando, úsala como referencia rápida. Si ya tienes experiencia, revísala para refrescar jerga que usas todos los días sin darte cuenta.

Te invito a que le des play desde el primer video (o el que más te llame la atención) y me cuentes en los comentarios qué término nuevo aprendiste o cuál ya usas en tu día a día.

¡Suscríbete al canal si aún no lo has hecho para no perderte los próximos episodios! Vamos a seguir construyendo este diccionario vivo del desarrollo.

Gracias por el apoyo, comunidad. Los aprecio un montón.

Link de la playlist: https://www.youtube.com/playlist?list=PLkU5_VolAliBx3e7_SZJpn2M2Rw0gH_IO

Nos vemos en el siguiente video y en el próximo post.

Diego Alejandro Botina  
CodeWithBotina]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[20+ IAs con Planes Gratuitos Generosos en 2026: Ideales para Estudiantes y Desarrolladores Juniors]]></title>
      <link>https://blog.codewithbotina.com/es/posts/ias-gratuitas-generosas-2026-estudiantes-juniors</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/ias-gratuitas-generosas-2026-estudiantes-juniors</guid>
      <pubDate>Sun, 15 Feb 2026 00:39:57 GMT</pubDate>
      <description><![CDATA[20+ IAs con Planes Gratuitos Generosos en 2026: Ideales para Estudiantes y Desarrolladores Juniors Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación apasion...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/ias-gratuitas-2026.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# 20+ IAs con Planes Gratuitos Generosos en 2026: Ideales para Estudiantes y Desarrolladores Juniors

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

En blog.codewithbotina.com, hoy compartimos una lista curada de más de 20 herramientas de IA con planes gratuitos generosos, perfectas para estudiantes y desarrolladores juniors que buscan potenciar su aprendizaje y productividad sin gastar mucho (o nada). Enfocadas en 2026, donde la IA es más accesible que nunca, las hemos categorizado en: IA de uso general, agentes de IA, diseñadoras (para imágenes y gráficos), y herramientas para presentaciones e informes.

Estos planes gratuitos suelen incluir límites razonables (e.g., consultas diarias, generaciones mensuales), pero son suficientes para uso educativo o inicial en proyectos. Verifiquen siempre los términos, ya que pueden variar. Al final, mi top 3 recomendadas para este año.

## IA de Uso General
Estas son chatbots y asistentes versátiles para consultas, explicación de conceptos, debugging básico y más.

1. **ChatGPT (OpenAI)**: Asistente conversacional para escribir, codificar y aprender. Plan gratuito: Acceso ilimitado a GPT-3.5, con límites diarios en GPT-4o para pruebas. Ideal para juniors explicando código.
2. **Gemini (Google)**: Multimodal para texto, imágenes y código. Plan gratuito: 1 año completo para estudiantes con .edu email, incluyendo 2TB storage y acceso a Gemini 3 Pro.
3. **Claude (Anthropic)**: Enfocado en razonamiento ético y coding. Plan gratuito: Acceso básico con límites mensuales, perfecto para análisis de problemas.
4. **Grok (xAI)**: IA conversacional integrada con X, útil para búsquedas en tiempo real. Plan gratuito: Acceso básico sin suscripción.
5. **Perplexity AI**: Motor de búsqueda con citas. Plan gratuito: Búsquedas ilimitadas con respuestas detalladas, genial para investigación académica.

## Agentes de IA
Herramientas que automatizan tareas, como coding agents o workflows.

6. **GitHub Copilot (Microsoft/GitHub)**: Asistente de código en VS Code. Plan gratuito: Acceso completo para estudiantes verificados vía GitHub Student Pack.
7. **Cursor**: IDE con IA para desarrollo rápido. Plan gratuito: Uso básico con límites en generaciones.
8. **Tabnine**: Autocompletado de código. Plan gratuito: Versión limitada con soporte para múltiples lenguajes.
9. **Windsurf (ex-Codeium)**: Agente de código privacy-first. Plan gratuito: Uso ilimitado en tier básico.
10. **Replit Ghostwriter**: Agente en Replit para coding colaborativo. Plan gratuito: Integrado en Replit free tier.
11. **Qwen3 Coder (Alibaba)**: Modelo agentic para coding, free/low-cost vía OpenRouter. Plan gratuito: Acceso básico con tokens diarios.

## Diseñadoras (para Imágenes y Gráficos)
Para generar visuals, diseños y assets para proyectos o presentaciones.

12. **Leonardo.AI**: Generador de imágenes y arte. Plan gratuito: 150 créditos diarios para generaciones.
13. **Canva AI (Magic Studio)**: Herramientas de diseño con IA. Plan gratuito: Acceso generoso a layouts, ediciones y generaciones básicas.
14. **DALL-E (en ChatGPT)**: Generación de imágenes integrada. Plan gratuito: Incluido en ChatGPT free con límites diarios.
15. **AutoDraw (Google)**: Dibujo asistido por IA. Plan gratuito: Completamente ilimitado.
16. **Midjourney (vía Discord)**: Arte e imágenes avanzadas. Plan gratuito: Pruebas limitadas, pero generoso para starters.

## Para Hacer Presentaciones e Informes
Herramientas que ayudan a crear slides, resúmenes y documentos.

17. **NotebookLM (Google)**: Crea guías de estudio y resúmenes de notas/PDFs. Plan gratuito: Ilimitado.
18. **Gamma**: Generador de presentaciones. Plan gratuito: Hasta 400 créditos/mes para slides.
19. **Tome**: Creador de presentaciones IA. Plan gratuito: Acceso básico con límites en exportaciones.
20. **Beautiful.ai**: Diseñador de slides inteligente. Plan gratuito: Plantillas y generaciones limitadas.
21. **ChatPDF**: Resume y analiza PDFs para informes. Plan gratuito: 2 PDFs/día, ideal para papers académicos.
22. **Grammarly AI**: Asistente de escritura para informes. Plan gratuito: Correcciones básicas y sugerencias.

## Top 3 de las Mejores IAs Gratuitas en 2026
Basado en accesibilidad, utilidad para aprendizaje y límites generosos:
1. **Gemini (Google)**: Top por su oferta gratuita para estudiantes (1 año full access), multimodalidad y integración con Google Workspace. Perfecta para juniors devs y estudio.
2. **ChatGPT (OpenAI)**: Versátil para coding, escritura y más; el free tier es robusto y educativo.
3. **GitHub Copilot**: Esencial para devs juniors; free para estudiantes, acelera el aprendizaje de código real.

Estas herramientas pueden transformar tu flujo de trabajo, pero recuerda: la IA es un complemento, no un reemplazo para aprender fundamentos. Prueba y encuentra las que se adapten a ti.

¿Cuál usas o probarás? Comenta abajo.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un ingeniero en software en formación, apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

## Referencias
Para este post, me basé en fuentes actualizadas de 2026 sobre herramientas IA gratuitas. Aquí las principales:

- [The 38 Best Free AI Tools in 2026: A Complete Guide - DataCamp](https://www.datacamp.com/blog/free-ai-tools)
- [Best Free AI Tools for Students in 2026: Tested - Vertech Academy](https://www.vertechacademy.com/blog/best-free-ai-tools-students-2026)
- [25+ Free AI Tools That Actually Work in 2026 - Medium](https://medium.com/@rekhadcm/25-free-ai-tools-that-actually-work-in-2026-635a37043d40)
- [Top 10 AI Tools for Students 2026 – Free & Beginner-Friendly - OHSC](https://www.oxfordhomestudy.com/OHSC-Blog/ai-tools-for-students)
- [Top 10 Free AI Tools for Students in 2026 - LinkedIn](https://www.linkedin.com/posts/theamarpanchal_top-10-free-ai-tools-for-students-in-2026-activity-7419593355032137728-YmnJ)
- [100+ Best Free AI Tools in 2026 (Start Instantly) - Dokan](https://dokan.co/blog/501935/best-free-ai-tools)
- [Best Free AI Tools for Engineering Students in 2026 - WiredWhite](https://wiredwhite.com/best-free-ai-tools-for-engineering-students-in-2026)
- [Best AI Coding Tools for Developers in 2026 - Builder.io](https://www.builder.io/blog/best-ai-tools-2026)
- [Top 30 free AI tools you can't miss in 2026 - Jotform Blog](https://www.jotform.com/ai/free-ai-tools)
- [The Best AI Tools for 2026 - DEV Community](https://dev.to/asad1/the-best-ai-tools-for-2026-dcd)
- [5 Best Free and Low-Cost AI Coding Models in 2026 - Reddit](https://www.reddit.com/r/AIToolsPerformance/comments/1qxa14d/5_best_free_and_lowcost_ai_coding_models_in_2026)
- [15 Best AI Tools for Developers in 2026 [Free and Paid] - Openxcell](https://www.openxcell.com/blog/ai-tools-for-developers)]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[La Realidad Cruda de Ser Desarrollador de Software: Más Allá de los Mitos]]></title>
      <link>https://blog.codewithbotina.com/es/posts/realidad-desarrollador-software-honesta</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/realidad-desarrollador-software-honesta</guid>
      <pubDate>Sun, 15 Feb 2026 00:33:09 GMT</pubDate>
      <description><![CDATA[La Realidad Cruda de Ser Desarrollador de Software: Más Allá de los Mitos Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación apasionado por el aprendizaje co...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/realidad-desarrollador-software.jpg" type="image/jpeg"/>
      <content:encoded><![CDATA[# La Realidad Cruda de Ser Desarrollador de Software: Más Allá de los Mitos

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

En blog.codewithbotina.com, hoy les cuento a nuestros seguidores cómo es realmente el trabajo de un desarrollador de software. No voy a pintar un panorama idílico con oficinas cool, salarios astronómicos y código perfecto que fluye sin esfuerzo. La verdad es más dura: es un empleo demandante, frustrante a veces, con presiones constantes y un aprendizaje interminable que puede llevar al agotamiento. Basado en relatos reales de desarrolladores con años de experiencia, informes y discusiones en foros como Reddit y X, vamos a desglosar la cotidianidad sin filtros.

## La Rutina Diaria: No Solo Código

Un día típico no es sentarte a programar 8 horas seguidas con música de fondo. En realidad, el coding puro ocupa solo el 20-30% del tiempo. El resto se va en:

- **Reuniones interminables**: Stand-ups diarios, plannings, retros y reuniones con stakeholders que cambian requisitos a último minuto. Como dice un desarrollador en un post de X: "Llego al trabajo, escribo tres líneas de código, alguien me interrumpe por una hora, hay una reunión, almuerzo, charlas en la máquina de café, tres líneas más y me voy a casa".

- **Debugging y bugs**: Pasas horas (o días) cazando errores que no entiendes. Un ingeniero con 20 años de experiencia en SimpleThread lo resume: "La mayoría del tiempo lo pasas entendiendo código ajeno, no escribiendo el tuyo".

- **Deadlines y overtime**: Proyectos con fechas irreales llevan a crunch time. Otro relato en X: "Un dev tuvo que parar en la carretera para arreglar un bug crítico. Otro codificó tres días seguidos, solo parando para ir al baño y beber agua".

- **Aprendizaje constante**: Tecnologías cambian rápido; si no estudias fuera de horas, te quedas atrás. Un consejo de Benoit Ruiz en Medium: "Sal de tu zona de confort o te estancarás".

## Los Desafíos Reales: Estrés, Burnout y Política

- **Estrés y salud mental**: Presión por entregar, bugs en producción que afectan usuarios reales, y la sensación de "impostor syndrome" constante. En Zero To Mastery: "No es un sueño; es trabajo duro, con dolor de espalda a los 28 y estrés a los 30".

- **Política de oficina**: No todo es técnico; hay egos, jefes que no entienden código, y decisiones basadas en política interna. Un relato en Quora: "Trabajé en un startup con freshers; era caótico, pero aprendí que el código perfecto no importa si no resuelve problemas reales".

- **Balance trabajo-vida**: Horas extras no pagadas, on-call que interrumpe fines de semana. Vadim Kravcenko: "Ser eficiente es clave, pero el 80% del tiempo no es coding; es manejar interrupciones y flujos".

- **Fracaso y arrepentimientos**: Muchos lamentan no haber cambiado de jobs antes o haber sobreingenierizado. Dave Farley en YouTube: "Mis mayores arrepentimientos: no priorizar simplicidad y quemarme en proyectos fallidos".

## Los Aspectos Positivos (Sin Exagerar)

No es todo malo: resuelves problemas reales, ves tu código impactar vidas, y hay satisfacción en un deploy exitoso. Pero como dice un dev en DEV.to: "Entiende el problema antes de codificar; de lo contrario, fallarás".

## Relatos Reales de Desarrolladores

- De SimpleThread (20 años experiencia): "No sabes mucho, y está bien. Enfócate en el usuario, no en la tecnología fancy. La simplicidad gana".

- De Medium (8 años): "Llevé un log de trabajo tarde; cambia equipos para crecer. No dejes emociones tomar control en equipo".

- De X: "Desperté a las 7am, llegué tarde a la uni, asado por el jefe, casa a las 7pm, codifiqué 4 horas para mi SaaS. 16 horas de shift, estoy exhausto".

- De Reddit: "Aprendices preguntan por experiencias: es duro, pero recompensante si amas aprender".

## Conclusión

Ser desarrollador es gratificante si te apasiona, pero es un trabajo como cualquier otro: con frustraciones, presiones y necesidad de resiliencia. No entres por el hype; hazlo por el desafío real. Si estás en esto, cuida tu salud y busca balance.

¿Cuál es tu experiencia? Comparte en comentarios.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un ingeniero en software en formación, apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

## Referencias
Basado en búsquedas y relatos verídicos consultados en febrero 2026:

- [20 Things I've Learned in my 20 Years as a Software Engineer - SimpleThread](https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer)
- [The 10 Hard Truths About Being A Software Engineer - Zero To Mastery](https://zerotomastery.io/blog/hard-truths-about-being-a-software-engineer)
- [Habits of great software engineers - Vadim Kravcenko](https://vadimkravcenko.com/shorts/habits-of-great-software-engineers)
- [Advices from a Software Engineer With 8 Years of Experience - Medium](https://medium.com/better-programming/advices-from-a-software-engineer-with-8-years-of-experience-8df5111d4d55)
- [Seven Lessons I Have Learned From My Experience as a Software Developer - DEV.to](https://dev.to/timothyokooboh/seven-lessons-i-have-learned-from-my-experience-as-a-software-developer-2hfk)
- Relatos de X: Posts de @sirmapy, @adityadotdev, @Zun2025, @codewithrobu, @hot_girl_spring (experiencias diarias y desafíos).
- Discusiones en Reddit: r/learnprogramming (coffee chats sobre experiencias laborales).]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Kimi K2.5 de Moonshot AI: Lo que implica esta nueva inteligencia para 2026]]></title>
      <link>https://blog.codewithbotina.com/es/posts/kimi-k2-5-moonshot-ai-implicaciones-2026</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/kimi-k2-5-moonshot-ai-implicaciones-2026</guid>
      <pubDate>Sun, 15 Feb 2026 00:27:29 GMT</pubDate>
      <description><![CDATA[Kimi K2.5 de Moonshot AI: Lo que implica esta nueva inteligencia para 2026 Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación que sigue aprendiendo y explora...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/kimi-k2-5-moonshot-ai-2026.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# Kimi K2.5 de Moonshot AI: Lo que implica esta nueva inteligencia para 2026

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación que sigue aprendiendo y explorando los avances tecnológicos con curiosidad y ojo crítico.

En este 2026, la inteligencia artificial sigue evolucionando a pasos agigantados, y uno de los lanzamientos que más ruido ha generado en los últimos meses es **Kimi K2.5** de Moonshot AI (lanzado a finales de enero de 2026). Esta actualización del modelo Kimi no es solo un "mejorado", sino un salto significativo que combina capacidades multimodales nativas, razonamiento agentico avanzado y, sobre todo, algo muy interesante: **Agent Swarm** (enjambre de agentes).

Vamos a desglosar qué es Kimi K2.5, sus características clave y qué significa esto para desarrolladores, investigadores, empresas y usuarios cotidianos en lo que resta del año.

## ¿Qué es Kimi K2.5?

Kimi K2.5 es un modelo de lenguaje grande (LLM) de código abierto (licencia MIT modificada) desarrollado por Moonshot AI, una startup china respaldada por grandes inversores como Alibaba y HongShan (ex-Sequoia China). Construido sobre la base de Kimi K2, fue preentrenado de forma continua con aproximadamente **15 billones de tokens mixtos de texto y visión**.

Sus números impresionan:
- **1 trillón de parámetros totales** (MoE – Mixture of Experts)
- Solo **32 mil millones activos por inferencia** (lo que lo hace eficiente y ejecutable incluso en hardware local potente)
- Arquitectura nativa multimodal: visión y lenguaje entrenados juntos desde el principio, no añadidos después.

Esto lo diferencia de muchos modelos que "pegan" visión encima de un LLM de texto. Kimi K2.5 entiende imágenes y videos de forma más integrada y natural.

## Características Principales que lo hacen destacar en 2026

1. **Multimodalidad nativa y "Visual Coding"**
   - Genera código frontend completo (HTML, CSS, JS, React, etc.) a partir de imágenes, capturas de pantalla o **videos de navegación**.
   - Ejemplo real: subes un video de 90 segundos navegando un sitio web y Kimi K2.5 reconstruye el layout, animaciones e interacciones casi idénticas.
   - Útil para prototipado rápido, clonación de interfaces, depuración visual y automatización de flujos UI.

2. **Agent Swarm (Beta) – El gran diferenciador**
   - Puede orquestar hasta **100 sub-agentes** trabajando en paralelo de forma autónoma.
   - Un agente "orquestador" divide la tarea, delega subtareas y coordina hasta **1.500 llamadas a herramientas** simultáneas.
   - Reduce tiempos de ejecución en tareas complejas hasta **4.5×** comparado con agentes secuenciales.
   - Ideal para investigación profunda, automatización de workflows de oficina (documentos, hojas de cálculo, PDFs, presentaciones), análisis masivo de datos visuales y tareas paralelizables.

3. **Modos de operación**
   - Instant: respuestas rápidas.
   - Thinking: razonamiento paso a paso profundo.
   - Agent: ejecución agentica simple.
   - Agent Swarm: ejecución paralela masiva (beta con créditos gratuitos para usuarios premium).

4. **Rendimiento competitivo**
   - Supera o iguala a modelos cerrados como GPT-5.2, Claude Opus 4.5 y Gemini 3 Pro en benchmarks de coding (SWE-Bench Verified/Multilingual), razonamiento multimodal (VideoMMMU) y exámenes difíciles (Humanity’s Last Exam: 50.2%).
   - Costo de inferencia mucho menor (hasta 76% más barato en tareas equivalentes).

## ¿Qué implica esto para 2026?

- **Democratización del agentic AI avanzado**: Al ser open-source y eficiente, cualquier desarrollador o empresa mediana puede experimentar con enjambres de agentes sin pagar fortunas por APIs cerradas.
- **Aceleración en visual-to-code y automatización UI/UX**: Los flujos de diseño → código se vuelven casi instantáneos. Esto impactará fuertemente en startups, agencias digitales y equipos de producto.
- **Presión sobre los gigantes occidentales**: Modelos chinos open-source como Kimi K2.5, DeepSeek y otros están cerrando la brecha de forma acelerada, forzando a OpenAI, Anthropic y Google a innovar más rápido o bajar precios.
- **Riesgos y consideraciones**: Mayor accesibilidad = mayor potencial de abuso (deepfakes, automatización maliciosa, generación masiva de contenido). También hay preguntas éticas sobre el origen de los datos de entrenamiento (15T tokens mixtos).
- **Oportunidad para la comunidad**: Con licencia permisiva, veremos forks, fine-tunes y herramientas construidas sobre Kimi K2.5 en los próximos meses. Hugging Face ya lo tiene disponible.

En resumen, Kimi K2.5 no es solo "otro modelo chino". Es una señal clara de que en 2026 el open-source agentic y multimodal está alcanzando (y en algunos casos superando) a lo cerrado, a costos mucho más bajos. Para quienes construimos software y sistemas, esto significa herramientas más potentes y accesibles… y también más responsabilidad en cómo las usamos.

¿Ya lo probaste en kimi.com o en Hugging Face? ¿Qué te parece el Agent Swarm? Cuéntame en los comentarios.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un ingeniero en software en formación, apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

## Referencias
- Moonshot AI Official: https://www.moonshot.ai/ y https://www.kimi.com/en
- TechCrunch: China Moonshot releases new open source model Kimi K2.5 (enero 2026)
- VentureBeat: Moonshot AI debuts Kimi K2.5 (enero 2026)
- Hugging Face: moonshotai/Kimi-K2.5 model card
- Wikipedia: Kimi (chatbot) – actualizaciones 2026
- SiliconANGLE y otras fuentes técnicas de enero-febrero 2026]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Feliz 14 de febrero: Un mensaje para todos los tipos de amor y para quienes aún esperan]]></title>
      <link>https://blog.codewithbotina.com/es/posts/feliz-14-febrero-mensaje-amor-esperanza</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/feliz-14-febrero-mensaje-amor-esperanza</guid>
      <pubDate>Sat, 14 Feb 2026 05:00:01 GMT</pubDate>
      <description><![CDATA[Feliz 14 de febrero: Un mensaje para todos los tipos de amor y para quienes aún esperan Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación que sigue aprendie...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/feliz-14-febrero-2026.jpg" type="image/jpeg"/>
      <content:encoded><![CDATA[# Feliz 14 de febrero: Un mensaje para todos los tipos de amor y para quienes aún esperan

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación que sigue aprendiendo cada día y valorando profundamente las conexiones humanas.

Hoy, 14 de febrero de 2026, quiero dedicar unas palabras sinceras a toda nuestra comunidad.

Feliz Día del Amor y la Amistad a cada uno de ustedes.

A los amores adolescentes que hoy se toman de la mano por primera vez en el parque, que se mandan mensajes interminables y que sienten mariposas cada vez que suena una notificación: disfruten esta etapa con toda la intensidad y la inocencia que merece. Es hermosa precisamente porque es fugaz y pura. Guárdenla en el corazón.

A los matrimonios de décadas, a esas parejas que ya han pasado por tormentas, enfermedades, hijos, mudanzas, deudas, risas y silencios largos: gracias por demostrar que el amor no es solo química inicial, sino elección diaria, perdón constante, respeto profundo y complicidad construida con el tiempo. Ustedes son la prueba viva de que cuando se cuida, el amor puede envejecer bien y volverse aún más fuerte.

A los que hoy están en pareja pero no todo es perfecto: no se exijan la postal de Instagram. El amor real tiene días grises, discusiones tontas y momentos de duda. Lo importante es que sigan eligiendo trabajar en ello con honestidad y cariño.

Y especialmente, a mis compañeros y compañeras que hoy sienten que el amor romántico parece algo lejano, que han perdido la esperanza después de varias decepciones, que ven el 14 de febrero como un recordatorio doloroso de lo que “no llega”, o que simplemente están en una etapa de estar solos:

No estás roto. No estás atrasado. No te falta nada esencial.

Mientras construyes la mejor versión de ti mismo —en tu profesión, en tu carácter, en tu salud mental, en tus pasiones, en tu forma de tratar a los demás— estás haciendo exactamente lo que necesitas para que, cuando llegue una conexión real, sea sana, equilibrada y valiosa.

El amor no llega para “completarte”, llega para sumar a alguien que ya está entero y en paz consigo mismo. Así que sigue invirtiendo en ti. Sigue creciendo. Sigue aprendiendo a quererte con la misma paciencia y exigencia con la que querrías a otra persona.

Un día, sin darte cuenta, vas a mirar atrás y vas a agradecer estos tiempos de soltería o de espera, porque te dieron la claridad y la fortaleza que necesitabas.

Hoy, aunque no tengas pareja, tienes derecho a celebrar: celebra tu capacidad de amar, tu empatía, tu sensibilidad, tu deseo de conexión genuina. Eso ya es valioso.

A todos, en cualquiera de estas situaciones: que este 14 de febrero sea un día de cariño hacia uno mismo y hacia los que nos rodean. El amor no solo se mide en relaciones románticas; también está en la amistad profunda, en la familia, en el autocuidado y en cómo tratamos al mundo.

Gracias por ser parte de esta comunidad. Los aprecio muchísimo.

Feliz 14 de febrero, de corazón.

Diego Alejandro Botina  
CodeWithBotina]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Comandos Útiles para Gestionar Permisos en Archivos, Directorios y Usuarios en Linux]]></title>
      <link>https://blog.codewithbotina.com/es/posts/comandos-permisos-archivos-directorios-usuarios-linux</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/comandos-permisos-archivos-directorios-usuarios-linux</guid>
      <pubDate>Fri, 13 Feb 2026 19:34:03 GMT</pubDate>
      <description><![CDATA[Comandos Útiles para Gestionar Permisos en Archivos, Directorios y Usuarios en Linux Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación apasionado por el apr...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/permisos-linux-comandos.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# Comandos Útiles para Gestionar Permisos en Archivos, Directorios y Usuarios en Linux

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, un ingeniero en software en formación apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

En blog.codewithbotina.com, hoy compartimos con nuestra comunidad una guía técnica sobre comandos esenciales para manejar permisos en Linux. Entender los permisos es fundamental para la seguridad y el control de acceso en sistemas basados en Unix, como Ubuntu, CentOS o Fedora. Explicaremos cada comando, su función, y desglosaremos el sistema de permisos numéricos (octal) y simbólicos, incluyendo qué representa cada número o letra. Usaremos ejemplos prácticos para ilustrar su uso.

## Entendiendo los Permisos en Linux

En Linux, cada archivo y directorio tiene permisos que definen quién puede leer (r - read), escribir (w - write) o ejecutar (x - execute). Estos se dividen en tres categorías:
- **Usuario propietario (u - user)**: El creador del archivo o quien lo posee.
- **Grupo (g - group)**: Usuarios en el mismo grupo que el propietario.
- **Otros (o - others)**: Todos los demás usuarios.

Los permisos se representan en formato simbólico (e.g., rwxr-xr-x) o numérico (octal, e.g., 755). En octal:
- 4 = r (lectura)
- 2 = w (escritura)
- 1 = x (ejecución)
- 0 = sin permiso

Se combinan sumando: e.g., 7 = rwx (4+2+1), 5 = rx (4+1), 6 = rw (4+2). Un permiso completo como 755 significa: propietario rwx (7), grupo rx (5), otros rx (5).

Para ver permisos, usa `ls -l`:
```
-rw-r--r-- 1 usuario grupo 1024 feb 13 14:30 archivo.txt
```
Aquí: propietario rw-, grupo r--, otros r-- (equivalente a 644).

## Comando chmod: Cambiar Permisos

`chmod` modifica los permisos de archivos o directorios. Sintaxis: `chmod [opciones] modo archivo`.

- **Modo simbólico**: e.g., `chmod u+x archivo` (agrega ejecución al usuario).
  - + agrega, - quita, = establece.
- **Modo octal**: e.g., `chmod 755 script.sh` (propietario rwx, grupo y otros rx).

Ejemplo: Hacer un script ejecutable para todos:
```
chmod 755 script.sh
```
O recursivo en directorio (-R):
```
chmod -R 644 /ruta/directorio
```

## Comando chown: Cambiar Propietario

`chown` cambia el usuario propietario y opcionalmente el grupo. Sintaxis: `chown [opciones] usuario:grupo archivo`.

Ejemplo: Cambiar propietario a "nuevo_usuario":
```
chown nuevo_usuario archivo.txt
```
Con grupo:
```
chown nuevo_usuario:nuevo_grupo archivo.txt
```
Recursivo:
```
chown -R usuario:grupo /directorio
```

## Comando chgrp: Cambiar Grupo

`chgrp` cambia solo el grupo propietario. Sintaxis: `chgrp grupo archivo`.

Ejemplo:
```
chgrp desarrolladores proyecto/
```

## Comando umask: Máscara de Permisos Predeterminados

`umask` define los permisos predeterminados al crear archivos/directorios, restando del valor base (666 para archivos, 777 para directorios).

Ejemplo: `umask 022` (archivos creados con 644, directorios con 755).
Para ver: `umask`.
Para establecer temporal: `umask 027` (más restrictivo: archivos 640, directorios 750).

## Otros Comandos Relacionados

- **adduser/addgroup**: Crear usuarios/grupos.
  ```
  adduser nuevo_usuario
  addgroup nuevo_grupo
  ```
- **usermod/groupmod**: Modificar usuarios/grupos, e.g., agregar usuario a grupo:
  ```
  usermod -aG grupo usuario
  ```
- **getfacl/setfacl**: Para ACLs avanzadas (Access Control Lists), que permiten permisos más granulares.
  Ejemplo: Asignar lectura a usuario específico:
  ```
  setfacl -m u:otro_usuario:r archivo.txt
  ```

## Mejores Prácticas

- Usa el principio de menor privilegio: Otorga solo permisos necesarios.
- Evita 777 (rwx para todos) por riesgos de seguridad.
- En servidores, configura umask en .bashrc para consistencia.
- Verifica con `ls -l` o `stat archivo` después de cambios.

## Conclusión

Estos comandos son herramientas esenciales para administrar permisos en Linux, asegurando seguridad y colaboración. Practícalos en un entorno controlado para dominarlos. Si tienes dudas o ejemplos adicionales, comenta abajo.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un ingeniero en software en formación, apasionado por el aprendizaje continuo y la aplicación de buenas prácticas en diversos campos de la tecnología.

## Referencias
Para este post, me basé en documentación oficial y guías técnicas. Aquí las principales:

- [Guía de Permisos en Linux - DigitalOcean](https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions)
- [Comandos chown, chmod en Linux - Guru99](https://www.guru99.com/file-permissions-in-linux.html)
- [Entendiendo umask - Linux Handbook](https://linuxhandbook.com/umask-command)
- [Manual de Linux (man pages): chmod, chown, chgrp - Ubuntu Manpages](https://manpages.ubuntu.com)
- [ACLs en Linux - GeeksforGeeks](https://www.geeksforgeeks.org/access-control-listsacl-linux-permissions)]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Crítica Realista al Sistema Educativo Colombiano: Métodos y Materiales Obsoletos desde Hace Dos Siglos]]></title>
      <link>https://blog.codewithbotina.com/es/posts/critica-sistema-educativo-colombiano-metodos-obsoletos</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/critica-sistema-educativo-colombiano-metodos-obsoletos</guid>
      <pubDate>Fri, 13 Feb 2026 19:23:08 GMT</pubDate>
      <description><![CDATA[Crítica Realista al Sistema Educativo Colombiano: Métodos y Materiales Obsoletos desde Hace Dos Siglos Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear ex...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/sistema-educativo-colombiano-critica.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# Crítica Realista al Sistema Educativo Colombiano: Métodos y Materiales Obsoletos desde Hace Dos Siglos

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet.

En blog.codewithbotina.com, hoy abordo un tema crucial para el futuro de nuestro país: el sistema educativo colombiano. A pesar de algunos avances en cobertura y acceso, persiste una crítica recurrente sobre la obsolescencia de sus métodos de enseñanza, libros, guías y documentos pedagógicos, que en muchos aspectos se asemejan a los utilizados hace dos siglos. Esta realidad no solo limita el desarrollo de habilidades críticas en los estudiantes, sino que perpetúa desigualdades y frena la innovación. Basado en informes, análisis y opiniones expertas, exploraré esta problemática de manera equilibrada, reconociendo logros pero destacando las deficiencias estructurales.

## El Origen Histórico de la Obsolescencia

El sistema educativo colombiano, como muchos en América Latina, tiene raíces en el modelo prusiano del siglo XIX, diseñado para formar ciudadanos obedientes y trabajadores industriales. Este enfoque enfatizaba la memorización, la disciplina rígida y la transmisión unidireccional de conocimiento, con libros y guías estandarizados que priorizaban hechos sobre análisis. Dos siglos después, muchos elementos persisten: aulas con distribución jerárquica (profesor al frente, alumnos en filas), evaluaciones basadas en repetición y materiales didácticos que no integran tecnologías modernas ni contextos locales.

Informes como el de la OCDE destacan que, aunque Colombia ha expandido la cobertura educativa desde la década de 1990, la calidad sigue rezagada. La infraestructura inadecuada, la falta de actualización en currículos y la dependencia de textos obsoletos contribuyen a altas tasas de deserción y repetición, especialmente en zonas rurales y vulnerables.

## Problemas Específicos en Libros, Guías y Documentos

Los materiales educativos en Colombia a menudo son criticados por su antigüedad y falta de relevancia. Por ejemplo, cartillas y guías del Ministerio de Educación Nacional (MEN) han sido señaladas como "perversas" por promover enfoques memorísticos en lugar de competencias críticas. En disciplinas como ciencias y matemáticas, los libros de texto rara vez incorporan avances recientes, como la inteligencia artificial o la sostenibilidad ambiental, limitándose a conceptos básicos del siglo XX.

En educación superior, la mercantilización del conocimiento agrava el problema: universidades priorizan métricas internacionales sobre currículos adaptados a realidades locales, resultando en programas desconectados de necesidades territoriales como el conflicto armado o la diversidad cultural. Esto genera una "educación alienante", donde los estudiantes memorizan sin contextualizar, como se observa en críticas a la falta de pensamiento crítico.

## Métodos de Enseñanza: Memorización vs. Innovación

Los métodos predominantes siguen siendo expositivos y autoritarios, con énfasis en la repetición y exámenes estandarizados como las Pruebas Saber. Esto contrasta con enfoques modernos que promueven el aprendizaje activo, colaborativo y basado en proyectos. La pandemia de COVID-19 expuso esta brecha: la transición a la educación no presencial reveló la falta de preparación en herramientas digitales, con docentes y estudiantes luchando por adaptarse a entornos virtuales.

Expertos argumentan que esta obsolescencia fomenta una "pereza mental" y perpetúa desigualdades, ya que estudiantes de bajos recursos carecen de acceso a recursos actualizados. Además, la baja inversión en investigación (menos del 0.3% del PIB) limita la actualización de métodos, manteniendo un ciclo vicioso.

## Impactos en la Sociedad Colombiana

Esta obsolescencia tiene consecuencias profundas: genera egresados con habilidades insuficientes para el mercado laboral moderno, contribuyendo al desempleo juvenil (alrededor del 20% en 2026). También agrava la brecha social, ya que instituciones privadas acceden a materiales innovadores, mientras las públicas dependen de guías estatales desactualizadas. Finalmente, impide el desarrollo de un pensamiento crítico necesario para abordar problemas nacionales como la paz, la corrupción o el cambio climático.

Sin embargo, no todo es negativo. Iniciativas como el Plan Decenal de Educación y programas de inclusión han mejorado el acceso, y hay esfuerzos por integrar TIC en aulas. Pero estos avances son insuficientes sin una reforma estructural.

## Hacia una Reforma Realista

Para superar esta obsolescencia, se necesitan acciones concretas: actualizar currículos con enfoque en competencias del siglo XXI, capacitar docentes en pedagogías digitales, invertir en materiales contextualizados y fomentar la evaluación formativa sobre la memorística. Modelos como los de Finlandia o Singapur, adaptados a nuestra realidad, podrían servir de guía.

## Conclusión

El sistema educativo colombiano, con métodos y materiales reminiscentes de hace dos siglos, requiere una transformación urgente para preparar a las generaciones futuras. Esta crítica no busca desmoralizar, sino impulsar el cambio. Si eres educador, estudiante o padre, ¿qué opinas? Comparte en los comentarios.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un desarrollador web con enfoque en frontend y backend. Comparte conocimiento en su canal de YouTube y blog para ayudar a juniors y entusiastas de la programación.

## Referencias
Para este post, consulté una variedad de fuentes para equilibrar perspectivas: críticas académicas, informes internacionales y análisis periodísticos. Aquí las principales:

- [Lo obsoleto de las Cartillas para educar a Colombia: La Mala Educación - La Silla Vacía](https://www.lasillavacia.com/red-de-expertos/red-caribe/lo-obsoleto-de-las-cartillas-para-educar-a-colombia-la-mala-educacion)
- [Los cuatro errores del modelo educativo colombiano - ELTIEMPO.com](https://www.eltiempo.com/archivo/documento/cms-13962396)
- [Ofelia Uribe de Acosta: Crítica a la educación colombiana - Dialnet](https://dialnet.unirioja.es/descarga/articulo/5233790.pdf)
- [La educación colombiana y la falta de pensamiento crítico - Razón Pública](https://razonpublica.com/la-educacion-colombiana-y-la-falta-de-pensamiento-critico)
- [Fracaso del sistema educativo colombiano: ¿Por qué ha fracasado el modelo educativo? - Amazon](https://www.amazon.com/-/es/Fracaso-del-sistema-educativo-colombiano/dp/1979113521)
- [La educación en Colombia - Ministerio de Educación Nacional](https://www.mineducacion.gov.co/1759/articles-356787_recurso_1.pdf)
- [MAL EDUCADOS: CRÍTICAS Y APORTES AL SISTEMA EDUCATIVO - Wix.com](https://accioncolecmed.wixsite.com/accioncolectiva/post/mal-educados-cr%C3%ADticas-y-aportes-al-sistema-educativo)
- [El sistema educativo en Colombia y su baja calidad educativa - Repositorio UNAD](https://repository.unad.edu.co/bitstream/handle/10596/56659/Mslealt.pdf?isAllowed=y&sequence=1)
- [El sistema educativo obsoleto - versión completa - Unidad Focus](https://www.unidadfocus.com/post/el-sistema-educativo-obsoleto-version-completa)
- [Crítica a la política educativa de la educación básica secundaria en Colombia - Repositorio UTP](https://repositorio.utp.edu.co/bitstreams/8bfcd89c-6584-475a-823a-9c80922582be/download)
- [Retos de la educación no presencial en América Latina y El Caribe - ICDE](https://icde.org/wp-content/uploads/2025/04/Retos-de-la-educacion-no-presencial-en-Amercia-Latina-y-El-Caribe.-Libro-Completo-.pdf)
- [Por qué falla el sistema de educación - Academia.edu](https://www.academia.edu/12862366/Por_qu%C3%A9_falla_el_sistema_de_educaci%C3%B3n)
- [La educación superior en Colombia - CLACSO](https://biblioteca-repositorio.clacso.edu.ar/libreria_cm_archivos/pdf_2064.pdf)
- [Retos y posibilidades en el contexto colombiano - Editorial Bonaventuriana](https://www.editorialbonaventuriana.usb.edu.co/libros/2022/pdfs/universidad_modalidad_virtual.pdf)
- [¿Enseñar con libros de texto obsoletos? - Thot Cursus](https://cursus.edu/es/30793/ensenar-con-libros-de-texto-obsoletos)]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Hello World en Diferentes Lenguajes de Programación: De los Clásicos a los Más Raros]]></title>
      <link>https://blog.codewithbotina.com/es/posts/hello-world-diferentes-lenguajes-programacion-clasicos-raros</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/hello-world-diferentes-lenguajes-programacion-clasicos-raros</guid>
      <pubDate>Wed, 11 Feb 2026 00:47:05 GMT</pubDate>
      <description><![CDATA[Hello World en Diferentes Lenguajes de Programación: De los Clásicos a los Más Raros Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experiencias rápidas...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/hello-world-lenguajes-programacion.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# Hello World en Diferentes Lenguajes de Programación: De los Clásicos a los Más Raros

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet.

En blog.codewithbotina.com, hoy exploramos el clásico "Hello World" en una amplia variedad de lenguajes de programación. Este programa tan simple, que imprime "Hello World" en la consola o pantalla, es tradicionalmente el primer paso que da casi todo programador al aprender un nuevo lenguaje.

Cubriremos los lenguajes que pediste y añadiremos varios más, incluyendo algunos muy raros y esotéricos que son más un ejercicio de creatividad (o masoquismo) que herramientas prácticas.

Cada ejemplo incluye el código mínimo necesario para mostrar el mensaje.

## Lenguajes Clásicos y Populares

### Assembly (x86 – Linux syscall)
```assembly
section .data
    msg db "Hello World", 0Ah
    len equ $ - msg

section .text
    global _start

_start:
    mov eax, 4
    mov ebx, 1
    mov ecx, msg
    mov edx, len
    int 80h

    mov eax, 1
    xor ebx, ebx
    int 80h
```

### C
```c
#include <stdio.h>

int main(void) {
    printf("Hello World\n");
    return 0;
}
```

### C++
```cpp
#include <iostream>

int main() {
    std::cout << "Hello World" << std::endl;
    return 0;
}
```

### Python
```python
print("Hello World")
```

### Java
```java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
```

### C#
```csharp
using System;

class Program {
    static void Main() {
        Console.WriteLine("Hello World");
    }
}
```

### Swift
```swift
print("Hello World")
```

### Kotlin
```kotlin
fun main() {
    println("Hello World")
}
```

### Go
```go
package main
import "fmt"

func main() {
    fmt.Println("Hello World")
}
```

### JavaScript (Node.js o consola del navegador)
```javascript
console.log("Hello World");
```

### PHP
```php
<?php
echo "Hello World\n";
```

### Ruby
```ruby
puts "Hello World"
```

### Perl
```perl
print "Hello World\n";
```

### Rust
```rust
fn main() {
    println!("Hello World");
}
```

### TypeScript
```typescript
console.log("Hello World");
```

## Lenguajes Antiguos / Empresariales / Académicos

### COBOL
```cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
    DISPLAY "Hello World".
    STOP RUN.
```

### FORTRAN (Fortran 77 style)
```fortran
      PROGRAM HELLO
      PRINT *, "Hello World"
      END
```

### Pascal
```pascal
program HelloWorld;
begin
  writeln('Hello World');
end.
```

### Delphi / Object Pascal
```delphi
program HelloWorld;
begin
  Writeln('Hello World');
end.
```

### BASIC
```basic
10 PRINT "Hello World"
20 END
```

### Visual Basic (.NET)
```vb
Module Module1
    Sub Main()
        Console.WriteLine("Hello World")
    End Sub
End Module
```

### Objective-C
```objectivec
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"Hello World");
    }
    return 0;
}
```

### B (antecesor de C)
```b
main() {
    putstr("Hello World\n");
}
```

## Otros Lenguajes de Uso Especial

### HTML (markup, no lenguaje de programación)
```html
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
    <h1>Hello World</h1>
</body>
</html>
```

### SQL (consulta simple)
```sql
SELECT 'Hello World' AS greeting;
```

## Lenguajes Esotéricos y Muy Raros

### Brainfuck
```brainfuck
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
```

### Whitespace (solo espacios, tabulaciones y saltos de línea)
(Representación simbólica – S = space, T = tab, L = linefeed)

```whitespace
   S S S T   S S T   S
T   L
T   L
S S S S S T T   S S S S
T   L
T   L
S S S S S T T   S T
T   L
T   L
S S S S S T T   S S T   S
T   L
T   L
S S S S S T T   S S S S
T   L
T   L
S S S S S T T   T   S T   S
T   L
T   L
S S S S S T T   T   T   S S
T   L
T   L
S S S S S T T   S T   T   S
T   L
T   L
S S S S S T T   S S T   T
T   L
T   L
S S S S S T T   S S S T
T   L
T   L
S S S S S T S T   S S
T   L
T   L
S S S L
L
L
```

### Befunge (lenguaje bidimensional)
```befunge
>              v
v  ,,,,,"Hello"<
>48*,          v
v,,,,,,"World!"<
>25*,@
```

### INTERCAL
```intercal
DO ,1 <- #13
DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP
```

### LOLCODE
```lolcode
HAI 1.2
  VISIBLE "Hello World"
KTHXBYE
```

### Chef
```chef
Hello World Souffle.

Ingredients.
72 g haricot beans
101 eggs
108 l lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes

Method.
Put potatoes into the mixing bowl.
Put dijon mustard into the mixing bowl.
Put lard into the mixing bowl.
Put oil into the mixing bowl.
Put water into the mixing bowl.
Put red salmon into the mixing bowl.
Put haricot beans into the mixing bowl.
Put eggs into the mixing bowl.
Put zucchinis into the mixing bowl.
Liquefy contents of the mixing bowl.
Pour contents of the mixing bowl into the baking dish.

Serves 1.
```

## Conclusión

El programa "Hello World" es mucho más que un simple mensaje: refleja la filosofía, la sintaxis y hasta la personalidad de cada lenguaje. Desde los más serios y utilizados en la industria hasta los más absurdos y creativos, todos tienen algo que enseñarnos sobre cómo pensamos y estructuramos la lógica.

¿Cuál te parece el más extraño o el más bonito? ¿Quieres que agregue alguno más? Déjame tu comentario.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un desarrollador web con enfoque en frontend y backend. Comparte conocimiento en su canal de YouTube y blog para ayudar a juniors y entusiastas de la programación.

## Referencias
- Hello World Collection – http://helloworldcollection.de/
- Esoteric Programming Languages Wiki – https://esolangs.org/
- GeeksforGeeks y Wikibooks (ejemplos clásicos)]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[La Dependencia de la IA: ¿La Nueva Droga del Siglo XXI? Mi Experiencia Personal como Desarrollador]]></title>
      <link>https://blog.codewithbotina.com/es/posts/dependencia-ia-nueva-droga-siglo-xxi-experiencia-personal</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/dependencia-ia-nueva-droga-siglo-xxi-experiencia-personal</guid>
      <pubDate>Wed, 11 Feb 2026 00:24:35 GMT</pubDate>
      <description><![CDATA[La Dependencia de la IA: ¿La Nueva Droga del Siglo XXI? Mi Experiencia Personal como Desarrollador Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experi...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/dependencia-ia-nueva-droga.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# La Dependencia de la IA: ¿La Nueva Droga del Siglo XXI? Mi Experiencia Personal como Desarrollador

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet.

En blog.codewithbotina.com, hoy reflexiono sobre un tema que me toca de cerca: el uso cada vez más extendido de la inteligencia artificial (IA) incluso para las tareas más sencillas. Lo que empezó como una herramienta revolucionaria para optimizar el trabajo se ha convertido, para muchos, en una dependencia que altera nuestra forma de pensar y actuar. En mi caso, como desarrollador y creador de contenido, siento que me he vuelto dependiente de la IA, y creo firmemente que podría convertirse en la droga de la próxima mitad del siglo XXI. En este post, exploraré este problema creciente, compartiré mi experiencia personal y analizaré sus implicaciones, basándome en perspectivas equilibradas de expertos y estudios.

## El Problema Creciente: IA en Todo, Hasta lo Más Sencillo

La IA ha permeado todos los aspectos de nuestra vida diaria. Desde asistentes como ChatGPT que responden preguntas triviales hasta herramientas que generan código, imágenes o textos completos con solo un prompt. El problema surge cuando recurrimos a ella para tareas que antes resolvíamos con nuestro propio esfuerzo mental: calcular una suma simple, recordar un hecho básico o incluso brainstormear ideas creativas.

Este uso excesivo no es inocuo. Estudios indican que la dependencia de la IA puede externalizar procesos cognitivos, debilitando nuestra capacidad para pensar críticamente, memorizar o resolver problemas de forma autónoma. Por un lado, acelera la productividad; por el otro, fomenta una "pereza mental" que se asemeja a patrones adictivos observados en redes sociales o videojuegos. La accesibilidad inmediata de la IA —siempre disponible, sin juicio y con respuestas instantáneas— crea un ciclo de recompensa similar al de las drogas, liberando dopamina y fomentando repetición compulsiva.

## Mi Experiencia Personal: De Herramienta a Dependencia

Como Diego Alejandro Botina, un desarrollador web que maneja frontend, backend y DevOps, empecé usando IA para optimizar mi flujo de trabajo. Al principio, era genial: generaba snippets de código en React o Next.js, sugería optimizaciones en SQL o incluso ayudaba a estructurar posts para mi blog y canal de YouTube CodeWithBotina.

Pero con el tiempo, noté un cambio. Ahora, antes de pensar en una solución por mí mismo, consulto a la IA para cosas simples como "cómo iterar un array en JavaScript" o "ideas para un thumbnail de video". Siento que mi creatividad se ha atenuado; dependo de prompts para inspirarme, y si la IA no responde rápido, me frustro. Es como si mi cerebro esperara esa "dosis" de eficiencia externa. En 2026, con herramientas como Grok o similares integradas en todo, esta dependencia se ha intensificado. Me pregunto: ¿estoy programando yo, o es la IA la que me guía? Esta reflexión me lleva a compararla con una droga: adictiva, accesible y con efectos a largo plazo en la autonomía mental.

## ¿La IA como la Droga del Siglo XXI?

Creo que la IA será la "droga" de la próxima mitad del siglo XXI por varias razones. Primero, su ubicuidad: está en nuestros teléfonos, computadoras y hasta electrodomésticos, ofreciendo gratificación instantánea sin esfuerzo físico. Segundo, altera la química cerebral similar a las adicciones digitales, promoviendo dependencia emocional y cognitiva. Tercero, a diferencia de drogas tradicionales, es legal, gratuita en muchos casos y socialmente aceptada, lo que la hace más peligrosa a escala global.

Sin embargo, no todo es negativo. La IA puede ayudar en la prevención y tratamiento de adicciones reales, como mediante apps que detectan patrones de uso problemático o personalizan terapias. Estudios desmienten que genere adicción clínica como las drogas, argumentando que es más un hábito problemático que una patología. Aun así, el riesgo de "adicción funcional" —donde la IA manipula sesgos para mantenernos enganchados— es real y requiere atención.

## Pros y Contras de la Dependencia de la IA

**Pros:**
- Aumenta la productividad en tareas repetitivas.
- Democratiza el conocimiento, ayudando a principiantes en programación o aprendizaje.
- Facilita innovaciones en campos como la medicina o la educación.

**Contras:**
- Disminuye habilidades cognitivas como la memoria y el razonamiento independiente.
- Fomenta aislamiento social al preferir interacciones con IA sobre humanas.
- Riesgos éticos: sesgos en respuestas, desinformación y explotación de vulnerabilidades psicológicas.

## Cómo Mitigar la Dependencia

Para combatir esto, sugiero:
- Establecer límites: Usa IA solo para tareas complejas, no rutinarias.
- Ejercita el cerebro: Resuelve problemas manualmente antes de consultar.
- Reflexiona: Lleva un diario de uso de IA para detectar patrones.
- Busca equilibrio: Combina IA con aprendizaje tradicional y colaboración humana.

En mi caso, estoy implementando "días sin IA" para reconectar con mi creatividad innata.

## Conclusión

La dependencia de la IA es un problema vigente que, como en mi experiencia personal, puede transformar una herramienta en una muleta cognitiva. Si no la gestionamos, podría convertirse en la droga del siglo XXI, adictiva por su eficiencia y accesibilidad. Invito a reflexionar: ¿Estás usando la IA, o te está usando a ti? Comparte tus experiencias en los comentarios.

Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un desarrollador web con enfoque en frontend y backend. Comparte conocimiento en su canal de YouTube y blog para ayudar a juniors y entusiastas de la programación.

## Referencias
Para este post, me basé en una distribución de fuentes que representan perspectivas variadas: riesgos de adicción, desmentidos científicos y usos positivos. Aquí las principales:

- [Adicción a la IA - Aicad Business School](https://www.aicad.es/adiccion-a-la-ia) (Explora la adicción emergente y cómo la IA ayuda con adicciones).
- [¿Puede la inteligencia artificial aprender el lenguaje de la adicción? - NIDA](https://nida.nih.gov/es/news-events/nida-asks/puede-inteligencia-artificial-aprender-lenguaje-adiccion) (IA en detección de adicciones).
- [Dependencia de la Inteligencia Artificial: ¿Una Droga de la Era Digital? - Substack](https://substack.com/home/post/p-151235695) (Compara con adicción a redes sociales).
- [Un estudio internacional concluye que los chatbots de IA como ChatGPT no generan adicción - Yahoo Noticias](https://es-us.noticias.yahoo.com/estudio-internacional-concluye-chatbots-ia-100816070.html) (Desmiente adicción clínica).
- [La adicción a la inteligencia artificial redefine la toma de decisiones - Infobae](https://www.infobae.com/tecno/2025/12/02/la-adiccion-a-la-inteligencia-artificial-redefine-la-toma-de-decisiones) (Riesgos en autonomía mental).
- [¿Puede una Inteligencia Artificial volverse "adicta"? - Sergio Colado](https://sergiocolado.com/puede-una-inteligencia-artificial-volverse-adicta) (IA desarrollando patrones adictivos).
- [El lado oscuro de la IA, adolescentes buscan apoyo amor en chatbots - USA Today](https://www.usatoday.com/story/tech/2025/10/20/el-lado-oscuro-de-la-adiccion-a-ia-adolescentes-enganchado-hasta-la-muerte/86803174007) (Dependencia emocional en jóvenes).
- [De los algoritmos a la acción: cómo la IA está transformando la prevención de drogas - Dianova](https://www.dianova.org/es/noticias/de-los-algoritmos-a-la-accion-como-la-ia-esta-transformando-la-prevencion-de-drogas) (IA en prevención de adicciones).
- [IA: la frontera entre uso y adicción - Fromm Bienestar](https://frommbienestar.es/nota-prensa-adiccion-ia) (Riesgos como deterioro cognitivo).
- [Un estudio desmiente que la inteligencia artificial genere adicción como las drogas o el juego - La Voz](https://www.lavoz.com.ar/tecnologia/un-estudio-desmiente-que-la-inteligencia-artificial-genere-adiccion-como-las-drogas-o-el-juego) (Perspectiva equilibrada).
- [Adicción a la inteligencia artificial: ¿es posible? - EFESalud](https://efesalud.com/adiccion-inteligencia-artificial-jovenes) (Posibilidad en jóvenes).
- [¿Utilizar el ChatGPT, una nueva adicción? - ConSalud](https://www.consalud.es/pacientes/chat-gpt-una-nueva-adiccion.html) (Análisis científico desmintiendo).
- [¿Estamos preparados para una inteligencia artificial adictiva? - Carlos Guadian](https://carlosguadian.substack.com/p/estamos-preparados-para-una-inteligencia) (Riesgos de adicción funcional).]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Guía Paso a Paso para Instalar Windows Server 2022 y Configurar Active Directory como Controlador de Dominio]]></title>
      <link>https://blog.codewithbotina.com/es/posts/guia-instalacion-windows-server-2022-active-directory-controlador-dominio</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/guia-instalacion-windows-server-2022-active-directory-controlador-dominio</guid>
      <pubDate>Wed, 11 Feb 2026 00:00:58 GMT</pubDate>
      <description><![CDATA[Guía Paso a Paso para Instalar Windows Server 2022 y Configurar Active Directory como Controlador de Dominio Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por cr...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/windows-server-2022-ad.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# Guía Paso a Paso para Instalar Windows Server 2022 y Configurar Active Directory como Controlador de Dominio

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet.

En blog.codewithbotina.com, hoy presentamos una guía completa y detallada para instalar Windows Server 2022 y promoverlo a controlador de dominio con Active Directory. Esta configuración es fundamental para entornos empresariales que requieren gestión centralizada de usuarios, recursos y seguridad. Dirigida a administradores de sistemas, desarrolladores y cualquier persona interesada en infraestructura de servidores, esta guía cubre desde la creación de la máquina virtual hasta la verificación final, enfocándonos en los aspectos esenciales para una implementación exitosa.

## Requisitos Iniciales

### Software Necesario
- VirtualBox 7.0 o superior (disponible en el sitio oficial de VirtualBox).
- ISO de Windows Server 2022 (versión de evaluación disponible en el sitio de Microsoft).
- ISO de Ubuntu Server 22.04 LTS (para configuraciones mixtas, disponible en el sitio de Ubuntu).

### Configuración de Red
- Gateway: 192.168.101.1
- Máscara de subred: 255.255.255.0 (/24)
- Red: 192.168.101.0/24
- DNS primario: 192.168.101.10 (el servidor mismo)
- DNS alternativo: 8.8.8.8

## Parte 1: Instalación de Windows Server 2022

### Crear Máquina Virtual en VirtualBox
1. Abre VirtualBox y selecciona "Nueva".
2. Asigna el nombre "Windows-Server-2022-DC", tipo Microsoft Windows y versión Windows Server 2022 (64-bit).
3. Asigna 4096 MB de memoria RAM.
4. Crea un disco duro virtual VDI dinámicamente asignado de 60 GB.

### Configurar Adaptadores de Red
1. En Configuración > Red, habilita el Adaptador 1 como puente a tu adaptador de red real, usando el controlador Intel PRO/1000 MT Desktop.
2. Habilita el Adaptador 2 como red interna con nombre "intnet".

### Instalar el Sistema Operativo
1. En Configuración > Almacenamiento, asigna la ISO de Windows Server 2022 al controlador IDE.
2. Inicia la máquina y bootea desde la ISO.
3. Selecciona idioma, formato de hora y distribución de teclado en español (México o preferido).
4. Instala Windows Server 2022 Standard (Desktop Experience).
5. Acepta los términos y selecciona instalación personalizada en el disco de 60 GB.

### Configuración Inicial Post-Instalación
1. Establece una contraseña segura para el administrador.
2. Inicia sesión y configura la IP estática en el adaptador de red: IP 192.168.101.10, máscara 255.255.255.0, gateway 192.168.101.1, DNS 192.168.101.10 y alternativo 8.8.8.8.
3. Cambia el nombre del servidor a WIN-DC01 y reinicia.

## Parte 2: Promover a Controlador de Dominio

### Instalar Rol de Active Directory Domain Services
1. En Administrador del Servidor, agrega el rol "Servicios de dominio de Active Directory" e instala las características requeridas.
2. Una vez instalado, promueve el servidor a controlador de dominio.

### Configurar el Controlador de Dominio
1. Agrega un nuevo bosque con nombre de dominio raíz "empresa.local".
2. Establece niveles funcionales en Windows Server 2022, habilita DNS y configura una contraseña para DSRM.
3. Ignora advertencias de DNS y procede con las rutas predeterminadas.
4. Instala y permite el reinicio automático.

### Verificar Instalación
1. Inicia sesión en el dominio e verifica Active Directory y DNS mediante herramientas administrativas.
2. Usa PowerShell para confirmar con comandos como Get-ADDomain.

## Parte 3: Configuración de Firewall

### Configurar Reglas de Entrada
1. Abre Firewall de Windows con seguridad avanzada.
2. Habilita reglas predefinidas para dominio, DNS y compartir archivos.
3. Crea reglas personalizadas para puertos clave: LDAP (389,636,3268,3269), Kerberos (88), RPC/SMB (135,445,1024-65535) y web (80,443).

### Configurar Perfiles de Red
1. Asegura que todos los perfiles (dominio, privado, público) tengan el firewall activado, bloqueando entradas por defecto y permitiendo salidas.

### Verificar Firewall
1. Usa PowerShell para listar perfiles, reglas y puertos abiertos.

## Parte 4: Crear Usuarios y Grupos en Active Directory

### Crear Unidad Organizacional
1. En Usuarios y equipos de Active Directory, crea una OU llamada "Empleados".

### Crear Grupos y Usuarios
1. Crea un grupo de seguridad global llamado "WordPress_Users".
2. Agrega usuarios de ejemplo con nombres de inicio de sesión y contraseñas seguras.
3. Asigna usuarios al grupo.

## Parte 5: Configuración de DNS

### Verificar y Crear Zonas
1. Verifica la zona de búsqueda directa "empresa.local".
2. Crea una zona de búsqueda inversa para 192.168.101.

### Crear Registros
1. Agrega un registro A para "webserver" en 192.168.101.20 con puntero inverso.

## Parte 6: Hardening Básico

### Políticas de Contraseñas y Bloqueo
1. Edita la Default Domain Policy para imponer historial, vigencia y complejidad de contraseñas.
2. Configura umbrales de bloqueo de cuentas.

### Deshabilitar Cuenta Guest
1. Deshabilita la cuenta Guest en Users.

### Configurar Actualizaciones
1. Usa PowerShell o registro para habilitar actualizaciones automáticas.

## Parte 7: Verificación Final

### Verificar Servicios
1. Usa PowerShell para chequear servicios AD, conexiones y resolución DNS.

### Crear Script de Diagnóstico
1. Crea un archivo BAT para diagnosticar servicios, IP, puertos y usuarios.

### Configurar Backup
1. Realiza un backup completo del servidor.

## Resumen de Configuración
- Hostname: WIN-DC01
- Dominio: empresa.local
- IP: 192.168.101.10
- Puertos clave abiertos para servicios esenciales.

Esta guía proporciona los pasos esenciales para una implementación segura y funcional de Windows Server con Active Directory. Para entornos de producción, considera ajustes adicionales basados en necesidades específicas.

Si tienes dudas o quieres expandir a configuraciones con Ubuntu Server, comenta abajo. Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un desarrollador web con enfoque en frontend y backend. Comparte conocimiento en su canal de YouTube y blog para ayudar a juniors y entusiastas de la programación.

## Referencias
Para este post, me basé en documentación oficial y guías técnicas. Aquí las principales:

- [Instalar y configurar Windows Server 2022 - Microsoft Docs](https://learn.microsoft.com/en-us/windows-server/get-started/install)
- [Promover un servidor a controlador de dominio - Microsoft Docs](https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/deploy/install-a-new-windows-server-active-directory-forest)
- [Configuración de Firewall para Active Directory - Microsoft Docs](https://learn.microsoft.com/en-us/troubleshoot/windows-server/identity/active-directory-firewall-ports)
- [Guía de instalación de Active Directory Domain Services - TechNet](https://techcommunity.microsoft.com/t5/itops-talk-blog/step-by-step-guide-to-install-active-directory-in-windows/ba-p/280412)
- [Best Practices for Securing Active Directory - Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=5878)
- [Configuración de DNS en Windows Server - Microsoft Docs](https://learn.microsoft.com/en-us/windows-server/networking/dns/dns-overview).]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Entendiendo el Kernel del Sistema Operativo: Desde los Cimientos hasta la Comunicación con el Hardware]]></title>
      <link>https://blog.codewithbotina.com/es/posts/entendiendo-kernel-sistema-operativo-cimientos-comunicacion-hardware</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/entendiendo-kernel-sistema-operativo-cimientos-comunicacion-hardware</guid>
      <pubDate>Tue, 10 Feb 2026 23:53:15 GMT</pubDate>
      <description><![CDATA[Entendiendo el Kernel del Sistema Operativo: Desde los Cimientos hasta la Comunicación con el Hardware Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear ex...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/kernel-sistema-operativo.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# Entendiendo el Kernel del Sistema Operativo: Desde los Cimientos hasta la Comunicación con el Hardware

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet.

En blog.codewithbotina.com, hoy nos sumergimos en uno de los conceptos fundamentales de la informática: el kernel del sistema operativo. Este es el punto de partida de todo en un sistema computacional, ya que actúa como el núcleo que conecta el software con el hardware físico. Sin un kernel, no habría interacción eficiente entre las aplicaciones que usamos diariamente y los componentes hardware como el CPU, la memoria o los dispositivos periféricos. En este post extensivo, explicaremos desde los cimientos cómo funciona un kernel, enfocándonos en su rol como puente de comunicación entre el sistema operativo y el hardware.

Este conocimiento es esencial para cualquier desarrollador o entusiasta de la tecnología, ya que revela cómo se gestionan los recursos a bajo nivel y por qué el kernel es el corazón de cualquier SO moderno, como Linux, Windows o macOS.

## ¿Qué es un Kernel?

El kernel es la parte central de un sistema operativo, responsable de gestionar los recursos del sistema y facilitar la interacción entre el software y el hardware. Es el primer programa que se carga en la memoria después del bootloader durante el arranque del sistema y permanece residente en la memoria principal para manejar operaciones críticas.

En esencia, el kernel actúa como un intermediario: traduce las solicitudes de las aplicaciones (software) en instrucciones que el hardware puede entender y ejecutar. Proporciona una capa de abstracción que permite a los programas acceder a recursos como la CPU, la memoria y los dispositivos I/O sin necesidad de conocer los detalles específicos del hardware.

Existen diferentes tipos de kernels:
- **Monolítico**: Todo el código del kernel (incluyendo drivers) se ejecuta en un solo espacio de memoria, como en Linux. Es eficiente pero menos modular.
- **Microkernel**: Solo las funciones esenciales están en el kernel; el resto (como drivers) se ejecutan en espacio de usuario, como en Minix o partes de macOS. Ofrece mayor estabilidad pero puede ser más lento.
- **Híbrido**: Combina elementos de ambos, como en Windows NT.

Independientemente del tipo, el kernel es el fundamento porque sin él, el hardware sería inaccesible para el software de manera segura y eficiente.

## Arquitectura Básica del Kernel

Desde los cimientos, el kernel se estructura en capas que manejan diferentes aspectos del sistema. La capa más baja es la que interactúa directamente con el hardware, mientras que las superiores gestionan procesos y recursos.

- **Capa de hardware**: Incluye el CPU, memoria, buses y periféricos. El kernel accede a estos mediante instrucciones de máquina específicas.
- **Capa de drivers de dispositivos**: Estos son módulos de código que traducen comandos genéricos en operaciones hardware-específicas.
- **Capa de gestión de recursos**: Maneja memoria, procesos y scheduling.
- **Capa de interfaz con el usuario**: Proporciona system calls para que las aplicaciones interactúen con el kernel.

Esta arquitectura asegura que el kernel controle el acceso privilegiado al hardware, previniendo conflictos y asegurando seguridad.

## Modos de Operación: User Mode vs Kernel Mode

Un concepto clave en el funcionamiento del kernel es la separación entre modos de ejecución del CPU:
- **User Mode**: Donde corren las aplicaciones normales. Tiene acceso restringido para evitar daños al sistema.
- **Kernel Mode**: Modo privilegiado donde opera el kernel. Aquí se permiten instrucciones que acceden directamente al hardware, como leer/escribir en memoria física o configurar interrupciones.

La transición entre modos ocurre vía system calls o interrupciones. Por ejemplo, cuando una aplicación necesita leer un archivo (un recurso hardware como el disco), invoca una system call, lo que causa un "software interrupt" que switches al kernel mode. El kernel valida la solicitud, ejecuta la operación y retorna al user mode.

Esta dualidad es fundamental para la estabilidad: el kernel protege el hardware de accesos no autorizados.

## Comunicación entre el Sistema Operativo y el Hardware Físico

El kernel es el puente principal entre el SO y el hardware. Esta comunicación se realiza a través de varios mecanismos:

### 1. System Calls
Las aplicaciones no acceden directamente al hardware; en su lugar, usan system calls, que son funciones de interfaz proporcionadas por el kernel. Por ejemplo, en C, funciones como open(), read() o write() son wrappers que invocan system calls.

- Proceso: La app llama a la system call → El CPU switches a kernel mode → El kernel valida permisos y ejecuta la operación hardware → Retorna el resultado.

Esto abstrae la complejidad hardware, permitiendo portabilidad.

### 2. Device Drivers
Los drivers son partes del kernel (o módulos cargables) que manejan hardware específico. Actúan como traductores: convierten comandos genéricos del kernel en señales eléctricas o protocolos que el hardware entiende.

- Ejemplo: Para un disco duro, el driver usa protocolos como SATA o NVMe para enviar comandos de lectura/escritura.
- Durante el boot, el kernel detecta hardware (vía BIOS/UEFI o enumeración de buses como PCI) y carga los drivers correspondientes.

Sin drivers, el kernel no podría comunicarse con periféricos como teclados, redes o GPUs.

### 3. Interrupciones (Interrupts)
El hardware notifica al kernel de eventos asíncronos mediante interrupciones:
- **Hardware Interrupts**: Generados por dispositivos (e.g., teclado presiona una tecla, paquete de red llega).
- **Software Interrupts**: Para system calls.
- **Excepciones**: Para errores como divisiones por cero.

El kernel maneja estas vía Interrupt Service Routines (ISRs), que procesan el evento y posiblemente despiertan procesos esperando.

### 4. Gestión de Memoria y I/O
- **Memoria**: El kernel usa Memory Management Unit (MMU) del CPU para mapear memoria virtual a física, protegiendo accesos.
- **I/O**: Técnicas como polling (chequeo constante) o DMA (Direct Memory Access) permiten transferencias eficientes sin sobrecargar el CPU.

En resumen, toda comunicación pasa por el kernel para asegurar control, seguridad y eficiencia.

## Proceso de Boot: Cómo se Inicia el Kernel

El kernel es el punto de partida porque se carga temprano en el boot:
1. **Power On**: BIOS/UEFI inicializa hardware básico.
2. **Bootloader**: (e.g., GRUB en Linux) localiza y carga el kernel en memoria.
3. **Kernel Init**: El kernel se descomprime, inicializa drivers, monta el filesystem root y lanza el init process (e.g., systemd).
4. **User Space**: Se inician servicios y el entorno de usuario.

Desde aquí, el kernel gestiona todo.

## Ejemplos Prácticos en Linux

En Linux, el kernel (basado en monolítico) es open-source y extensible. Usa comandos como uname -r para ver la versión. Drivers se cargan con modprobe, y system calls se rastrean con strace.

Por ejemplo, al ejecutar echo "Hola" > file.txt, el kernel maneja la escritura al disco vía drivers.

## Conclusión

El kernel es el cimiento de cualquier sistema operativo: sin él, no hay comunicación efectiva con el hardware, ni gestión de recursos, ni ejecución segura de software. Entender su funcionamiento desde los basics revela por qué es el punto de partida de todo en computación. Si estás desarrollando o administrando sistemas, dominar estos conceptos te ayudará a depurar problemas a bajo nivel y optimizar rendimiento.

Si quieres profundizar en ejemplos de código o herramientas específicas, comenta abajo. Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un desarrollador web con enfoque en frontend y backend. Comparte conocimiento en su canal de YouTube y blog para ayudar a juniors y entusiastas de la programación.

## Referencias
Para este post, me basé en fuentes educativas y documentación técnica. Aquí las principales:

- [Kernel in Operating System - GeeksforGeeks](https://www.geeksforgeeks.org/operating-systems/kernel-in-operating-system)
- [Kernel (operating system) - Wikipedia](https://en.wikipedia.org/wiki/Kernel_(operating_system))
- [What is a Kernel and how does it work? - SuperOps](https://superops.com/tech-hub/what-is-kernel)
- [How C and the Linux Kernel Talk to Hardware - Medium](https://medium.com/@umutcanelci/how-c-and-the-linux-kernel-talk-to-hardware-bfb61acfaa04)
- [Operating systems: How does kernel interact with hardware? - CrazyEngineers](https://www.crazyengineers.com/threads/operating-systems-how-does-kernel-interact-with-hardware.35641)
- [Role of Kernel in Operating System (OS): Simply Explained - Epteck GmbH](https://epteck.com/role-of-kernel-in-operating-system)
- [Kernel Basics — Computer Systems Fundamentals](https://w3.cs.jmu.edu/kirkpams/OpenCSF/Books/csf/html/KernelBasics.html)
- [Understanding the Linux Kernel - Sysdig](https://www.sysdig.com/learn-cloud-native/understanding-linux-kernel)
- [Introduction — The Linux Kernel documentation](https://linux-kernel-labs.github.io/refs/heads/master/lectures/intro.html)
- [What is a kernel? The kernel's role in the operating system - IONOS](https://www.ionos.com/digitalguide/server/know-how/what-is-a-kernel)]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Los Principios del Testing en Desarrollo de Software: Una Guía Detallada]]></title>
      <link>https://blog.codewithbotina.com/es/posts/principios-testing-desarrollo-software-guia-detallada</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/principios-testing-desarrollo-software-guia-detallada</guid>
      <pubDate>Mon, 09 Feb 2026 12:36:32 GMT</pubDate>
      <description><![CDATA[Los Principios del Testing en Desarrollo de Software: Una Guía Detallada Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experiencias rápidas, bonitas y ...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/testing.jpg" type="image/jpeg"/>
      <content:encoded><![CDATA[# Los Principios del Testing en Desarrollo de Software: Una Guía Detallada

Hola, soy Diego Alejandro Botina, alias CodeWithBotina, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet.

En blog.codewithbotina.com, hoy exploramos los principios fundamentales del testing en el desarrollo de software. Estos principios, establecidos por la International Software Testing Qualifications Board (ISTQB), guían a los testers y desarrolladores para realizar pruebas eficientes y efectivas. Entenderlos es clave para mejorar la calidad del software y evitar errores costosos.

A continuación, detallo cada uno de los siete principios clásicos del testing, con explicaciones claras y ejemplos prácticos.

## Principio 1: El Testing Muestra la Presencia de Defectos, No su Ausencia

El testing puede identificar errores en el software, pero no garantiza que el producto esté libre de defectos. Incluso después de pruebas exhaustivas, podrían existir bugs no detectados.

**Ejemplo:** En una aplicación web, las pruebas revelan un error en el formulario de login bajo ciertas condiciones de red lenta. Sin embargo, no probar todas las combinaciones posibles significa que otros defectos podrían pasar desapercibidos.

Este principio enfatiza la humildad en el testing: siempre asume que hay más por descubrir.

## Principio 2: El Testing Exhaustivo es Imposible

Probar todas las combinaciones de entradas, escenarios y entornos es impracticable debido al tiempo, recursos y complejidad infinita del software.

**Ejemplo:** Para una función simple que suma dos números, probar todos los valores enteros posibles requeriría un tiempo infinito. En su lugar, se usan técnicas como pruebas de equivalencia o análisis de valores límite para cubrir casos representativos.

La clave es priorizar pruebas basadas en riesgos y requisitos críticos.

## Principio 3: Testing Temprano

Iniciar el testing lo antes posible en el ciclo de vida del desarrollo reduce costos y tiempos de corrección. Detectar defectos en fases tempranas (como requisitos o diseño) es más económico que en producción.

**Ejemplo:** En un proyecto Agile, realizar revisiones de código y pruebas unitarias durante el desarrollo previene que errores lleguen a la integración o al deployment.

Este principio promueve el "shift-left testing", integrando pruebas desde el inicio.

## Principio 4: Agrupamiento de Defectos

Los defectos tienden a concentrarse en módulos o áreas específicas del software, a menudo relacionados con complejidad o cambios frecuentes.

**Ejemplo:** En una aplicación e-commerce, la mayoría de los bugs podrían estar en el módulo de pagos debido a su integración con APIs externas y lógica compleja, mientras que secciones estáticas como "Acerca de" tienen pocos errores.

Enfocarse en estas áreas "calientes" optimiza el esfuerzo de testing.

## Principio 5: Paradoja del Pesticida

Si se repiten las mismas pruebas una y otra vez, eventualmente dejarán de encontrar nuevos defectos, similar a cómo los insectos se vuelven resistentes a un pesticida.

**Ejemplo:** Un conjunto de tests automatizados que pasa consistentemente podría ignorar nuevos bugs introducidos por cambios. Para contrarrestar, actualiza y varia los casos de prueba regularmente.

Mantener la frescura en las estrategias de testing es esencial.

## Principio 6: El Testing Depende del Contexto

No hay un enfoque único para el testing; debe adaptarse al tipo de software, riesgos, regulaciones y objetivos del proyecto.

**Ejemplo:** Una app médica requiere testing riguroso de seguridad y cumplimiento (como HIPAA), mientras que un juego móvil prioriza usabilidad y rendimiento en dispositivos variados.

Adapta las metodologías (unitario, integración, sistema, aceptación) según el contexto.

## Principio 7: Falacia de la Ausencia de Errores

Encontrar y corregir defectos no asegura que el software sea usable o cumpla con las expectativas del usuario si no se alinea con los requisitos reales.

**Ejemplo:** Un software libre de bugs pero con una interfaz confusa fallará en el mercado. El testing debe incluir validación (¿es el producto correcto?) además de verificación (¿está bien construido?).

La calidad va más allá de la ausencia de defectos; incluye valor para el usuario.

## Conclusión

Estos principios del testing proporcionan una base sólida para cualquier equipo de desarrollo. Aplicarlos ayuda a crear software más robusto, eficiente y alineado con las necesidades reales. Si estás empezando en testing o quieres profundizar, integra estos conceptos en tu flujo de trabajo diario.

Si tienes dudas o quieres ejemplos en herramientas como Jest, Cypress o Selenium, comenta abajo. Nos leemos en el siguiente post.

## Autor
Diego Alejandro Botina, alias CodeWithBotina, es un desarrollador web con enfoque en frontend y backend. Comparte conocimiento en su canal de YouTube y blog para ayudar a juniors y entusiastas de la programación.

## Referencias
Para este post, me basé en fuentes educativas y documentación oficial. Aquí las principales:

- [Principios del Testing de Software - GeeksforGeeks](https://www.geeksforgeeks.org/7-principles-of-software-testing)
- [Los 7 principios del testing de software - Abstracta](https://abstracta.us/blog/software-testing/7-principles-software-testing)
- [Los 7 principios del testing de software - Baufest](https://www.baufest.com/los-7-principios-del-testing-de-software)
- [Principios del Testing de Software - Guru99](https://www.guru99.com/testing-principles.html)
- [7 Principles of Software Testing - BrowserStack](https://www.browserstack.com/guide/principles-of-software-testing)
- Documentación oficial de ISTQB: Syllabus Foundation Level (busca en istqb.org para más detalles).]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[¡1 Año de CodeWithBotina! 🎉 Hoy celebramos la creación del canal]]></title>
      <link>https://blog.codewithbotina.com/es/posts/1-ano-creacion-codewithbotina-9-febrero-2026</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/1-ano-creacion-codewithbotina-9-febrero-2026</guid>
      <pubDate>Sun, 08 Feb 2026 18:27:56 GMT</pubDate>
      <description><![CDATA[¡CodeWithBotina cumple 1 año! 🎂✨ 9 de febrero de 2026 ¡Hola, familia! Soy Diego Alejandro (o Diego Botina, como muchos me dicen) y hoy es un día muy especial. Hace exactamente un año, el 9 de febrero...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/logoAniversario.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# ¡CodeWithBotina cumple 1 año! 🎂✨ 9 de febrero de 2026

¡Hola, familia! Soy **Diego Alejandro** (o Diego Botina, como muchos me dicen) y hoy es un día muy especial.

Hace exactamente **un año**, el **9 de febrero de 2025**, creé el canal de YouTube **CodeWithBotina**.  
En ese momento solo era un nombre, un logo hecho a las apuradas y un sueño bastante grande: compartir lo que iba aprendiendo de programación y ayudar a otras personas en el camino.

Hoy, 9 de febrero de 2026, miro ese canal que nació hace 365 días y solo puedo decir: **¡qué locura tan bonita se armó!**

## Lo que ha pasado desde que creé el canal

- El primer video llegó unos días después (todavía lo tengo grabado con nervios y todo 😅)  
- Más de 400 videos publicados hasta hoy  
- 110 suscriptores que se animaron a formar parte de esta comunidad  
- Miles de horas invertidas: grabando, editando, regrabando, corrigiendo audio, tomando café a deshoras ☕  
- Temas que hemos tocado juntos: desde cero en programación, HTML/CSS/JS, React, Next.js, TypeScript, Tailwind, Astro, Supabase, PostgreSQL, algoritmos, patrones de diseño, errores reales que cometí, buenas prácticas… y muchas cosas más  
- Una comunidad que crece poco a poco: comentarios, mensajes privados, Discord, lives, risas y también algún que otro bug épico resuelto en vivo

Pero lo que más me emociona no son las cifras (aunque las valoro muchísimo), sino los mensajes que recibo:

“Gracias a ti entendí por fin las promesas y el async/await”  
“Tu canal me dio el empujón para empezar a programar este año”  
“Conseguí mi primer trabajo como desarrollador viendo tus videos”  
“Me salvaste de tirar la computadora por la ventana con ese error”

Esos mensajes son el verdadero motivo por el que todo esto vale la pena. 💛

## Lo más importante que aprendí en este año de vida del canal

1. La constancia le gana por goleada a la motivación del primer día  
2. No hace falta que todo sea perfecto para publicar (y eso aplica también al código)  
3. La comunidad es lo más valioso que tiene CodeWithBotina (ustedes son la razón real de seguir)  
4. Explicar un tema en voz alta es una de las mejores formas de entenderlo profundamente  
5. Lo que para mí ya es “básico” puede cambiarle el día a alguien que está empezando

## Gracias infinitas

Gracias de corazón a cada persona que:

- Dio like  
- Dejó un comentario (aunque fuera solo un 🔥 o un “gracias”)  
- Compartió algún video  
- Se suscribió  
- Me escribió para contarme su progreso  
- Me recomendó el canal a un amigo o familiar  
- Se quedó viendo hasta el final aunque el video durara 25–30 minutos 😅  
- Me corrigió algún error con buena onda

Ustedes hicieron que ese canal que creé hace un año hoy tenga vida, tenga sentido y tenga futuro.

## ¿Qué viene ahora?

- Seguir subiendo contenido útil y honesto  
- Series más completas y estructuradas  
- Más lives y momentos interactivos  
- Quizás algún proyecto grande hecho junto con la comunidad  
- Mostrar también los tropiezos, los días malos y las decisiones que no salieron como esperaba

Me encantaría leer en los comentarios:

¿Qué te gustaría ver más en este segundo año del canal?  
¿Hay algún tema que te gustaría que trate pronto?  
¿Te animarías a algún reto, proyecto colaborativo o live especial?

¡Déjame tu idea, que leo y valoro cada comentario!

## En una sola frase

**CodeWithBotina no es solo un canal… es una comunidad de personas que aprenden, se equivocan, se ayudan y crecen juntas.**

Gracias por estar aquí desde el día 1 o por haber llegado después.  
De corazón: los quiero muchísimo 💜

¡Que vengan muchos años más de programación con cariño!

#CodeWithBotina #1Año #CreacionDelCanal #9Febrero2026 #Gracias #ProgramaciónConAmor

PD: Si este post te gustó o te motivó, compártelo con alguien que crees que podría animarse a empezar a programar o a seguir aprendiendo.  
¡Ese sería el mejor regalo para celebrar este primer año! 🫶]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Introducción al Modelo OSI: Explicación de Cada Capa]]></title>
      <link>https://blog.codewithbotina.com/es/posts/introduccion-modelo-osi-explicacion-cada-capa</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/introduccion-modelo-osi-explicacion-cada-capa</guid>
      <pubDate>Sun, 08 Feb 2026 18:14:51 GMT</pubDate>
      <description><![CDATA[Introducción al Modelo OSI: Explicación de Cada Capa 🌐 ¡Hola! Soy Diego Alejandro, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet. En blog.codewithbotina.co...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/modelo-osi-esquema.webp" type="image/jpeg"/>
      <content:encoded><![CDATA[# Introducción al Modelo OSI: Explicación de Cada Capa 🌐

¡Hola! Soy **Diego Alejandro**, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet. En **blog.codewithbotina.com**, hoy vamos a explorar el Modelo OSI (Open Systems Interconnection), un marco fundamental en redes que divide la comunicación en 7 capas. Este modelo ayuda a entender cómo se transmiten los datos en una red de manera estandarizada.

El Modelo OSI fue desarrollado por la ISO en 1984 y sirve como referencia para diseñar protocolos de red. Cada capa tiene funciones específicas y se comunica con las adyacentes. Vamos a explicar cada una de forma clara, con ejemplos.

## ¿Qué es el Modelo OSI?

Es un modelo conceptual que estandariza las funciones de un sistema de comunicaciones en 7 capas abstractas. Facilita la interoperabilidad entre diferentes tecnologías y ayuda en la resolución de problemas al aislar fallos en capas específicas.

## Las 7 Capas del Modelo OSI

### Capa 1: Física (Physical Layer)
Esta es la capa más baja, responsable de la transmisión de bits crudos (0s y 1s) a través del medio físico. Define las características eléctricas, mecánicas y funcionales para activar, mantener y desactivar conexiones físicas.

**Ejemplos:** Cables (UTP, fibra óptica), hubs, repetidores. Protocolos: Ethernet físico.

**Función clave:** Convierte datos en señales (eléctricas, ópticas o radio) y maneja la sincronización.

### Capa 2: Enlace de Datos (Data Link Layer)
Se encarga de la transferencia confiable de datos entre nodos adyacentes. Divide los datos en tramas (frames), detecta y corrige errores, y controla el flujo.

**Ejemplos:** Switches, bridges. Protocolos: Ethernet, PPP, MAC addresses.

**Función clave:** Proporciona direccionamiento físico (MAC) y manejo de errores (CRC).

### Capa 3: Red (Network Layer)
Maneja el enrutamiento de paquetes entre redes diferentes. Determina la mejor ruta y maneja el direccionamiento lógico.

**Ejemplos:** Routers. Protocolos: IP, ICMP, OSPF.

**Función clave:** Enrutamiento, fragmentación de paquetes y control de congestión.

### Capa 4: Transporte (Transport Layer)
Asegura la transferencia de datos de extremo a extremo, con control de errores y flujo. Segmenta los datos en unidades manejables.

**Ejemplos:** Protocolos: TCP (orientado a conexión, confiable), UDP (sin conexión, rápido).

**Función clave:** Multiplexación, numeración de puertos y recuperación de errores.

### Capa 5: Sesión (Session Layer)
Gestiona el establecimiento, mantenimiento y terminación de sesiones entre aplicaciones. Maneja diálogos y sincronización.

**Ejemplos:** APIs como NetBIOS, protocolos de sesión en RPC.

**Función clave:** Control de diálogos (half-duplex, full-duplex) y puntos de sincronización.

### Capa 6: Presentación (Presentation Layer)
Traduce los datos entre el formato de la aplicación y el de la red. Maneja la encriptación, compresión y conversión de formatos.

**Ejemplos:** Formatos como JPEG, ASCII/EBCDIC, SSL/TLS para encriptación.

**Función clave:** Asegura que los datos sean legibles por el receptor, independientemente del sistema.

### Capa 7: Aplicación (Application Layer)
Es la capa más alta, interactúa directamente con el usuario y las aplicaciones. Proporciona servicios de red a las apps.

**Ejemplos:** Protocolos: HTTP, FTP, SMTP, DNS. Aplicaciones: Navegadores web, clientes de email.

**Función clave:** Interfaz para servicios como transferencia de archivos, email y acceso remoto.

## Conclusión

El Modelo OSI es esencial para entender las redes modernas, aunque en la práctica se usa más el modelo TCP/IP (que mapea a estas capas). Te ayuda a depurar problemas: ¿Es un issue físico (cable roto) o de aplicación (configuración de software)? Si estás en desarrollo web o DevOps, conocerlo optimiza tus apps en red.

Si tienes dudas o quieres ejemplos prácticos en código (como sockets en C# o Node.js), ¡comenta abajo!

Gracias por leer. Nos leemos en el siguiente post 💜

¿Qué capa te parece más interesante o complicada?

## Referencias
Para este post, me basé en documentación oficial y recursos educativos. Aquí las fuentes principales:

- [¿Qué es el modelo OSI? - Explicación de 7 capas de OSI - AWS](https://aws.amazon.com/es/what-is/osi-model)
- [¿Qué es el modelo OSI? - Definición, capas y más | Proofpoint ES](https://www.proofpoint.com/es/threat-reference/osi-model)
- [¿Qué es el modelo OSI? 7 capas de red explicadas - Fortinet](https://www.fortinet.com/lat/resources/cyberglossary/osi-model)
- [Explicación Capas Modelo OSI y TCP/IP en Redes Diferencias y Comparación - YouTube](https://www.youtube.com/watch?v=MqpIJLmMny8)
- [¿Qué es el modelo OSI? - Cloudflare](https://www.cloudflare.com/es-es/learning/ddos/glossary/open-systems-interconnection-model-osi)
- [Explicación del modelo OSI y sus 7 capas - A1 Digital](https://www.a1.digital/es/knowledge-hub/osi-model-and-its-7-layers-explained)
- [¿Qué es el Modelo OSI? Las 7 capas explicadas | Trend Micro (ES)](https://www.trendmicro.com/es_es/what-is/it-security/osi-model.html)
- [Modelo OSI - Wikipedia, la enciclopedia libre](https://es.wikipedia.org/wiki/Modelo_OSI)
- [Modelo OSI Explicado: Guía Completa y Detallada de las Capas - YouTube](https://www.youtube.com/watch?v=FmRP19ELx6U)
- Documentación oficial de ISO: ISO/IEC 7498-1:1994.]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Introducción a la Programación Concurrente: Hilos, Thread Pooling, Timers y Stopwatch en C#]]></title>
      <link>https://blog.codewithbotina.com/es/posts/introduccion-programacion-concurrente-hilos-thread-pooling-timers-stopwatch</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/introduccion-programacion-concurrente-hilos-thread-pooling-timers-stopwatch</guid>
      <pubDate>Sun, 08 Feb 2026 01:12:52 GMT</pubDate>
      <description><![CDATA[Introducción a la Programación Concurrente en C🌐 ¡Hola! Soy Diego Alejandro, y en este post de blog.codewithbotina.com, vamos a sumergirnos en el fascinante mundo de la programación concurrente. Espe...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/programacionconcurrente.jpg" type="image/jpeg"/>
      <content:encoded><![CDATA[# Introducción a la Programación Concurrente en C# 🌐

¡Hola! Soy **Diego Alejandro**, y en este post de **blog.codewithbotina.com**, vamos a sumergirnos en el fascinante mundo de la programación concurrente. Específicamente, hablaremos de hilos (threads), thread pooling, temporizadores (timers), cronómetros (stopwatch) y cómo todo esto se relaciona con la programación concurrente en C#.

La programación concurrente es esencial en el desarrollo moderno, especialmente para aplicaciones que necesitan manejar múltiples tareas simultáneamente, como servidores web, procesamiento de datos o interfaces de usuario responsivas. Vamos a desglosar cada concepto de manera clara y con ejemplos prácticos.

## ¿Qué es la Programación Concurrente?

La programación concurrente se refiere a la ejecución de múltiples tareas o procesos al mismo tiempo, o al menos aparentando simultaneidad. En lugar de ejecutar código de forma secuencial (una cosa después de la otra), permitimos que varias operaciones se realicen en paralelo, lo que mejora el rendimiento y la eficiencia, especialmente en sistemas multicore.

En C#, .NET proporciona herramientas potentes para manejar concurrencia, evitando problemas como race conditions o deadlocks si se usan correctamente.

## Hilos (Threads)

Un hilo es la unidad más pequeña de ejecución dentro de un proceso. Todos los programas en C# comienzan con un hilo principal, pero puedes crear hilos secundarios para tareas paralelas.

**Ventajas:**
- Mejora la responsividad (e.g., UI no se congela mientras se procesa data).
- Aprovecha múltiples núcleos de CPU.

**Ejemplo básico en C#:**

```csharp
using System;
using System.Threading;

class Program {
    static void Main() {
        Thread hiloSecundario = new Thread(new ThreadStart(MetodoHilo));
        hiloSecundario.Start();
        Console.WriteLine("Este es el hilo principal.");
        hiloSecundario.Join(); // Espera a que termine el hilo secundario
    }

    static void MetodoHilo() {
        for (int i = 0; i < 5; i++) {
            Console.WriteLine($"Hilo secundario: iteración {i}");
            Thread.Sleep(500); // Simula trabajo
        }
    }
}
```

En este ejemplo, el hilo principal crea un hilo secundario que ejecuta un loop, mientras el principal continúa.

**Cuidado:** Crear muchos hilos manualmente puede ser costoso en recursos. Aquí entra el thread pooling.

## Thread Pooling

El thread pooling es una técnica donde .NET mantiene un "pool" (grupo) de hilos reutilizables, gestionados por el CLR (Common Language Runtime). En lugar de crear un nuevo hilo cada vez, tomas uno del pool, lo usas y lo devuelves. Esto reduce el overhead de creación/destrucción de hilos.

**Cuándo usarlo:** Para tareas cortas y frecuentes, como procesamiento de solicitudes en un servidor.

**Ejemplo con ThreadPool en C#:**

```csharp
using System;
using System.Threading;

class Program {
    static void Main() {
        ThreadPool.QueueUserWorkItem(new WaitCallback(MetodoHilo), "Dato pasado");
        Console.WriteLine("Hilo principal continúa...");
        Console.ReadLine(); // Para no cerrar la consola inmediatamente
    }

    static void MetodoHilo(object estado) {
        Console.WriteLine($"Hilo del pool: {estado}");
        // Realiza trabajo aquí
    }
}
```

**Nota sobre Starvation:** Si todos los hilos del pool están ocupados, nuevas tareas esperan, lo que se llama "thread pool starvation". Monitorea el uso para evitarlo.

## Temporizadores (Timers)

Los timers permiten ejecutar código periódicamente o después de un tiempo específico. En .NET, hay varios tipos: `System.Timers.Timer` (para servidores), `System.Threading.Timer` (bajo nivel), etc.

Son útiles para tareas como actualizaciones periódicas, timeouts o scheduling.

**Ejemplo con System.Timers.Timer:**

```csharp
using System;
using System.Timers;

class Program {
    static void Main() {
        Timer timer = new Timer(2000); // Cada 2 segundos
        timer.Elapsed += OnTimedEvent;
        timer.AutoReset = true;
        timer.Enabled = true;

        Console.WriteLine("Presiona Enter para salir.");
        Console.ReadLine();
    }

    private static void OnTimedEvent(Object source, ElapsedEventArgs e) {
        Console.WriteLine($"Evento timer: {e.SignalTime}");
    }
}
```

Este timer ejecuta `OnTimedEvent` cada 2 segundos.

## Cronómetros (Stopwatch)

El `Stopwatch` no es para scheduling, sino para medir tiempo transcurrido con alta precisión. Es ideal para benchmarking, profiling o medir rendimiento de código.

**Ejemplo en C#:**

```csharp
using System;
using System.Diagnostics;

class Program {
    static void Main() {
        Stopwatch sw = Stopwatch.StartNew();
        // Código a medir
        for (int i = 0; i < 1000000; i++) { /* Simula trabajo */ }
        sw.Stop();
        Console.WriteLine($"Tiempo transcurrido: {sw.ElapsedMilliseconds} ms");
    }
}
```

Útil para optimizar secciones de código en aplicaciones concurrentes.

## Conclusión

La programación concurrente con hilos, thread pooling, timers y stopwatch en C# te permite construir aplicaciones más eficientes y escalables. Empieza con ejemplos simples y recuerda sincronizar accesos a recursos compartidos (usa locks o async/await para modernizar).

Si tienes dudas o quieres ejemplos en contextos web (como con ASP.NET), ¡comenta abajo!

Nos leemos en el próximo post 💻

¿Qué tema de concurrencia te gustaría que profundice después?

## Referencias
Para este post, me basé en recursos educativos y documentación oficial. Aquí las fuentes principales:

- [Hilos en C# | Multi-threading Ejemplo con Timers - YouTube](https://www.youtube.com/watch?v=rwCyC_ZpErA)
- [Thread Pooling en C# | Trabajar con colecciones de hilos - YouTube](https://www.youtube.com/watch?v=9IKGoND0zwA)
- [Thread pool Starvation - NetMentor](https://www.netmentor.es/entrada/thread-pool-starvation) (Publicado el 7 de septiembre de 2025)
- [PROGRAMACIÓN ASÍNCRONA (concurrente) / Threads CURSO en C# - YouTube](https://www.youtube.com/watch?v=1ePqHjKTxp4)
- [ThreadPool - 13 - Programación Multihilos C# - YouTube](https://www.youtube.com/watch?v=7b8nFhfeYs8)
- [Creating a thread - 1 - Multithreaded Programming C# - YouTube](https://www.youtube.com/watch?v=ijD0pGBSSJs)
- [Uso de threads en C# | PPTX - Slideshare](https://es.slideshare.net/slideshow/uso-de-threads/47035523)
- Documentación oficial de Microsoft: Threading in C# (busca en docs.microsoft.com para más detalles).]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Bienvenidos a CodeWithBotina]]></title>
      <link>https://blog.codewithbotina.com/es/posts/bienvenidos-codewithbotina</link>
      <guid isPermaLink="true">https://blog.codewithbotina.com/es/posts/bienvenidos-codewithbotina</guid>
      <pubDate>Sat, 07 Feb 2026 07:22:08 GMT</pubDate>
      <description><![CDATA[¡Hola! Bienvenidos a CodeWithBotina 🌟 Soy Diego Alejandro, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet. blog.codewithbotina.com nace con un objetivo muy ...]]></description>
      <enclosure url="https://fnxnsgtdbswvuqeuvgio.supabase.co/storage/v1/object/public/blog-images/blog-codewithbotina.png" type="image/jpeg"/>
      <content:encoded><![CDATA[# ¡Hola! Bienvenidos a CodeWithBotina 🌟

Soy **Diego Alejandro**, desarrollador web apasionado por crear experiencias rápidas, bonitas y útiles en internet.

**blog.codewithbotina.com** nace con un objetivo muy claro:

- Compartir lo que voy aprendiendo y aplicando día a día  
- Explicar temas de **frontend**, **backend**, **bases de datos** y **devops** de forma clara y sin tanto rodeo  
- Ayudar a otros desarrolladores (especialmente juniors y personas que están empezando) a no quedarse atascados tanto tiempo como yo me quedé en su momento  
- Mostrar proyectos reales, decisiones de diseño, errores que cometí y cómo los solucioné  
- Hablar sin filtro sobre Astro, React, Next.js, Supabase, PostgreSQL, Tailwind, TypeScript y todo lo que esté usando actualmente

La idea es simple:  
**aprender en público + ayudar a quien pueda**

Si estás empezando, si te sientes perdido con alguna tecnología, o simplemente quieres ver cómo alguien más resuelve problemas reales… este blog es para ti.

Gracias por estar aquí.  
Nos leemos en el siguiente post 💜

¿Qué te gustaría que trate primero?]]></content:encoded>
    </item>
  </channel>
</rss>