This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Rápidamente, a otro lado, vamos con la conexión directamente con Marta Arcones.
Marta, ¿cómo estás?
Hola, ¿qué tal? Pues genial, porque me han encantado los currículum estos de Manfred
y bueno, quién sabe, a lo mejor me hago uno.
Me parece súper chula la herramienta, sí, sí.
Ojo, ojo, que si te haces un currículum, Marta, sabes el problema, que lo tienes que usar.
Eso significa que a lo mejor que... ¿Sabes? Eso significa que...
Ya, ya, ya, ya.
No, vamos a meter... Bueno, así, ¿no?
Bueno, que como siempre se dice, que esté a dieta no significa que no pueda mirar el menú, ¿no?
O sea que...
Eso es verdad. Me ha gustado mucho esa frase, ¿eh?
Correcto, correcto.
¡Qué grande!
Bueno, Marta, para quien no sepa, no sé si es como DevOps en Zooplus.
Bueno, ahora estoy de TechLead, de un equipo de desarrollo en el que hacemos de todo.
¡Qué grande!
Ahora vengo a hablar de un framework de test con el que hemos probado nuestros componentes en Riat.
Entonces, bueno, estamos haciendo de todo.
La última semana he tocado Riat, Kotlin, Terraform, Cypress...
O sea que...
Y genial, la verdad, porque es lo que a mí me gusta y yo creo que es un poco el espíritu de la filosofía de DevOps.
¡Qué grande! O sea, muy bien, ¿eh?
Me encanta porque es como yo me meto en lo que haga falta, nada de...
Pero vamos, así, con los ojos cerrados.
Luego, así pasa lo que pasa, que te das algunos calamorazos y tienes que recurrir ahí al típico tutorial de Middu en el que explica esto y lo otro.
Pero bueno, poco a poco, sí.
¡Qué grande! Oye, me alegro un montón.
Y pues nada, vamos a escuchar tu charla del Cypress, a ver qué tal.
A ver qué tal.
Te dejo en los mandos y voy a estar aquí súper atento.
Cuídate, cuídate mucho.
Venga, ánimo, suerte.
Gracias.
¡Uy! Que me pongo yo, ¿sabes?
Sí, ya te veo.
Yo cuando vean ese slide le doy caña.
Ahí está.
Sí, ahora me quito yo.
Pues nada.
Pues nada, buenas noches, buenos días, buenas tardes.
Depende de dónde estéis, Middu con Feroz.
Me llamo Marta, ya me ha presentado Middu, así que no voy a repetirme.
Y nada, una cosa que os quiero contar es que, porque de eso depende también esta introducción
a Cypress, es que trabajo en un e-commerce que se llama Zoplus y que vende comida y accesorios
para mascotas en Europa.
Y bueno, como ha comentado Middu, vamos a hablar de un framework de pruebas end-to-end que se
llama Cypress, Cypress, Cypressio, yo lo llamo de muchas maneras, ¿vale?
Es todo lo mismo.
Así que nada, primeramente vamos a empezar a hablar de las etapas de los test.
Este concepto también se conoce normalmente como pirámide de los test.
Y es un concepto que nos dice que para probar un sistema que tiene varias capas, pues tenemos
que probar un poquillo cada una de ellas.
Y nada, aquí he puesto un ejemplo de stack tecnológico.
Imaginaos que tenemos un sistema que se apoya en una infraestructura en la nube, que pueden
ser varios servidores, un balanzador de carga, ya sabéis, ese tipo de cosas.
Pues lo suyo será que probemos las configuraciones que hemos hecho en la nube para que esos sistemas,
para que esos sistemas físicos, pues actúen en conjunto con un framework como, por ejemplo,
pues LocalStack.
Esto es simplemente un ejemplo.
Hay mil herramientas más para hacer test de infraestructura, ¿vale?
Y si encima de esos servidores, por ejemplo, tenemos un aplicativo en Python, pues lo suyo
será probar que ese aplicativo está funcionando como esperamos con un framework como, por ejemplo,
PyTest.
Imaginaos, además, que ese programa Python sirve a través del protocolo HTTP, es decir,
es un servidor.
Pues ese protocolo, o sea, esas llamadas que yo le estoy haciendo y que puedo aseverar
ciertas respuestas que me da mi programa Python, pues las puedo comprobar con Postman.
A mí me encanta Postman y estoy deseando hacer una charla de Postman porque es súper potente.
Y, bueno, luego, algo clásico en estos lares del MiduConf y del MiduDF es, por ejemplo,
usar React para conectarnos a nuestro backend que está hecho en Python y que sirve HTTP
y mostrar, pues, cosas chachis por pantalla.
Estos frameworks, como React, que están orientados a componentes, pues también tengo que probar
esos componentes y lo puedo hacer con una herramienta como Jest.
Y ya llegamos a lo que nos interesa en esta charla.
Cuando queremos hacer test de más alto nivel que simulen ser un usuario final en nuestro frontal,
pues utilizamos herramientas como Cypress, que nos ayuda a comprobar los flujos de interacción del usuario,
que las cosas se pinten bien y todo esto.
Así que, nada, lo primero que os voy a enseñar es el sujeto bajo pruebas.
Esta es la tienda en la que trabajo, el e-commerce de mascotas.
Hemos puesto hace poco en producción esta página de cupones en la que puedes ver los cupones activos
y puedes ver los canjeados.
Y también puedes aplicar al carrito directamente desde la página un cupón o reemplazarlo, ¿vale?
Entonces, a ver si me dejo pasar de slide, vamos a iniciar un proyecto de Cypress con este sujeto bajo pruebas.
Entonces, lo primero que os voy a mostrar es así a vista de pájaro la estructura del proyecto.
Esta es la estructura, creo que veis mi ratón, si no, bueno, como son cuatro ficheros os vais a localizar rápidamente.
El famoso Package JSON, que os encantan los frontenders de este Twitch, donde tenemos las dependencias del proyecto.
Después tenemos un fichero de configuración propio de Cypress, ¿vale?
Que estos dos los vamos a ver en profundidad en un momento.
Y luego tenemos la carpeta Cypress con algunas subcarpetas.
Esto que tengo aquí, que son tres subcarpetas, es como el ejemplo mínimo.
Yo he creado una suite de Cypress super minimalista, que es la que os voy a enseñar,
y tiene solo tres subcarpetas, pero aquí podría haber más, ¿vale?
Podría haber una subcarpeta vídeos, que luego vamos a ver para qué, una subcarpeta screenshots.
Es decir, que tres es como el mínimo, incluso dos puede ser el mínimo, pero podría haber más.
El Package JSON, ¿qué pinta tiene?
Pues, bueno, más simple que el asa de un cubo.
Vemos que tiene la dependencia de Cypress en versión 10.
Esto es importante porque a partir de la versión 10, Cypress añadió una cosa muy chula,
que vamos a ver al final de esta charla, y os recomiendo usar la versión 10 en adelante,
y luego un par de scripts para ejecutar los modos, que también vamos a hablar de ellos al final.
Y el fichero de configuración propio de Cypress.
Aquí, como podemos ver, Cypress tiene dos modos de funcionamiento.
El primer modo es el RUN y el segundo el Open.
Ambos, vamos a hablar de ellos después, pero lo que nos interesa de aquí es que nos deja configurar Cypress el modo de reintentos que podemos hacer con cada modo.
Como estamos haciendo test en la parte más alta de la pirámide de test, son test que son muy frágiles por naturaleza,
porque están probando todas las cosas que hay debajo, todo lo que hemos hablado antes.
Si falla la máquina, fallarán.
Si falla el backend de Python, fallarán.
Entonces, es muy típico poner reintentos para que, pues bueno, si es algo eventual, pues que con un reintento lo solucionemos.
Aquí estamos además configurando si quiero grabar vídeos de los test, si quiero tomar pantallazos cuando fallan.
Y bueno, luego tenemos aquí estos tres valores de viewport y los default command timeout y page load timeout, que me trago.
Bueno, son pues configuraciones por defecto, pues del tamaño de la pantalla, el ancho de la pantalla, el tiempo que va a tomar Cypress en hacer un timeout en los comandos de Cypress,
que los vamos a ver en un momento.
Por ejemplo, si era un comando para clicar un botón, pues el tiempo que va a tomar en hacer timeout si no encuentra el botón y de carga de la página, ¿vale?
Y bueno, pues viendo ya un poco los ficheros que son la chicha, porque estos eran de configuración, tenemos aquí los ficheros que contienen los test.
Estos lo llaman, en la documentación de Cypress lo llaman assets, como activo en castellano.
Entonces, bueno, a mí me gusta numerarlos con estos numeritos porque hay test que son más profundos que otros, por así decirlo.
Por ejemplo, yo voy a probar los accesos a la página de cupones, que es como lo más externo, simplemente probar que el usuario pueda acceder.
Luego voy a probar que la información que se muestra en la página es correcta.
Y luego ya el test más profundo que tengo aquí es que la funcionalidad de la página de cupones se provea de manera esperada, ¿vale?
Estos los vamos a ver en un momento en detalle, pero vamos, me gusta numerarlos así para que sea determinista el orden en el que se corren, ¿vale?
Y también agruparlos así creo que ayuda a un futuro desarrollador o desarrolladora que llegue aquí y se tenga que enfrentar a esta suite.
Entonces, la siguiente carpeta que tenemos es la carpeta Fistures.
Esta es un clásico de los framework de test y aquí se guardan los datos estáticos.
Luego vamos a ver uno, pero vamos, que es un JSON con unos datos, no es más, ¿vale?
Y la carpeta esta de support contiene funciones auxiliares que ayudarán a nuestras assets a ejecutarse, ¿vale?
También las vamos a ver luego.
Así que nada, vamos con los assets que es el primer tema del que tenemos que hablar.
A ver, en Cipres todo va con promises.
Hay que saber las promises de JavaScript un poco, pero vamos, un poquito, ¿vale?
Yo me las sé un poquillo.
Y si no te las sabes, pues nada, te pillas el tutorial este de MiduConf de las promesas versión 1, ¿vale?
Para enterarte del den y del catch y de cómo devolver algo de una promesa y ya está, ¿vale?
O sea, que no nos explote la cabeza con esto.
Entonces, bueno, pues como veis, cada test es una promise, ¿vale?
Tiene la etiqueta esta de it y después ponemos el nombre del test.
Y dentro del cuerpo de la promise tenemos todos los pasos que queremos correr y las aseveraciones.
Como vamos a ver, Cipres, todos estos CI punto y un método en color verde, ¿vale?
Porque vais a ver algunos que son en color negro.
Todos los que sean en color verde es nativo de Cipres.
Cipres nos los provee para, pues, correr nuestras pruebas.
Entonces, aquí estamos viendo que en estos 3 test, pues, estamos intentando acceder a la página de cupones
desde el menú de la esquina, desde el menú del lateral y desde el menú horizontal,
incluso cambiando el tamaño de la pantalla para que al ser responsive la web, pues, recoloquen los elementos y acceder.
Y luego tenemos, pues, las aseveraciones.
Que, bueno, aquí las he metido en una función porque como las estaba haciendo en los 3 sitios,
pues, para reutilizar un poquillo de código, como nos ha comentado Carlos Blech.
Entonces, en las aseveraciones se usan estos sud con estos textos que incluye Cipres también,
que a mí la verdad que me parece que tiene una semántica muy, muy fácil de entender y que, vamos, que me encanta.
Para los selectores que usamos para encontrar los elementos en la página,
son, pues, por ejemplo, por ID, por ejemplo, por atributos del DOM, por clase, ¿vale?
Hay todo tipo de selectores para que puedas encontrar tus elementos de la mejor manera.
Y los más recomendados son estos, los que son de atributos del DOM,
porque son los que menos se ven afectados cuando hacemos cambios de diseño en la página, ¿vale?
Y, nada, un fichero de test completo, pues, son esas 3 pruebecillas que os he mostrado
y, pues, por ejemplo, este bloque, before each, que yo lo he usado aquí, que también es una promesa,
para hacer antes de cada prueba ciertas cosillas, ¿vale?
Como veis, estas funciones de aquí no están de color verde, están de color negro y luego hablaremos de ellas, ¿vale?
Entonces, pues, eso, el before each se ejecuta antes de cada prueba, hace unas preparaciones
y después ejecutamos cada prueba. Análogamente, podríamos tener un after each
y si queremos ejecutar algo antes de todas las pruebas de este fichero
o después de todas las pruebas de este fichero, pero solo una vez, tenemos el before y el after, ¿vale?
Y, nada, aquí tengo un vídeo de, pues, eso, de las pruebas que os acabo de enseñar.
La parte izquierda la he tenido que difuminar porque aquí sale todo súper desglosado, ¿vale?
Y, bueno, pues, tiene datos sensibles y tal, porque esto es un entorno de pruebas que tenemos en Zooplus.
Pero, bueno, ahí se va viendo cada test que está haciendo, cada aseveración que hace,
cada botón que ha encontrado o que no ha encontrado, ¿vale?
Y, como podéis ver, pues, eso, va a toda leche.
O sea, estos frameworks van ejecutando las pruebas, van ejecutando todo y tú ni te enteras.
No es como si lo hicieses manual, tardarías infinitamente más.
Y, bueno, la verdad que yo, la primera vez que vi estas automatizaciones, creo que fue con Selenium,
me parecía que estaba ahí Casper en mi ordenador, trabajando, os lo digo, trabajando a toda leche.
Así, a mí estas automatizaciones me encantan.
Y, bueno, creo que el último test, mira, este de aquí justo era el que cambiaba el viewport.
Lo voy a poner un momentito más.
El que cambiaba el viewport para aseverar que se va a hacer la pantalla un poquito más pequeña.
¿Lo veis ahí?
Pues, eso es para cambiar el viewport simplemente para que la página se recoloque
y poder hacer el último de los test que os he enseñado.
Y, nada, ya os enseño un ejemplito un poquito más complejo.
Aquí, pues, lo que probamos es a meter algunos productos en el carrito,
visitamos la página de cupones después y añadimos uno de los cupones al pedido que vamos a hacer.
Evidentemente, para finalizar el test, lo que hacemos es comprobar que el cupón que añadimos,
pues, está en la lista del pedido, ¿vale?
Entonces, vamos a ver este test en funcionamiento.
Bueno, aquí una de las cosas que más me gusta de Ciprés o de estos test automáticos
es que te aceptan el puto banner de las cookies porque es que creo que es la mejor manera
de bloquear la navegación del usuario en esta década, ¿vale?
Bueno, aquí, como veis, pues, ha cogido algunos artículos de Royal Canin Mini Adult,
o sea, pienso para perros pequeños, los ha metido en la cesta y tal,
y está yendo y viniendo a la página de cupones para meter un cupón en la cesta que ya tiene
y aseverando que ese cupón está ahí, ¿vale?
Incluso hay uno que prueba, ahora va a aparecer el cupón, lo vais a ver ahí.
Y luego lo que hace es, desde la página de cupones, también se puede reemplazar los cupones,
entonces lo reemplaza, asevera que los warnings que aparece del reemplazo de cupón,
de que le estamos diciendo al usuario, ofertas no acumulables,
y de que le sale, pues, este cupón está reemplazando el que ya tienes,
pues, asevera que esos warnings están saliendo y después se vuelve al carrito
para ver que el segundo cupón, el que hemos puesto reemplazando el primero, pues, está, ¿vale?
Y vamos ahora con el fichero support, ¿vale?
Seguro que os acordáis de estas funciones que están en negro aquí, ¿vale?
No como la de C y Visit, que esta es nativa de Cypress,
estas funciones que están aquí en negro, ¿vale?
Estas funciones, pues, ya se les ve un poquito el tufillo a e-commerce,
como podéis ver de que place items in basket o create user, ¿vale?
Estas son funciones que yo me he creado en el ficherito este de la carpetita de support.
Había un fichero en toend que se llama en toend.js, ¿vale?
A lo mejor no tiene el mejor nombre del mundo, pero en la carpetita support.
Pues, me he creado ahí unas funciones custom que yo le voy a añadir a Cypress
para poderlas correr de esa manera tan simple con lo de c y punto
y el nombre de la función, ¿vale?
En mis pruebas.
Entonces, por ejemplo, el create user, ¿qué hace?
Pues, el create user lo que hace es llamar al API de creación de usuarios
y obtener un usuario, ¿vale?
Crear un usuario antes de cada prueba.
Y como podéis ver aquí, dentro de estos, o sea,
yo puedo estructurar estas funciones como quiera.
Este CI get token es otra de estas, ¿vale?
Otra de otro comando que he añadido yo a Cypress,
un poquito más arriba en este fichero,
que lo que hacía era conectarse con el sistema de autenticación,
darme un token que yo voy a utilizar después
para autenticarme contra el sistema de creación de usuarios.
Es decir, que puedo estructurarlo muy bien, ¿vale?
Aunque esas funciones, aunque la get token no la vaya a usar
directamente desde los assets, puedo también crearla
y utilizarla desde la carpeta support.
Y nada, ya lo único que nos queda así de elementos de Cypress
son las fictures, que, bueno, esto en el mundo de los tests
lo usan todos los frameworks, que son ficheros estáticos.
Por ejemplo, este de aquí.
Este de aquí, pues, nada, Bob Esponja llegó a nuestra web
y estaba intentando crear una cuenta, ¿vale?
Entonces, es un fichero de un JSON que representa eso.
Pero en este fichero lo que he puesto,
todos estos campos que están aquí puestos a pincho,
son los campos que a mí no me importa repetirlos de un test a otro,
porque este fichero lo voy a usar en todos los tests
para crear el usuario.
Sin embargo, hay algunos campos que están a nul,
el mail y la contraseña,
que son campos que necesito,
porque soy un e-commerce,
pues, generarlos en cada ejecución de los tests,
sobre todo el mail.
Entonces, aquí abajo vamos a ver que leemos el fichero, ¿vale?
Con esto de cifisturecustomer.json, ¿vale?
Leemos el fichero, esto nos lo da Ciprés,
porque sale en verdecito.
Y ya sabe a qué ruta tiene que ir a leer el fichero,
el JSON parse y todo su lío, ya te lo hace, ¿vale?
Y nada, con nuestra promesa,
pues, cogemos lo que haya leído de ahí,
ya modo objeto de JavaScript,
y le seteamos los campos que tenemos a nul, ¿vale?
El mail, como os comentaba, lo seteo aquí,
porque necesito que sea único, ¿vale?
Y además la contraseña también la seteo aquí,
porque me viene muy bien, pues, no tenerla en el código,
porque sabéis que contraseñas en el código, pues, caca, ¿vale?
Entonces, pues, eso, lo hago así.
Y ya tenemos todo,
y lo que vamos a comentar en estos 2 minutos
es cómo correr el proyecto de Ciprés, ¿vale?
Ya tenemos todo.
Entonces, el primer modo que hay para correr el proyecto de Ciprés
es el modo Open.
Este es el típico que vamos a usar cuando estamos en desarrollo
y es del que os he enseñado todos los vídeos, ¿vale?
Y después tenemos el modo Room,
que este es el que vamos a usar
en entornos de integración y despliegue continuo,
como Jenkins, como GitLab CI,
como GitHub Actions, como CircleCI
y como BuildKite,
que es uno nuevo que me dijeron el otro día.
Entonces, el modo Open,
pues, se abre esta interfaz
que sorprendentemente funciona en Linux.
Eso yo, bueno, por eso,
es una de las razones por las que estoy enamorada de Ciprés, ¿vale?
Está hecho en Electron, en el interfaz
y por eso funcionan todos los sistemas operativos.
Y, nada, si pillamos aquí un poquillo más adelante,
nos deja elegir el navegador que queremos usar
entre Chrome, Firefox y Electron,
después el fichero de Asset
y después, pues, vamos viendo aquí la ejecución de los test.
Aquí podemos abrir un navegador
y cotillear cosas de la página,
o sea, un inspector, perdón,
y cotillear cosas de la página tranquilamente
y también podemos ir para atrás en el tiempo.
Esto que ha comentado Debbie de Playwright
en los pasos de Ciprés que te muestra aquí en esta parte,
también podemos, cuando acaben los test,
si ha fallado, irnos a justo el anterior
y como hemos rebobinado y así ver el error.
Y eso, la verdad,
que cuando estás en desarrollo
es que es la hostia.
Y, nada, esto se corre con NPX Ciprés Open, ¿vale?
Que es el modo Open.
Y ya, para daros el truco de la integración continua,
para correrlo en Jenkins
o en CircleCI o en GitHub Actions,
tenemos que tener un script como este,
que no puede ser más sencillo, en mi opinión.
Esto lo he cogido de uno de mis pipelines.
Instalamos las dependencias, evidentemente,
porque va a ser un nodo efímero
donde lo corramos, supuestamente,
y después corremos el test
con NPX Cypress Run,
en vez de Open, Run.
Y, bueno, esto nos da,
así por defecto nos da este reporte
en texto,
que a mí, la verdad,
que los reportes en texto me encantan,
pero si sois un poco testers,
de estos que les encantan los reportes
de Cucumber o de JUnit,
que sepáis que yo no lo he hecho,
pero se puede enchufar esto
para que te genere reportes
de Cucumber y de JUnit, ¿vale?
Y, nada, esta ha sido mi charla.
O sea, se me ha pasado volando.
No sé qué tal voy de tiempo,
pero, nada, daros las gracias.
A mí, por invitarme,
ha sido un auténtico placer.
A vosotros por estar ahí
escuchando mi chapa.
Soy Marta Turras, Arcones,
y tenéis ahí mi Twitter.
También tenéis el Twitter de mi empleador,
porque la verdad que tenemos proyectos muy chulos
y este, os aseguro,
que no es de los más chulos ni de lejos.
Y, bueno, pues,
quedo a la disposición para cualquier pregunta.
¿Midu?
Marta.
¿Estás ahí?
¿Estás aquí?
Claro que estoy ahí.
Me estaba partiendo.
¿Estás partiendo la caja?
No jodas.
Me estaba partiendo el ojete directamente.
No la caja, no.
Ya el ojete.
Ya vamos más abajo,
más profundo.
Sí, o sea,
ya más abajo
y ya son los pies.
O sea,
Dios,
qué risa,
Margot.
Es que es la leche.
Es la leche.
En el chat estaban diciendo
banear,
banear,
con el tema de las cookies.
O sea,
qué risa.
Puto banner de las cookies.
Es que lo odio.
Es que lo odio a muerte.
Yo también.
Yo también lo odio.
Bueno,
mucha gente está,
mira,
una charla muy directa.
Gracias,
Marta.
Gracias.
Excelente charla.
Me encanta la gente
que se cree que estoy borracho,
porque me estoy tomando dos cervezas.
Ya,
yo también lo creí hasta ahora,
que me estás diciendo que no,
vamos.
Pero si tú me conoces,
tú me conoces,
Marta,
tú sabes que yo lo soy.
Ya,
es verdad,
es verdad,
yo que sé,
yo que sé,
pero es que llevas con la cervecita ahí,
yo te llevo viendo toda la tarde,
¿sabes?
Es la misma,
está caliente ya,
está caliente.
Es que llevas ahí con la cervecita toda la tarde,
digo este,
cuando llegue mi charla,
que es de las últimas,
que casi me va a pillar en pijama,
va a llevar una moña.
Ay,
qué risa.
En fin.
Eres la leche,
eres la leche.
Oye,
me lo he pasado súper bien
y había mucha gente que estaba ahí preguntando,
Cypress versus Playwright.
¿Qué pasa,
Marta?
¿Hay pique o no pique?
Mira,
no hay pique,
no hay pique
y te digo por qué,
porque yo me estaba preparando las slides ahí,
cagando fuego,
como el niño loco alemán,
y justo tenía a Debbie muteada,
pero mañana me lo veo
y os digo en Twitter lo que me parece,
pero vamos,
como todos,
y es que hay millones de herramientas
para hacer las cosas
y tienes un poco que buscar
la que más te convence
por tu contexto
y bueno,
creo que eso de generación de código de Playwright
está muy guay,
está muy guay.
Eso lo he visto ahí
en las slides de cierre de Debbie
y me ha parecido muy guay
y es que yo no me caso con nadie,
¿sabes?
O sea,
esta charla es de Cypress
y mañana daré una de otra cosa,
¿sabes?
O sea,
que a mí me ha funcionado esto
para probar
pues la página esta de los cupones,
que es un proyecto pequeñito
y lo que me ha gustado
es que tanto la persona
de front del equipo
como yo,
que de front es de lo que más cogeo,
como otras personas de back,
hemos cogido el proyecto
y hemos hecho cambios
con mucha confianza,
es lo que más me ha gustado.
No sé hasta qué punto
Playwright será tan fácil
para personas multidisciplina.
Entonces, bueno,
tengo que ver la charla de Debbie,
ya os diré en Twitter.
Y luego,
entonces,
en la siguiente middle conf
tenemos a Marta hablando de Playwright.
¿Te imaginas?
¿Te imaginas Playwright?
Vuelta de tuerca.
Yo encantado.
¿Sabéis qué?
¿Qué pasa?
Que esa empresa era una mierda
y entonces esto...
Sí, sí, bueno,
ya ves.
Qué risa.
Sí, sí, sí.
Bueno,
ya lo veremos en futuro.
Bueno,
vamos a hacer el sorteo,
vamos a dejar por aquí a Marta.
Mientras,
vamos a hacer un sorteo.
Estoy flipando,
con las comunidades estas de Twitch.
Es que yo no soy muy Twitcher
y cada vez que me meto aquí
y veo a la velocidad
a la que va el chat,
tío,
se me dan los ojos la vuelta,
te lo juro.
Yo no sé.
Esto va rapidito,
esto va rapidito.
Es brutal
y ha habido un momento
que éramos casi 10.000 personas.
Joder,
ya ves,
yo le he visto y he dicho
me he santiguado así
que llama a mi madre
y le he dicho
si mañana no aparezco
ven a buscarme
y tira la puerta.
Te lo juro.
Así.
Qué bueno.
Pues vamos,
tenéis que poner
una palabra clave,
una palabra clave.
He utilizado un juego de palabras
y la palabra clave
es
Marta Lee.
He juntado Marta
con Codely
porque estamos sorteando
cinco suscripciones
de Codely
para tres meses.
Me acabo de fusionar
con Codely
y no me había dado cuenta.
Marta Lee,
Marta Lee,
Marta Lee.
Así que ponéis Marta Lee.
Me siento con poderes
ahora mismo,
te lo juro.
O sea,
puedo ver el Domain Driven Design,
lo puedo ver ahora mismo.
Ostras,
has podido entender
hasta la charla de Codely
que la han hecho ahí.
Dios,
Javi estaba sacando fuego.
Yo te digo una cosa,
la he visto muteada
porque estaba aquí
afinando las últimas traspas,
pero me han gustado mucho
los diagramas que han puesto
y sobre todo
como ponían emoticonos
de algunas cosas me he enterado
porque yo, tío,
yo es que me entero con emoticonos
y con emojis me entero.
Pues de algunas cosas me he enterado
y me ha gustado mucho.
Está muy, muy, muy chula.
A mí también me ha gustado un montón.
Era de nivel,
es verdad,
pero bueno,
yo creo que tiene que haber contenido
para todos.
Claro,
claro,
sí,
eso decían que
me acuerdo que Carlos Azaustre
me dijo,
dice,
el contenido que hago yo
quizás es para más juniors
y luego,
por ejemplo,
Codely
me gusta para,
pues eso,
para el siguiente paso,
para gente que ya está en el sector.
Tiene que haber de todo,
¿sabes?
Tiene que haber de todo.
Sí,
porque al final esta gente dice,
bueno,
¿y ahora qué aprendo?
Bueno,
pues ahí tienes contenido
de calidad con Codely.
Ya te digo.
Vale,
pues vamos a darle.
Tenemos cinco,
así que le vamos a dar cinco veces
y luego,
al final vamos a estar sorteando.
Marta,
muchísimas gracias por pasarte,
me ha encantado tu charla
y bueno,
me ha encantado como lo has dado
y me encantas tú directamente,
Marta.
A ti,
a ti por invitarme,
la verdad que ha sido un placer
y nada,
a ver si me muevo más
por estos lares de Twitch
que la verdad es que están súper animados.
Gracias a todos.
Estás invitadísima a venir cuando quieras,
así que ya sabes.
Cuídate.
Pues muchas gracias,
Midu.
Un abrazo enorme.
Hasta luego,
adiós.
Pues era Marta Arcones,
Marta Arcones,
una verdadera crack,
le tengo un cariño enorme
porque hemos presentado muchas veces
la conmotion juntos
y nada,
siempre nos lo pasamos pipa,
como podéis comprobar.
Bueno,
amigos,
os digo una cosa,
mañana,
hoy es 13 de septiembre,
no hemos podido regalar
los libros que tenemos que regalar
porque hemos tirado el impap
y no se ha recuperado.