La Ingeniería del Caos es una tendencia actual que implica estudiar el comportamiento de un sistema frente a eventos externos que a menudo son improbables, pero en este caso provocados (caída del servidor o del balanceador de carga, pérdida de DNS, etc.).
El desorden generado proporciona una gran cantidad de información sobre cómo funcionan nuestros sistemas, lo que nos permite mejorar su robustez.
Pero curiosamente, todos los libros, charlas y tutoriales sobre Ingeniería del Caos pasan por alto un componente importante de nuestros sistemas. Y sin embargo, si hay un área donde la imprevisibilidad, la inconsistencia y la necesidad de resiliencia son preocupaciones centrales, es el frontend.
💥Caos, frontend y arte ancestral japonés 👘: 3 conceptos que a primera vista no tienen nada en común, pero que juntos abren nuevas perspectivas en el desarrollo de nuestras aplicaciones.
This talk has been presented at React Summit 2024, check out the latest edition of this React Conference.
Bienvenido a la charla, Arte y Entropía, Introduciendo el Caos en tu Frontend. La ingeniería del caos es una práctica inventada por Netflix en 2011 para observar cómo reacciona un sistema ante perturbaciones intencionales. Aplicar la ingeniería del caos al frontend es experimental pero necesario, ya que un frontend roto puede afectar negativamente la experiencia del usuario. Las perturbaciones intencionales en el frontend se pueden inducir a través de diversas áreas como solicitudes HTTP con una red 3G lenta o una conexión Wi-Fi inestable. Se pueden utilizar herramientas como los kits de herramientas de frontend del caos para experimentar con la ingeniería del caos en el frontend y abrazar la rotura como parte de la historia de la aplicación.
1. Art & Entropy: Introduciendo el Caos en tu Front-End
Short description:
Bienvenidos a la charla, Art & Entropy, Introduciendo el Caos en tu Front-End. ¿Has oído hablar de Kintsugi? Es el antiguo arte japonés de reparar cerámica y porcelana usando laca con incrustaciones de oro. En los primeros días de Kintsugi, los coleccionistas rompían intencionalmente sus propias cerámicas y las reparaban. Kintsugi puede adaptarse a un nuevo medio. ¿Es nuestra aplicación web perfecta, sin errores, en todos los navegadores y en todos los tamaños de pantalla? No. Pero ¿necesita ser perfecta? No, solo necesita ser resiliente, funcionar sin importar qué. Vamos a usar la ingeniería del caos para asegurarnos de que nuestras aplicaciones sean resilientes. La ingeniería del caos es una práctica inventada por Netflix en 2011. El objetivo es observar cómo reacciona un sistema ante perturbaciones intencionales. Los beneficios de la ingeniería del caos incluyen descubrir e identificar debilidades en un entorno controlado y comprender las interdependencias de los componentes de nuestros sistemas.
Mi nombre es Thibaut, y me pueden encontrar en Twitter con el nombre de héroe Pseudo. Empecemos. ¿Has oído hablar de Kintsugi? Es el antiguo arte japonés de reparar cerámica y porcelana usando laca con incrustaciones de oro. Como filosofía, Kintsugi trata la rotura y la reparación como parte de la historia de un objeto, en lugar de algo que se debe disfrazar. En los primeros días de Kintsugi, alrededor del siglo XV en Japón, los coleccionistas estaban tan enamorados del resultado que intencionalmente rompían sus propias cerámicas y las reparaban. Con el tiempo, Kintsugi ha evolucionado y se ha fusionado con el arte contemporáneo. Ejemplos incluyen el trabajo de Jan Forman, quien usa Legos para reparar paredes en el paisaje urbano, pero también el trabajo de Raquel Susman, quien usa laca dorada para reparar asfalto. De esta manera, Kintsugi puede adaptarse a un nuevo medio. ¿Un nuevo medio, por qué no la web? Porque sí, preguntémonos. ¿Es nuestra aplicación web perfecta, sin errores, en todos los navegadores y en todos los tamaños de pantalla? No. Pero ¿necesita ser perfecta? No, solo necesita ser resiliente, funcionar sin importar qué. Puede estar rota y funcional, rota y hermosa, como cerámicas reparadas con Kintsugi. Suena bien. Entonces, ¿cómo nos aseguramos de que nuestras aplicaciones sean resilientes? Bueno, vamos a usar la ingeniería del caos para lograrlo. Tal vez hayas escuchado el término antes. Inventada por Netflix en 2011, esta práctica establece paralelismos en la ciencia con la teoría del caos, que es el estudio de la evolución del desorden de la entropía en un sistema. El objetivo es observar cómo reacciona un sistema ante perturbaciones intencionales. Por ejemplo, estrellar intencionalmente un servidor, y observar cómo reacciona la infraestructura. ¿Redirigirá las solicitudes a otros servidores? ¿Reiniciará un servidor y redirigirá el tráfico? ¿Qué tan rápido? Básicamente, rompemos cosas y luego observamos. Lo bueno es que, en lugar de esperar a que las cosas exploten, a verificar que nuestra infraestructura se mantenga, lo hacemos nosotros mismos. Y así es como mejoramos, aprendiendo cómo reacciona nuestra infraestructura ante el caos. Y donde alcanza el siguiente nivel es, en Netflix, lo hacen en producción. Estrellan su infraestructura regularmente, a veces varias veces al día, para asegurarse de que todo funcione correctamente. Y esto los ha llevado a establecer procesos de restauración altamente advanced automatizados hasta el punto en que pueden reiniciar regiones enteras de la infraestructura en solo unos segundos, sin intervención humana. Estos son los beneficios de la ingeniería del caos. En primer lugar, nos ayudará a descubrir e identificar debilidades en un entorno controlado. Sabemos qué rompimos, por lo que podemos revertirlo fácilmente si las cosas se tuercen durante el experimento. También nos dará una mayor comprensión de las interdependencias de los componentes del
2. Aplicando la Ingeniería del Caos al Front-End
Short description:
En una empresa anterior, descubrimos las interdependencias de nuestro sistema cuando una infraestructura no receptiva causó que las solicitudes de inicio de sesión de los usuarios se acumularan indefinidamente. Los beneficios de la ingeniería del caos incluyen confianza e implementación de un protocolo de recuperación ante desastres. Aplicar la ingeniería del caos al front-end es experimental pero necesario, ya que un front-end roto puede afectar negativamente la experiencia del usuario. La ingeniería del caos se aplica en cuatro pasos: definir el estado nominal, hacer una hipótesis, crear perturbaciones y comparar estados. Se pueden crear interrupciones en el front-end a través de diversas áreas, como solicitudes HTTP con una red 3G lenta o Wi-Fi inestable.
nuestros sistemas. Interdependencias. Por ejemplo, en una empresa anterior, teníamos un antiguo servidor heredado que generaba PDF, pero también, y todos lo habían olvidado en ese momento, búsquedas JYP para fines de seguridad. Y un día, la infraestructura en la que se encontraba este servidor se volvió no receptiva. Comenzó una reacción en cadena donde las solicitudes de inicio de sesión de los usuarios, que dependían de JYP, también se volvieron no receptivas. Y ahí fue cuando nos dimos cuenta de que no había tiempos de espera definidos en esas llamadas, lo que a su vez significa que las solicitudes de inicio de sesión de los usuarios se acumulaban indefinidamente, deduciendo así toda nuestra infraestructura. Y, desafortunadamente, así es como redescubrimos las interdependencias de nuestro sistema. El tercer beneficio de la ingeniería del caos es la confianza. ¿Preferirías esperar a que te llamen a las 7 a. m. un domingo porque tu aplicación está caída, o preferirías romperla tú mismo un martes por la tarde y ver que todo funciona bien y que puedes dormir tranquilo en el fin de semana? Y finalmente, nos obligará a implementar un protocolo de recuperación ante desastres. No esperaremos a que ocurra un accidente antes de pensar en soluciones.
La cuestión es que en todos los recursos que existen sobre el tema de la ingeniería del caos, libros, documentación, todo se trata de la infraestructura. Así que me dije a mí mismo, ¿por qué no aplicarlo al frontend esta vez, porque no importa cuán resistente sea tu infraestructura, cuántos balanceadores de carga tengas, cuántas redundancias tengas, si tu frontend está roto, a los usuarios no les importa. Toda su experiencia en tu aplicación será negativa. Entonces, como dije, no hay recursos sobre el tema de la ingeniería del caos aplicada al frontend, ni tampoco hay herramientas todo en uno o cajas de herramientas para hacerlo. Entonces, lo que viene a continuación en esta charla es experimental. Veamos hasta dónde podemos llevar este tema. Comencemos con lo básico de la ingeniería del caos. Se aplica en cuatro pasos. Primero, definiremos el estado nominal de nuestro sistema. Por ejemplo, el usuario puede iniciar sesión, el usuario puede ver la última temporada de The Witcher. Segundo, haremos una hipótesis. Asumiremos la continuidad del estado nominal durante el experimento. El usuario todavía puede iniciar sesión, el usuario todavía puede ver la última temporada de The Witcher, y usaremos dos grupos para eso, grupo de control y grupo de prueba. Y tercero, crearemos intencionalmente una perturbación que reproduzca un evento real, por ejemplo, un fallo del servidor. Y finalmente, compararemos los estados de los dos grupos y trataremos de refutar la hipótesis planteada anteriormente. ¿Nuestros usuarios todavía pueden iniciar sesión y ver la última temporada de The Witcher? Si no pueden, entonces acabamos de identificar una falla en la resiliencia de nuestro sistema. Nuestro objetivo es aplicar este experimento de ingeniería del caos al frontend. Para los pasos uno, dos y cuatro, no es muy diferente de la ingeniería del caos clásica. Así que vamos a analizar el paso tres y cómo podemos crear interrupciones en el frontend. Hay algunas áreas de perturbaciones que podemos ver. La primera es las solicitudes HTTP. Puede ser en forma de una red 3G lenta, Wi-Fi inestable, CDN no receptiva, etc.
3. Intentional Perturbations and Localization
Short description:
GitHub es un ejemplo de una aplicación que maneja bien las respuestas lentas o nulas. Incluso sin CSS y JavaScript, sigue siendo funcional. Para inducir perturbaciones en nuestra aplicación, podemos agregar retrasos y fallas aleatorias a las solicitudes HTTP. La localización puede ser desafiante debido a las diferencias de idioma y diseño, lo que puede llevar a elementos rotos para ciertos grupos de usuarios.
La perturbación del mundo real se puede resumir en respuestas HTTP realmente lentas o simplemente ninguna respuesta en absoluto. Un ejemplo de una aplicación que maneja esto muy bien es GitHub. Todo el CSS y JavaScript se aloja en un CDN en GitHub.githubassets.com. Podemos simular lo que sucede si el CDN falla en Chrome bloqueando todas las solicitudes de red a ese dominio. Y esto es cómo se ve. Aquí estoy en el repositorio de React y estoy buscando en las diferentes carpetas y archivos para encontrar lo que estoy buscando. Y sí, aquí puedo encontrar el archivo que quiero y todo el código asociado. Y podemos ver dos cosas. En primer lugar, no es bonito. Pero en segundo lugar, funciona. Podemos navegar por el repositorio y ver el código. Y este es un buen ejemplo de resiliencia. Incluso sin CSS, sin CSS externo y sin JavaScript, GitHub funciona. Y así es como podríamos inducir intencionalmente perturbaciones en nuestra aplicación. Podemos hacer proxy, xhre y fetch. Esto se puede hacer en unas pocas líneas de código. Por ejemplo, agregamos una posibilidad de uno entre dos de agregar un retraso aleatorio y una posibilidad de uno entre cien de fallar completamente las solicitudes. Lo agregamos a la aplicación y con eso veremos rápidamente si nuestra aplicación maneja bien los retrasos o los errores. Otra área de perturbación que podemos hacer es la localización. Esto puede ser complicado de manejar debido a los idiomas de derecha a izquierda, fuentes latinas, espaciado, etc. En la perturbación del mundo real, así como en los idiomas de derecha a izquierda, también están los idiomas verbosos. Tomemos un ejemplo. Acabo de desarrollar un bonito botón. Ha sido aprobado por el diseñador. Vamos a enviarlo a producción. Pero espera. Esto es lo que realmente verán los usuarios rumanos. Le di a mi botón un ancho fijo y ahora está roto. Pero el problema es que no hablo rumano.
4. Intentional App Breakage and Tools
Short description:
Podemos romper intencionalmente nuestra aplicación en la localización utilizando la localización pseudo, alterando el texto con más letras y caracteres. Los temporizadores pueden ser perturbados por los navegadores al limitarlos, lo que causa retrasos. Manipular el historial de navegación puede simular los movimientos hacia atrás y hacia adelante de los usuarios. Otras perturbaciones incluyen simular doble clic, verificar problemas de accesibilidad y probar los viewports de dispositivos móviles y tabletas. Hay herramientas disponibles para la ingeniería del caos en el frontend.
Hablo francés y lo suficiente en inglés para dar esta charla. Entonces, ¿cómo podemos romper intencionalmente nuestra aplicación en la localización y aún así tener una buena experiencia de desarrollo? Bueno, podemos usar lo que se llama localización pseudo. Este método reemplaza el texto con una versión alterada con más letras y caracteres, pero aún legible para un humano. Y para hacer eso, podemos usar el paquete de localización pseudo de TrickVGilfason que puede realizarlo automáticamente en la aplicación.
Aquí hay un ejemplo de cómo se vería en el sitio web de React. Y como podemos ver, el texto es más largo que el original con acentos y otros glifos. Y sin embargo, la interfaz lo maneja bastante bien. Los botones no se desbordan y el menú ocupa el espacio necesario para mostrarse.
Otra área de perturbaciones son los temporizadores. Todos asumimos que un segundo es igual a un segundo, ¿verdad? Y sin embargo, eso no es exactamente cierto en Browserlandia. En algunos casos, los navegadores pueden optar por limitar los temporizadores para reducir el uso de CPU y batería. Y esto significa que si tu aplicación espera que se llame a un temporizador después de un tiempo específico, este temporizador puede retrasarse hasta un minuto, lo que puede romper tu función. Puedes reproducir intencionalmente esta perturbación mediante la proxy de set timeout y set interval para agregar intencionalmente retraso a los temporizadores. Si tu aplicación no maneja esto, notarás rápidamente el problema. Entonces, aquí en este código, hay una posibilidad entre dos de agregar 500 milisegundos o restar 500 milisegundos.
Y la cuarta área es el historial. A menudo vemos el recorrido del usuario como un camino lineal e unidireccional en la aplicación. Pero a menudo olvidamos que es bastante frecuente que los usuarios retrocedan y avancen en el historial para realizar acciones. Y también puede suceder por accidente. Y no hay nada tan frustrante como perder tus datos en un formulario grande cuando eso sucede. Nuevamente, podemos crear manualmente esta perturbación con un par de líneas de código. Aquí, cada minuto, hay una posibilidad entre 100 de retroceder o avanzar aleatoriamente en el historial de navegación.
Entonces, esas son las cuatro áreas de perturbación. Pero puede haber incluso más. ¿Por qué no simular doble clic para cada clic de nuestros usuarios? ¿Por qué no convertir nuestra aplicación en blanco y negro con una sola línea de CSS para verificar problemas de accesibilidad? O volvámonos locos. ¿Por qué no forzar los viewports de dispositivos móviles y tabletas, incluso en el escritorio, para asegurarnos de que nuestras aplicaciones también funcionen allí?
Entonces, sí. A estas alturas, debes estar mirándome así. Lo que hemos visto parece interesante, pero es posible que estés perdido en cómo hacerlo realmente en tus aplicaciones web. La buena noticia es que mentí. Antes en esta charla, dije que no había herramientas todo en uno para la ingeniería del caos en el frontend.
5. Chaos Frontend Toolkits and Embracing Breakage
Short description:
Creé kits de herramientas de ingeniería del caos en el frontend, una extensión del navegador y una biblioteca NPM, para experimentar con la ingeniería del caos. El control y el equilibrio son esenciales en la ingeniería del caos, estableciendo límites y asegurando el nivel adecuado de perturbación. Implementar la ingeniería del caos en producción puede no ser factible para el frontend, pero se puede aplicar en entornos de prueba y puesta en escena. Aceptemos la ruptura y la regrabación como parte de la historia de nuestra aplicación.
Pero eso no es cierto. Porque quiero que experimentes con la ingeniería del caos, creé kits de herramientas de ingeniería del caos en el frontend, que es una extensión del navegador y una biblioteca NPM que incluye todas las áreas de perturbación mencionadas anteriormente. Podrás simular doble clic y muchos más experimentos con un solo clic. Y ahora, así es como te veo. Estás listo para volver a tus empresas y romperlo todo. Pero antes de dejarte, quiero pedirte que escuches las palabras de Tessia De Vries. La magia es organizar el caos. Y aunque quedan océanos de misterio, hemos deducido que esto requiere dos cosas. Equilibrio y control. Sin ellos, el caos te matará. Y como dice Tessia De Vries muy bien, la magia es organizar el caos. Esto requiere dos cosas, equilibrio y control. En primer lugar, control. No olvides que la ingeniería del caos es un método de experimentación. Necesitamos establecer límites para este experimento en un sistema dado y durante un tiempo determinado, respetando los cuatro pasos: estado nominal, hipótesis, perturbación, comparación. Y finalmente, equilibrio. El caos debe estar lo suficientemente presente como para probar la resistencia del sistema, pero no demasiado presente como para molestar a los usuarios. Y aquí llegamos a lo que creo que es un límite de la ingeniería del caos aplicada al frontend. En los experimentos de ingeniería del caos realizados por Netflix en producción, las interrupciones son casi invisibles para los usuarios porque todo ocurre en el backend. Pero en el frontend, el usuario inevitablemente se verá afectado por las interrupciones que mencioné anteriormente. Entonces, creo que es imposible implementarlo en producción. En el mejor de los casos, se podría aplicar a entornos de prueba y puesta en escena. Pero dado que la ingeniería del caos aplicada al frontend nunca se ha hecho antes, ¿por qué no ser un precursor y ver qué se puede hacer con ella? Apliquemos la filosofía del Kintsugi. Tratemos la ruptura y la regrabación como parte de la historia de nuestra aplicación en lugar de algo que se debe disfrazar. Esto es el final de la presentación. Gracias por escuchar.
Kent C. Dodds discusses the concept of problem elimination rather than just problem-solving. He introduces the idea of a problem tree and the importance of avoiding creating solutions prematurely. Kent uses examples like Tesla's electric engine and Remix framework to illustrate the benefits of problem elimination. He emphasizes the value of trade-offs and taking the easier path, as well as the need to constantly re-evaluate and change approaches to eliminate problems.
State management in React is a highly discussed topic with many libraries and solutions. Jotai is a new library based on atoms, which represent pieces of state. Atoms in Jotai are used to define state without holding values and can be used for global, semi-global, or local states. Jotai atoms are reusable definitions that are independent from React and can be used without React in an experimental library called Jotajsx.
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.
This Talk introduces the Epic Stack, a project starter and reference for modern web development. It emphasizes that the choice of tools is not as important as we think and that any tool can be fine. The Epic Stack aims to provide a limited set of services and common use cases, with a focus on adaptability and ease of swapping out tools. It incorporates technologies like Remix, React, Fly to I.O, Grafana, and Sentry. The Epic Web Dev offers free materials and workshops to gain a solid understanding of the Epic Stack.
This Talk discusses the importance of refactoring in software development and engineering. It introduces a framework called the three pillars of refactoring: practices, inventory, and process. The Talk emphasizes the need for clear practices, understanding of technical debt, and a well-defined process for successful refactoring. It also highlights the importance of visibility, reward, and resilience in the refactoring process. The Talk concludes by discussing the role of ownership, management, and prioritization in managing technical debt and refactoring efforts.
The Talk discusses the concept of AHA programming, which emphasizes thoughtful abstractions. It presents a live-coded example of the life-cycle of an abstraction and demonstrates how to fix bugs and enhance abstractions. The importance of avoiding complex abstractions and the value of duplication over the wrong abstraction are highlighted. The Talk also provides insights on building the right abstractions and offers resources for further learning.
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.
¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.
¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
En esta masterclass, aprenderás cómo construir tu primer dapp de pila completa en la blockchain de Ethereum, leyendo y escribiendo datos en la red, y conectando una aplicación de front end al contrato que has desplegado. Al final de la masterclass, entenderás cómo configurar un entorno de desarrollo de pila completa, ejecutar un nodo local e interactuar con cualquier contrato inteligente usando React, HardHat y Ethers.js.
Construir aplicaciones web modernas está lleno de complejidad. Y eso solo si te molestas en lidiar con los problemas ¿Cansado de conectar onSubmit a las API del backend y asegurarte de que tu caché del lado del cliente se mantenga actualizada? ¿No sería genial poder utilizar la naturaleza global de CSS en tu beneficio, en lugar de buscar herramientas o convenciones para evitarla o trabajar alrededor de ella? ¿Y qué te parecería tener diseños anidados con una gestión de datos inteligente y optimizada para el rendimiento que simplemente funciona™? Remix resuelve algunos de estos problemas y elimina completamente el resto. Ni siquiera tienes que pensar en la gestión de la caché del servidor o en los conflictos del espacio de nombres global de CSS. No es que Remix tenga APIs para evitar estos problemas, simplemente no existen cuando estás usando Remix. Ah, y no necesitas ese enorme y complejo cliente graphql cuando estás usando Remix. Ellos te tienen cubierto. ¿Listo para construir aplicaciones más rápidas de manera más rápida? Al final de esta masterclass, sabrás cómo:- Crear Rutas de Remix- Estilizar aplicaciones de Remix- Cargar datos en los cargadores de Remix- Mutar datos con formularios y acciones
Vue3 fue lanzado a mediados de 2020. Además de muchas mejoras y optimizaciones, la principal característica que trae Vue3 es la API de Composición, una nueva forma de escribir y reutilizar código reactivo. Aprendamos más sobre cómo usar la API de Composición de manera eficiente.
Además de las características principales de Vue3, explicaremos ejemplos de cómo usar bibliotecas populares con Vue3.
Tabla de contenidos: - Introducción a Vue3 - API de Composición - Bibliotecas principales - Ecosistema Vue3
Requisitos previos: IDE de elección (Inellij o VSC) instalado Nodejs + NPM
Desarrollando Blogs Dinámicos con SvelteKit & Storyblok: Una Masterclass Práctica
Top Content
Featured WorkshopFree
2 authors
Esta masterclass de SvelteKit explora la integración de servicios de terceros, como Storyblok, en un proyecto SvelteKit. Los participantes aprenderán cómo crear un proyecto SvelteKit, aprovechar los componentes de Svelte y conectarse a APIs externas. La masterclass cubre conceptos importantes incluyendo SSR, CSR, generación de sitios estáticos y despliegue de la aplicación usando adaptadores. Al final de la masterclass, los asistentes tendrán una sólida comprensión de la construcción de aplicaciones SvelteKit con integraciones de API y estarán preparados para el despliegue.
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Featured Workshop
2 authors
Ven y aprende cómo puedes potenciar tus aplicaciones modernas y seguras utilizando GraphQL y Javascript. En este masterclass construiremos una API de GraphQL y demostraremos los beneficios del lenguaje de consulta para APIs y los casos de uso para los que es adecuado. Se requiere conocimiento básico de Javascript.
Comments