Páginas

martes, 28 de julio de 2026

El impacto de la IA en el desarrollo de software

(Resumen de la Conferencia O'Reilly)

El desarrollo de software está viviendo un cambio de paradigma histórico. La conferencia organizada por O’Reilly, presentada por Tim O’Reilly y Addy Osmani, reunió a una destacada selección de gurús, directores técnicos, programadores y académicos para analizar cómo la Inteligencia Artificial está interactuando con ellos y transformándolo todo.

A continuación, resumimos las ideas clave compartidas por cada uno de los ponentes:

1. Vibe coding: más experimentación, más cuidado

  • Por Kent Beck: Introdujo el concepto de "el genio" para referirse a la IA que ayuda a escribir código. Basándose en su postulado de desarrollo software de las 3X, Beck señala que la IA es sumamente buena en la fase de Explore (exploración), pero todavía no rinde igual de bien en las fases de Expand (expansión) y Extract (extracción).

2. Desarrolladores junior e IA generativa

  • Por Camille Fournier, Avi Flomban y Maxi Ferreira: Coinciden unánimemente en que la IA mejora significativamente la productividad general. Sin embargo, lanzaron una advertencia: la IA es una herramienta mucho mejor para desarrolladores senior que para juniors, y subrayaron la necesidad absoluta de controlar rigurosamente todo lo que la IA genera.

3. Mi flujo de trabajo codificando con LLM

  • Por Harper Reed: Compartió sus flujos de trabajo actuales distinguiendo entre código nuevo y código heredado. Destacó que ahora las especificaciones deben ser extremadamente detalladas para acotar bien el problema. Además, propuso un método original para la fase de gestación de un nuevo proyecto: iniciar una conversación con la IA donde esta le haga preguntas de "sí o no" y una a una. Con esto se consigue, según Reed, que la IA haga un trabajo más ajustado a los requerimientos del humano que la está manejando. Para el código heredado, aconseja suministrar contexto e ir haciendo cambios incrementales, sabiendo que en el desarrollo con IA es normal tener que echarse hacia atrás muchas veces.

4. Herramientas, agentes y creatividad

  • Entrevista a Jay Parikh (por Gergely Orosz): Jay Parikh, vicepresidente de coreAi en Microsoft, enfatizó que la IA debe usarse en todas las fases del desarrollo y que es vital estar al tanto de los avances de los demás. Sostiene que, al desarrollar más rápido, los programadores liberan tiempo para la creatividad. Entre sus propuestas clave destaca la necesidad de reemplazar las herramientas de desarrollo actuales y enfocarse en la creación de agentes específicos para tareas concretas.

5. El papel de los desarrolladores en el mundo asistido por IA

  • Por Birguitta Bockeler: Aportó una dosis de realidad analizando las cosas que pueden salir mal. Comparó la IA con una "máquina tragamonedas" donde a veces pones monedas y no obtienes nada. Expuso fallos comunes como que a la IA le cuesta reconocer cuando no sabe algo, o errores técnicos como un fallo de Out Of Memory porque la IA ejecutaba npm install repetidamente en un proceso para instalar el mismo paquete, o que al pedirle juntar dos funciones las junte pero no actualice el código de las pruebas. También advirtió que, cuando hay un error, la IA tiende a querer modificar la función, aunque el error esté en el código de la prueba.

6. Cómo los agentes están reviviendo la web programable

  • Por Angie Jones: Subrayó la enorme importancia de MCP (Model Context Protocol). Explicó que este estándar abierto, creado por Anthropic, permite conectar los modelos de IA de forma segura con bases de datos, archivos y aplicaciones externas sin la necesidad de programar integraciones desde cero.

7. Inclinando la generación de código de IA hacia su lado

  • Por Craig McLuckie: Explicó el concepto de los "modelos frontera" (los modelos más avanzados de IA). McLuckie argumenta que, en lugar de diseñar modelos masivos que intenten encargarse de todo, la ventaja competitiva está en desarrollar soluciones horizontales para problemas específicos, tales como la orquestación, el middleware (seguridad, contexto) o el acceso a recursos mediante protocolos como MCP o A2A (agent to agent).

8. Ingeniería de Prompts como centro de las tareas de desarrollo

  • Por Patti O’Callaghan: Propuso que la ingeniería de prompts sea el eje central del flujo de trabajo. Para ello, recomienda darle siempre contexto a la IA sobre la arquitectura de software que se está utilizando, proporcionarle ejemplos de código reales y diseñar prompts muy específicos dependiendo de la tarea exacta que se realice (implementación, debug o refactorización).

9. Ingeniería de IA

  • Por Chip Huyen y Shawn Wang (Swix): Ambos defendieron la emergencia de esta nueva disciplina de ingeniería. Chip Huyen utilizó el ejemplo de un robot repartidor de comida para ilustrar por qué las IA deben comunicarse entre sí (el robot necesita interactuar con los semáforos de la ciudad para solicitar luz verde y cruzar). Por su parte, Swix propuso que la estrategia correcta debe ser centrarse primero en construir buenos agentes individuales y, posteriormente, ver cómo comunicarlos entre ellos.

10. Ensenando a los desarrolladores a pensar con IA

  • Por Andrew Stellman: Hizo una distinción crítica: una cosa es "preguntar a la IA para obtener respuestas" y otra muy diferente es "trabajar con la IA para resolver problemas". Para esta segunda vía (la correcta), Stellman establece un proceso claro: dar contexto, investigar y enmarcar el problema, para luego aplicar refinamiento y un pensamiento crítico riguroso.

11. Lecciones aprendidas con Vibe Coding y Vibe Debugging

  • Por Iyanuoluwa Ajao: Detalló el drástico contraste entre el desarrollo tradicional y el actual asistido por IA. En el pasado, el flujo implicaba investigar manualmente en Stack Overflow, resolver y documentar la solución por cuenta propia. Ahora, utilizando herramientas como la extensión de Windsurf para Chrome por ejemplo, la IA da soporte a todas estas actividades, transformando el rol del desarrollador principalmente en un revisor de los resultados.

12. Diseñando IA para que realice acciones autónomas

  • Por Nicola Balic: Sentenció que en el futuro "ya no escribiremos código, lo cultivaremos". Defiende que todo ha cambiado de forma radical, recomendando herramientas de sandbox como Daytona. Balic propone una visión sugerente: que en la conversación "susurrada" entre humanos y máquinas emergerá una nueva clase de inteligencia colectiva nacida de la resonancia entre ambos.

13. Asegura la IA: Protegiendo a la oveja eléctrica

  • Por Brett Smith: Manifestó su preocupación por la seguridad del código cuando se delega la escritura a la IA. Para mitigar estos riesgos, propuso iniciativas concretas como asegurar directamente el código generado, utilizar la herramienta SAIF (Secure AI Framework) para proteger las pipelines y apoyarse en Mitre Atlas, una base de conocimiento pública que recopila las tácticas y técnicas de ataque reales dirigidas contra sistemas de IA.

14. Productividad basada en evidencia científica

  • Por Chelsea Tray: Aportó rigor académico al debate presentando varios papers e investigaciones científicas que evalúan el impacto real de la IA, entre ellos estudios sistemáticos sobre la generación de código con LLMs, las limitaciones de contexto (Lost in the middle) y experimentos de campo sobre los efectos de la IA generativa en el trabajo altamente cualificado. Los papers recomendados son:
    • A systematic evaluation of large language models for generating programming code
    • Lost in the middle: How language models use long context
    • Evaluating the performance of Large Language Models in competitive programming: A multi-year, multi-grade analysis
    • The effects of generative AI on high skilled work. Evidence from three field experiments with software developers

15. Ingeniería de evaluación: El fin del “machine learning” como lo conocemos

  • Por Lili Jiang: Explicó mediante tres casos reales cómo la ingeniería de Machine Learning se está transformando en Eval Engineering. En este nuevo escenario, las métricas fijas se convierten en algoritmos de evaluación dinámicos y complejos. Jiang propone un cambio fundamental de enfoque: en lugar de revisar estáticamente el rendimiento frente a un Ground Truth inamovible, la clave actual de los proyectos de IA radica en analizar de forma continua el Delta (la variación o cambio respecto a un estado anterior).

Conclusiones generales

La conferencia de O'Reilly deja claro que la Inteligencia Artificial no viene a reemplazar al desarrollador, sino a redefinir por completo su profesión. Al analizar las ponencias en su conjunto, se pueden extraer cuatro grandes conclusiones sobre el futuro de la industria:

  1. El desarrollador como director y revisor: La escritura mecánica de líneas de código está pasando a un segundo plano. El nuevo rol del programador exige un fuerte pensamiento crítico, habilidades de diseño arquitectónico y una gran capacidad de abstracción. La IA "ejecuta", pero el humano debe "orquestar" y, sobre todo, auditar los resultados para evitar fallos de lógica o de diseño.
  2. De herramientas aisladas a ecosistemas de agentes: El futuro técnico no pertenece a un único modelo masivo y aislado, sino a redes de agentes especializados y conectados. El auge de protocolos abiertos como MCP demuestra que la industria se está moviendo hacia un estándar donde las IA puedan comunicarse de forma segura con bases de datos, aplicaciones y entre ellas mismas para resolver tareas complejas de forma autónoma.
  3. La brecha de experiencia (Senior vs. Junior): Existe una preocupación transversal sobre la formación de los nuevos talentos. Dado que la IA es una aliada excelente para optimizar la productividad de perfiles experimentados, pero un riesgo si se usa sin supervisión, la industria se enfrenta al reto de enseñar a los desarrolladores junior a pensar con la IA y no simplemente a delegar en ella de forma ciega.
  4. Una nueva metodología: Seguridad y Evaluación Continua: El desarrollo moderno asistido por IA requiere nuevas disciplinas de control. Frameworks de seguridad como SAIF o metodologías como la Ingeniería de Evaluación (Eval Engineering) se vuelven indispensables. Ya no basta con que el código funcione una vez; los equipos deben implementar sistemas automatizados para medir constantemente el impacto de los cambios (Delta) y blindar el software ante vulnerabilidades específicas de los modelos de lenguaje.

En definitiva, la programación ya no se trata de dominar la sintaxis de un lenguaje, sino de saber comunicar el contexto, estructurar los problemas y evaluar rigurosamente los resultados generados por la máquina.

domingo, 12 de julio de 2026

Guía para empezar a hacer SEO: Estrategias, Factores Clave y Herramientas Esenciales

El posicionamiento en motores de búsqueda (SEO Search Engine Optimization) es el conjunto de técnicas que se aplican a una página web para mejorar su visibilidad en los resultados de buscadores como Google u otros. Entender cómo funciona es la diferencia entre tener un sitio invisible o una web exitosa.


1. Posicionamiento gratuito vs. Posicionamiento de pago

Para diseñar una estrategia digital, primero debes entender las dos formas principales de aparecer en Google:

  • SEO (Posicionamiento gratuito / Orgánico): Consiste en optimizar tu web de forma natural para que los algoritmos de Google la consideren la mejor respuesta. No pagas por cada clic recibido, requiere tiempo, esfuerzo y constancia para ver resultados duraderos.
  • SEM (Posicionamiento de pago / PPC): Consiste en pagar directamente a plataformas como Google Ads para aparecer de inmediato en las secciones de anuncios (parte superior o inferior de la página). Consigues tráfico instantáneo, pero este desaparece en el momento en que dejas de pagar por los clics.

2. Tipos de SEO: Relevancia (On-Page) y Autoridad (Off-Page)

El algoritmo de Google evalúa cientos de factores que se dividen principalmente en dos grandes pilares:

  • SEO On-Page (Relevancia): Todo lo que haces dentro de tu propia página web para demostrarle a Google que tu contenido responde perfectamente a la intención de búsqueda del usuario.
  • SEO Off-Page (Autoridad): Todo lo que ocurre fuera de tu página web para demostrarle a Google que tu sitio es confiable y de prestigio, principalmente a través de enlaces desde otras webs.

3. SEO On-Page: Los 8 factores críticos que debes cuidar

Para que tu web sea atractiva tanto para los usuarios como para los motores de búsqueda, debes optimizar los siguientes elementos internos:

  1. URL bien estructurada y descriptiva: Facilita la navegación de los usuarios y permite a los motores de búsqueda entender de qué trata la página desde el primer vistazo. Una URL amigable es clave para la usabilidad y el SEO.
  2. Elección del dominio: Elegir un dominio relevante y fácil de recordar es importante para la marca y la visibilidad en línea. Un dominio relacionado con las palabras clave de tu nicho puede mejorar el SEO.
  3. Velocidad de carga de las páginas: Es un factor crucial para estar bien posicionado en el buscador de Google. Para garantizar rapidez, comprender las diferencias entre los posibles tipos de hosting es fundamental.
  4. Estructura del sitio web: Influye directamente en la navegación, la usabilidad y la indexación por parte de los motores de búsqueda. Una estructura clara, jerárquica y organizada es fundamental.
  5. Usabilidad web: Es clave para retener visitantes y convertirlos en clientes. Los motores de búsqueda también premian la usabilidad, ya que proporciona una mejor experiencia al usuario.
  6. Optimización de imágenes: Las imágenes son esenciales en un sitio web, pero deben estar optimizadas para no ralentizar la carga de la página. Esto es importante para la experiencia del usuario y el SEO.
  7. Etiquetas Meta Title y Meta Description: Estas etiquetas son cruciales para dar una breve descripción y un título atractivo a cada página. Influyen directamente en la decisión de los usuarios de hacer clic en los resultados de búsqueda (CTR Click-Through Rate).
  8. Uso adecuado de encabezados (H1, H2, H3...): No solo mejora la legibilidad del contenido para el usuario, sino que también ayuda a los motores de búsqueda a entender la jerarquía y estructura del contenido.

4. SEO Off-Page y Aspectos Técnicos Avanzados

El SEO va más allá del contenido visible. Para consolidar la autoridad y salud técnica de tu sitio, debes gestionar estos aspectos:

El alojamiento web (Hosting)

Para garantizar el rendimiento y la estabilidad de tu sitio, debes buscar el alojamiento adecuado según tus necesidades:

  • Compartido: Económico, ideal para proyectos nuevos o pequeños, pero compartes recursos con otras webs.
  • VPS (Servidor Privado Virtual): Un entorno aislado con recursos garantizados, ideal para proyectos en crecimiento.
  • Dedicado: Un servidor completo en exclusiva para tu web, para proyectos grandes con alto tráfico.
  • Cloud Hosting: Escalable y flexible, utiliza una red de servidores para garantizar que tu web nunca se caiga.

Control de rastreo e indexación

  • Robots.txt y Sitemap.xml: Estas herramientas te permiten guiar el rastreo de los bots. Te permiten controlar qué partes de tu sitio web deben o no deben ser indexadas por los motores de búsqueda, afectando directamente a tu visibilidad en los resultados.

Cuidado con las penalizaciones de Google

Debes mantener prácticas limpias para evitar que los algoritmos históricos de Google arruinen tu posicionamiento:

  • Google Panda: El algoritmo encargado de penalizar el contenido duplicado, de baja calidad o escaso (thin content).
  • Google Penguin: El algoritmo diseñado para detectar y penalizar el spam de enlaces artificiales, la compra de enlaces masivos y las técnicas poco éticas de linkbuilding.

5. El ecosistema de Herramientas SEO esenciales

Para monitorizar todo lo anterior con éxito, estas son herramientas en el momento de publicación de este artículo gratuitas y sus funciones principales:

  • Google Search Console: Permite supervisar cómo ve Google tu web y solucionar problemas de indexación o aparición en los resultados de búsqueda.
  • Google Analytics: Mide el comportamiento de los usuarios dentro de tu web, rastreando de dónde vienen y qué acciones realizan.
  • Answer the Public: Ayuda a descubrir las preguntas y frases que los usuarios buscan habitualmente en internet para crear contenidos que respondan a sus dudas.
  • Ahrefs: Excelente para analizar los enlaces entrantes (backlinks) a una web y estudiar las estrategias de la competencia.
  • LinkMiner: Permite encontrar y verificar la fuerza de los enlaces externos hacia un sitio web para mejorar tus campañas de linkbuilding.
  • Ubersuggest: Sirve para sugerir ideas de palabras clave y analizar el volumen de tráfico de cualquier página web.
  • Keyword Tool: Genera cientos de palabras clave alternativas usando el autocompletado de los principales buscadores del mercado.
  • Barra Moz: Extensión que mide la autoridad y relevancia de cualquier página web directamente desde el navegador mientras navegas por internet.

Conclusión: El SEO es una carrera de fondo

En resumen, dominar el SEO requiere un equilibrio constante entre la optimización técnica interna (On-Page), la construcción de una reputación sólida externa (Off-Page) y el análisis inteligente de los datos. Aunque herramientas como Google Analytics o Ahrefs facilitan enormemente el camino, la clave del éxito radica en la constancia y en poner siempre la experiencia del usuario en el centro de tu estrategia. El posicionamiento orgánico no da frutos de la noche a la mañana, pero es la inversión más rentable y duradera para consolidar la presencia digital.

Gran parte de los conceptos y estrategias que he compartido en este artículo los he aprendido gracias a un curso de Ir a Curso de SEO de Edutin Academye. Soy consciente de que esta plataforma tiene sus detractores y genera opiniones divididas en internet, pero en mi experiencia personal, el contenido me ha resultado sumamente útil, práctico y me ha dado las bases necesarias para entender este mundo. Al final, lo importante es aprovechar el conocimiento y ponerlo en práctica.

Ahora es tu turno: de todos los factores que hemos repasado, ¿cuál vas a empezar a optimizar en tu web hoy mismo o qué herramienta de la lista tienes más ganas de probar? ¡Déjame tu respuesta en los comentarios y compartamos ideas!

domingo, 5 de julio de 2026

Guía SEO para Blogger: Configuración esencial paso a paso

Si acabas de crear tu blog en Blogger, publicar contenido no es suficiente para recibir visitas. Necesitas que Google entienda tu sitio y confíe en él. Esta guía te enseña a configurar los pilares técnicos esenciales del SEO en Blogger desde cero.

1. Conecta Google Analytics para medir tu tráfico

No puedes mejorar lo que no mides. Google Analytics te dice cuántas personas te visitan y qué páginas leen.

Cómo crear una cuenta en Google Analitycs

  1. Entra a Google Analytics con tu cuenta de Gmail.
  2. Haz clic en "Empezar a medir".
  3. Asigna un nombre a tu cuenta (puede ser tu nombre o el de tu negocio).
  4. Configura tu primera propiedad introduciendo el nombre y la URL de tu blog.
  5. Ve a administrar (icono de la rueda) y añade un flujo de datos con la URL de tu blog para obtener tu ID de medición (un código que empieza por "G-").

Vincula el ID de medición en Blogger

  1. Copia tu ID de medición desde Google Analytics.
  2. Ve al panel de control de Blogger y haz clic en Configuración.
  3. Busca la opción ID de la propiedad de Google Analytics.
  4. Pega tu código y guarda los cambios.

2. Activa la disponibilidad HTTPS

El protocolo HTTPS activa un certificado SSL gratuito en tu blog. Esto cambia tu dirección de http:// a https:// y muestra un candado de seguridad en el navegador.

Por qué es obligatorio activarlo

  • Seguridad y confianza: Protege los datos de tus lectores. Evita que navegadores como Chrome marquen tu web con el aviso de "No segura".
  • Posicionamiento SEO: Google prioriza los sitios seguros. No tenerlo perjudica seriamente tu visibilidad.

Cómo activarlo en Blogger

  1. Entra a Configuración en tu panel de Blogger.
  2. Baja hasta la sección Privacidad / HTTPS
  3. Activa la pestaña Disponibilidad de HTTPS.
  4. Activa también Redirección de HTTPS para que todo el tráfico antiguo se dirija a la versión segura.

3. Habilita las etiquetas Meta (Meta Tags)

Las etiquetas meta sirven para indicarle a los motores de búsqueda de qué trata tu blog de forma resumida. Su función clave es generar descripciones atractivas (snippets) en los resultados de búsqueda de Google. Una buena descripción aumenta el porcentaje de clics (CTR) de los usuarios.

Su función clave es generar descripciones atractivas (snippets) en los resultados de búsqueda de Google. Una buena descripción aumenta el porcentaje de clics (CTR) de los usuarios.

Cómo habilitarlas

  1. En Blooger ve a Configuración > Etiquetas meta.
  2. Activa la opción Habilitar descripción de búsqueda.
  3. Escribe una descripción general de tu blog de menos de 150 caracteres. Usa tus palabras clave principales.

4. Configura el archivo Robots.txt personalizado

El archivo robots.txt le dice a los rastreadores de Google qué partes de tu blog deben revisar y cuáles deben ignorar. Esto optimiza tu presupuesto de rastreo.

Esto solo es útil si tu blog tiene miles de páginas en caso contrario no merece la pena. Tu blog ya tiene de forma automática un fichero sitemap.xml que le indica la buscador los artículos que has publicado. Si quieres consultarlo escribe en el buscador www.tublog.com/sitemap.xml y lo tendrás en descargas. Allí lo puedes consultar.

Cómo activarlo

  1. En Configuración, busca la sección Rastreadores e indexación.
  2. Activa la opción Habilitar contenido de robots.txt personalizado.
  3. Añade el código estándar de Blogger (asegúrate de que incluya la ruta de tu sitemap.xml para que Google encuentre tus artículos fácilmente).

Para terminar: Contenido y autoridad

Una vez que tu blog es técnicamente seguro y rastreable, empieza el verdadero trabajo de posicionamiento:

  • Publicación periódica: Escribe artículos de forma constante. A Google le gustan los sitios activos y actualizados.
  • Estrategia de enlaces (Backlinks): Consigue que otras webs de tu misma temática enlacen a tu blog. Esto transfiere autoridad y le demuestra a Google que tu contenido es de calidad.

domingo, 21 de septiembre de 2025

La IA es útil pero no inteligente

He leído el libro “We, programmers: A Chronicle of coders from Ada to AI” de Robert C. Martin. A mi cómo vieja programadora me ha resultado muy interesante toda la evolución histórica de la construcción de software. Puedo entender que a los programadores más jóvenes les resulte ajena, pero…

La historia de cualquier disciplina es importante en su trayectoria y muchas veces sirve para comprender el porqué de las cosas. Las personas aprendemos de nuestros propios éxitos y fracasos, pero la historia nos cuenta los éxitos y fracasos de otros y de estos también podemos aprender.

El libro tiene una primera parte dedicada a los pioneros de la programación. Son personas a las que se les ocurrió hacer máquinas que dependiendo de las ordenes que les dieran, harían unas cosas u otras. Hasta entonces una máquina hacía una única cosa para la que había sido construida, ellos la llamaron a esta máquina de propósito general puesto que podía hacer diversas cosas.

La primera idea de máquina programable la tuvo Charles Babbage que nació el 26 de diciembre de 1791. Él pensó que el tedioso trabajo de hacer cálculos se podía relegar a que lo hicieran las máquinas.

Según Robert C. Martin. "La necesidad de tablas matemáticas era omnipresente. Los matemáticos las necesitaban. Los navegantes las necesitaban. Los astrónomos, ingenieros y topógrafos las necesitaban. Los tipos de tablas que necesitaban eran tablas de logaritmos, tablas de trigonometría, tablas de balística, tablas de mareas. La lista era interminable. Además, necesitaban exactitud y precisión. Cada entrada de la tabla debía ser exacta, con una precisión de varios dígitos decimales."

Fue Ada Lovelace la que entendió la máquina que proponía Babbage y escribió el primer programa para el cálculo de una secuencia de números de Bernouilli. Se puede ver el programa aquí

Después de contar las historias de los precursores de la programación, el libro detalla todos los caminos que siguió en su vida profesional. Robert C. Martin ha programado en muy diversos lenguajes: ensamblador de varias máquinas, C, C++, java, Clojure y otros. Además ha sido un gran impulsor del diseño Orientado a Objetos siendo el promotor de un estilo de programación llamado Clean Code que enseña a través principios de diseño cómo escribir código más legible con la intención de que su mantenimiento sea más sencillo. Ya sabéis que el mantenimiento de código es la parte más tediosa de un programador.

Robert termina su libro haciendo una exposición de lo que él piensa sobre cómo va a ser la programación a unos 50 años vista. Y aquí es donde trata el tema del título de este artículo. Este autor opina que la programación no va a cambiar mucho en los próximos años. Lo que él espera es que se unifiquen los lenguajes de programación y se tienda hacia los lenguajes funcionales.

En cuanto a la IA, opina que siendo bastante útil, no es inteligente. Es decir, es un gran recopilador de datos, opiniones, soluciones, cálculos, historias, etc. Cuando se hace una pregunta a la IA, ella busca la respuesta a la misma pregunta entre millones de respuestas que esta pregunta ya ha tenido y han sido de utilidad.

Me hace gracia su forma de contar lo que la gente se cree de la IA y que no es.

"Todos los futuristas nos dicen que estamos al borde de una revolución de la IA. Predicen cambios y disrupciones, y lanzan advertencias alarmantes sobre la pérdida de empleos, la pérdida de libertad y la destrucción definitiva de la humanidad. Es como si hubieran visto demasiado Terminator de jóvenes. No, Skynet no va a despertar y bombardearnos a todos con armas nucleares. Estamos lejos de producir una máquina que 'despierte'."

Yo estoy totalmente de acuerdo con este punto de vista. ¿Qué os parece a vosotros que desarrolláis software?

miércoles, 24 de julio de 2024

¿Qué pasó con Windows y Crowdstrike el 19 de julio de 2024?

Después de indagar y olisquear por ahí voy a describir lo que yo creo que pasó y causó tantos problemas en aeropuertos, hospitales, oficinas gubernamentales y otras organizaciones. También voy a reflexionar sobre cómo se puede hacer para que esto no vuelva a pasar.

Descripción de los hechos

Los equipos que tenían instalado el sistema operativo Windows y la plataforma Falcon, el 19 de julio recibieron una actualización automática desde la plataforma Cloud de Crowdstrike.

Según la web de CrowdStrike, Falcon es: “Falcon es la plataforma de CrowdStrike diseñada específicamente para detener las infracciones a través de un conjunto unificado de tecnologías entregadas desde la nube que previenen todo tipo de ataques, incluido el malware y mucho más. CrowdStrike Falcon responde a esos desafíos con una solución poderosa pero liviana que unifica el antivirus de próxima generación (NGAV), la detección y respuesta de endpoints (EDR) y la detección inteligente de amenazas cibernéticas, todo contenido en un dispositivo pequeño y único, un Sensor liviano."

Gráficamente se puede organizar de esta forma:

La actualización afectó sólo a sistemas que estaban conectados a internet, tenían instalados Windows y Falcon y aceptaron la actualización automática. Estás actualizaciones forman parte del proceder habitual de Crodstrike y se suelen producir varias veces al día.

Esta actualización provocó, por un fallo software, que Falcon Agent detectase que se estaba intentando acceder a una dirección de memoria que está reservada para el sistema operativo. Esto es una violación que se interpretó como un cyberataque y causó que el sistema se intentase reiniciar para evitar males mayores.

La actualización incluía un fichero llamado C-00000291*.SYS que tenía un contenido erróneo. Falcon Agent utilizaba dicho fichero durante el pre-arranque del sistema y esto provocaba que no se pudiese llegar al arranque. Entonces Windows mostraba la pantalla azul (BSoD – Blue Screen of Dead). Por muchas veces que se intentase rearrancar, el proceso se repetía y se volvía a obtener la pantalla azul, es decir no era posible arrancar.

La solución era ir al directorio de Windows donde esta el fichero y borrarlo, después de haber arrancado en modo seguro para evitar el uso del fichero C-00000291*.SYS y no caer en el bucle de BSoD. Normalmente el fichero se aloja en el directorio C:/windows/System32/drivers.

Reflexión

Me parece muy oportuno como Freddy Vega

explica lo ocurrido e indica que, aunque alguien escribió el contenido de ese fichero y alguien escribió las lineas de código que manejan ese contenido, no es un error de una persona es un error del proceso que Crowdstrike emplea para desplegar las actualizaciones. Alguien se equivocó y el proceso de despliegue establecido por la organización no le ayudó a que se diese cuenta de su error.

A su vez es un error de los procesos de despliegue de los clientes de Crowdstrike que confían en actualizaciones automáticas de un tercero que ellos mismos no han probado ni verificado.

Existen múltiples técnicas ideadas y puestas en marcha por los departamentos de T.I. del mundo entero para evitar que pasen estas cosas. Por ejemplo los despliegues blue-green, métodos de pruebas automatizadas y no automatizadas para verificar que todo está bien antes del despliegue, sistemas de automatización del despliegue (canales DevOps) con puntos de verificación múltiples tanto de calidad del software como de verificación de funcionalidad , etc.

A pesar de todos los mecanismos que una organización emplee para evitar estos problemas el error se puede producir, pero mediante diferentes técnicas muchas organizaciones han conseguido minimizar este riesgo.

La experiencia ha demostrado que emplear recursos en organizar los procesos de los departamentos TI para mejorar el servicio a los usuarios del software y los beneficios a la organización propietaria de ese software, FUNCIONA.

Creo que es importante que los ingenieros de software sean conscientes de esto y creen procesos robustos que eviten se produzcan esto apagones que tantos problemas causan. Además que sean capaces de buscar promotores de su buen hacer en las organizaciones.

El software no es intangible, sólo su interior para los no profesionales. Seguro que a nadie le gustaría comprar una casa nueva que aparentemente es muy confortable, pero que en cuanto se habitase todo se fuese abajo: cimientos, cableados, desagües, circuito de calefacción, etc. Pues eso es lo que desde fuera no se ve pero es fundamental.

Epìlogo

A continuación enumero los lugares en los que he leído la información que aquí he sintetizado. Puede que los detalles técnicos de la Plataforma Falcon no sean exactos pero la conclusión sería la misma.

Si alguien me puede proporcionar más detalles del fallo, estaré muy agradecida y disculpas por las imprecisiones.

Plataforma Crowdstrike Para ver pulse aquí

Technical details of the Windows BSOD disaster due to CrowdStrike por B Shyam Sundar Para ver pulse aquí

Blue Screens to Blackouts: The Story Behind the CrowdStrike Outage por Animesh Gaitonde Para ver pulse aquí

lunes, 25 de septiembre de 2023

Un ejemplo de Mock Service Worker con React

Cuando se trata de hacer una aplicación web muy a menudo se utiliza un API Rest que suministra datos desde el backend. No siempre está disponible el backend en el momento en que se empieza a desarrollar el frontend o incluso a veces es deseable no depender de los vaivenes del desarrollo del backend.

Para aislar al frontend del backend es útil la librería Mock Service Worker. Mediante esta librería podemos simular el backend cómo si ya estuviese disponible aunque no lo esté. Vamos a ver un ejemplo.

Para acceder a los recursos del backend se utilizan métodos HTTP. En este ejemplo vamos a simular un get que devuelve frases famosas. El get se simula con:

Es decir, cuando desde el frontend se ejecuta el fetch que envía el get, si estamos en el entorno de desarrollo se ejecuta un get que devuelve un fichero json con estas 2 citas. Para distinguir el entorno de desarrollo del de producción se usa una variable de entorno de la siguiente manera:

https://thesimpsonsquoteapi.glitch.me/" es la url del backend real, la que se utilizará en producción cuando todo esté funcionando.

Entonces lo que es necesario para que todo esto funciones es instalar la librería Mock Service Worker con npm install msw --save-dev Y utilizar la función setupWorker con el workersetup.js con el siguiente contenido:

Bueno pongo todo en orden para que se entienda:

Main-page.js es un componente React que determina cual es la URL que se utilizará para el get como hemos visto anteriormente. El objetivo de este componente es mostrar todas las citas que devuelve el blackend. El contenido de Main-page.js es:

En este ejemplo cuando se está realizando la ejecución en el entorno de desarrollo el get se efectúa a /quotes y cuando es otro entorno, en este caso producción el get se efectúa a https://thesimpsonsquoteapi.glitch.me/quotes. Son workerSetup.js y handlers.js los que se encargan de simular la respuesta del get cuando la petición se lanza a /quotes.

Entonces lo que vemos en la pantalla cuando ejecutamos este componente en el entorno de desarrollo es:

Coincidiendo las citas que se muestran en pantalla con las que se crean en el objeto handlers.js cuyo contenido se mostró en la primera imagen de código.

Conclusión

Esta librería nos puede ayudar cuando durante el desarrollo queremos independizar el frontend del backend. Es decir podemos ir avanzando el frontend aunque el backend no esté disponible.

sábado, 12 de agosto de 2023

Un ejemplo de Cucumber para hacer BDD (Behavior driven development)

BDD tiende un puente para que los expertos del negocio y los informáticos se entiendan sin fisuras. BDD alienta la colaboración, construye compresión compartida sobre el comportamiento esperado del sistema, produce documentación que guía el desarrollo y permite validar el comportamiento del sistema de forma automática.

Trabajando en rápidos y pequeños ciclos mejora la retroalimentación y el flujo de valor. Hacer BDD es hacer tres cosas una y otra vez: se toma una pequeña funcionalidad y se conversa sobre los detalles de cómo se espera que el sistema se comporte usando ejemplos concretos, luego se documentan esos ejemplos en una forma en la cual se pueden automatizar y se corrobora que hay acuerdo, para terminar se codifica con lenguaje Guerkin el comportamiento descrito en cada ejemplo. A estas tres actividades se las llama: Descubrir, formular y automatizar.

La idea es hacer cada nueva funcionalidad en partes muy pequeñas (ejemplos) e iterar rápidamente. Cada vez que se implementa un ejemplo se añade algo valioso al sistema y se está en disposición de responder a posibles cambios como resultado de la retroalimentación recogida de los expertos en el negocio. Los ejemplos documentados guían el desarrollo y permiten al equipo tener confianza y progresar en la construcción del sistema. A la documentación que se va construyendo se le llama “documentación viva” porque el código representa la documentación y la documentación refleja el conocimiento compartido del equipo sobre lo que el código hace. Cucumber es una herramienta que sirve para hacer BDD y se va a usar a continuación para mostrar un ejemplo de lo explicado hasta aquí.

El ejemplo está basado en el curso online que suministran en Escuela Cucumber de forma gratuita, sólo hay que registrarse. El ejemplo tiene la siguiente estructura.

El contenido de Belly.feature es la codificación del ejemplo en Guerkin. La idea expresada es que si comes menos de 42 galletas y pasa más de una hora vas a estar hambriento y tu estómago va a gruñir, pero si has tomado más de 42 galletas no gruñirá.

La implementación del ejemplo para que la librería de Cucumber pueda ejecutar la prueba escrita en Guerkin en Belly.feature está en StepsBelly.java.

La funcionalidad del negocio está en Belly.java, esta aplicación determina si la barriga(belly) está llena o no después de haber transcurrido una hora y haber consumido una determinada cantidad de galletas.

Resumen

Estos tres ficheros son una pequeña muestra de lo que BDD, Guerkin y Cucumber pueden hacer para mejorar el desarrollo de software.

  • Belly.Feature está escrito en un lenguaje entendible por el usuario y expresa lo que él espera que el sistema haga.
  • StepsBelly.java es la implementación en java de Belly.Feature, cuando se ejecuta valida lo que se espera que haga la aplicación. Hay que tener en cuenta que lo que se espera que haga la aplicación lo ha escrito el experto en el negocio.
  • Belly.java es la aplicación cuya funcionalidad se comprueba automáticamente con StepsBelly.java que se ejecuta con Cucumber.

No hay fisuras posibles entre lo que quiere el experto en el negocio y lo que codifica el desarrollador. Bueno hay que estudiar cómo usar todo esto en el mundo real, pero eso es otra historia…..