 Hola a todos. Bienvenidos a offensive commons en vivo. Hoy tenemos dos invitados de lujo. Hoy tenemos aquí a Auri, Auri Amuñoz, que es ingeniera de software del equipo de Springwood, que también trabaja con Quarkus. Y con quien he tenido el gusto de poder trabajar en el equipo de Migration Toolkit for Applications. Nos ha ayudado mucho. Gracias, Auri. Bienvenida. Y Alex Soto, que es director de Developer Experience, que también trabaja con Quarkus. Y hoy vamos a hablar de Quarkus. Así que, Alex, cuéntanos. ¿Qué nos quieres enseñar hoy? Pues muchas gracias por la introducción. Y sí, hoy vamos a ver un poco de Quarkus. Desde un punto de vista de desarrolladores, ¿por qué debíamos empezar a adoptar Quarkus? Y lo primero que quiero explicar es que si veis en toda la web de Quarkus, veréis que todo el rato hablamos de Super Sonic, Super Amit Java. Y simplemente comentaros que decimos que es Super Sonic, porque puedes arrancar una aplicación Java Enterprise en milisegundos. Sí, sí, he dicho milisegundos, no segundos, por rendimiento. Y es Super Sonic porque consumimos muy poca memoria. Entonces, no estamos hablando de alrededor de 40, 50 megas. Muy, muy poco. Pero vamos a ver ahora mismo, porque lo que queremos es enseñaros cómo funciona Quarkus y no simplemente ir pasando slides. Aquí, mi aplicación de Quarkus ya desplegada, para no perder tiempo en desplegarla. Y podéis ver aquí varias cosas. El primero es que simplemente consume 26 megas. ¿Vale? Es verdad que esto es un geolobot, es decir, es una aplicación muy pequeña. ¿Y es una aplicación Java solo 26 megas? Solo 26 megas, sí. Es una aplicación Java Enterprise. Ahora veremos el código, os lo enseñaré. Veréis que utiliza, en este caso, Chax arise. Y simplemente 26 megas. Y lo que quería ver, que veáis que aún es, quizá, seguramente más importante, es que aquí hay el started in 32 milliseconds. ¿Vale? O sea, arranca en 32 milisegundos. Es decir, lo que quiero que veáis es que es una aplicación que, a raeda, entra en 32 milisegundos y simplemente está ocupando a 26 megas de ramo. Pero a veces, quizá, nos dejamos llevar por esta funcionalidad de Quarkus. Pero diríamos que tampoco no es la más visual, ¿vale? Pero tiene muchas más cosas que ayudan mucho más al desarrollador también a poder realizar sus tareas. Y esto es lo que vamos a ver ahora. Para empezar, tenemos esta web que es code.quarkus.io, que podéis ver aquí el link, donde nos permite poder generar, al primer, diríamos, nuestra aplicación, ¿no? Que podemos ponerle, por ejemplo, ponerle commons, OpenShift, OpenShift commons, ¿vale? Y luego, pues, le podemos escoger Simiven o Gradle. Yo siempre escogo Maven, porque es que ya soy muy mayor. Y luego, ya, Gradle, me queda ya muy nejos. Pero si tenéis menos edad que yo, pues podéis probar con Gradle, funciona igual, pero yo voy a usar la Maven. Pues tienes de edad. Voy a usar JacksArrest. Voy a usar JacksArrest para poder hacer los endpoints. Y como, al final, queremos enseñaros que bien que funciona Quarkus con Kubernetes, pues, voy a añadir unas extensiones, una que es la de Kubernetes y otra que es la de GIP, que, básicamente, lo que nos hace GIP es conseguir crear contenedores de forma dockerless. Es decir, creamos contenedores límites sin necesitar ningún dockerhost. Y la otra extension que tenemos es Kubernetes, que nos ayuda a poder desplegar aplicaciones Kubernetes en un plástico. Vale, voy a regenerar la aplicación que la tengo aquí. Y ahora sí que ya voy aquí, en el terminal, vamos a hacer un TMP8, no, R8, TMP8. Vamos a mover OpenShift, como nos aquí, OpenShift, y ahora ya, directamente, ya puedo abrir el editor. En mi caso, yo uso Visual Studio Code, podéis usar el editor, ¿qué queráis? Yo es que a mí me gusta Visual Studio Code. Alex. Una pregunta. Has generado un zip que tiene el Chasis para hacer tu aplicación, por decirlo así, con las dependencias que tú has querido incluir, ¿no? Y ahora lo vas a editar. Sí, ahora lo vas a editar. Sí, editar o enseñar, sí, para que veáis cómo es y introduciros a un concepto que es el developer live mode o dev mode o live mode development. Bueno, hay, todo el mundo le dice de un nombre diferente, pero es igual. Y yo le dije, podemos dejarle dev mode, ¿vale? Del modo de desarrollo. Lo primero que quiero que veáis es que este es el ejemplo que hemos desplegado anteriormente. Y, pues, como os he comentado antes, no os estoy mintiendo, es una aplicación que utilita Jackson Rays, es decir, Java Enterprise. No usa nada propietario de cuerpos. Y simplemente arranca en, pues, que en 10 milisegundos usando muy poca forma, ¿vale? O sea, veis que, realmente, la aplicación te habéis visto desplegadas esta sentilla, pero ya habéis visto que el recurso es que necesitas un muy, muy petegoso. Luego, vamos a ver esta aplicación cómo funciona. Voy a abrir. Y ahora lo que voy a arrancar es cuerpos en modo de mode, ¿vale? De modo, lo que hace es que nos introduce un concepto que los usuarios de JavaScript ya conocen, que es el hecho de poder cambiar nuestro código en nuestro ID, vale, nuestro entor, cambiamos el código y, automáticamente, este cambio se ve reflejado en el proyecto que tenemos desplegado. Pero, seguramente, la gente que va de JavaScript ha desarrollado en JavaScript lo ha usado muchas veces, pero en JavaScript es algo que no estamos acostumbrados. Normalmente, en JavaScript, lo que hacemos es, pues, no sé, tener nuestro jar desplegado, no es a minujar en nuestra aplicación. Luego, hui, hay un bar que tuviera a ver si lo arreglonó, voy al código, modifico el código, grabo, paro el jar que había arrancado, hago un event clean package, luego hago otro java minujar, y lo si funciona o no. Si no funciona, pues, voy a conocer lo mismo, con los cambios, man-in-cleanings, o no, etcétera. O sea, que ahora mismo, si tú quisieras normalmente en Java, cuando tú estás, o java, cuando tú estás editando el código, tienes que guardar, compilar, volver a lanzar, comprobar, etcétera, ¿no? Y lo que me estás diciendo es que ahora tú editas el código, lo guardas, y ya está. Sí, mira, lo vamos a ver rápido. Mira, aquí el lot of host, esta es la aplicación que hemos hecho, si lo escribo bien. La n. Tenemos que hacer lot of host hello y devuelve hello, ¿no? Y ahora que pasa, si yo quiero ir aquí. Ahora mismo tienes un empuent que devuelve hello, todo con esto. Sí, sí, ahora que estoy en el botón, sí, sí. Y yo, ¿qué pasa, si ahora aquí cambio y pongo hola? No, yo he cambiado mi código, mi punto Java, lo he grabado, no he hecho nada más. Y ahora cuando volco, pues podemos ver que devuelve hola. Yo en ningún momento he parado el proceso, volvido a compilar, etcétera. No, si no lo he hecho un code, ahora mismo, hola. Lo que es muy gracioso de ver es, por ejemplo, se haga un error de compilación, ¿no? Se haga un returno hola, es decir, un error de compilación. Y ahora que coja y graba un coro, vemos que nos lanza una excepción que nos dice un compilation error, o compilation fail, a un closed stream literal y nos dice que nos falta el literal de string, ¿no? Es decir, realmente el código se está compilando, pero se está ejecutando todo en la parte servidora, aportando, si hacemos un error de compilación y no nos damos cuenta, al final, que se va a dar cuenta es cuando lo vamos a usar. No, evidentemente, puede cambiar aquí, puede cambiar por la hoja. Y, evidentemente, ahora que tenemos que ver qué de vuelta de hoja, en ningún caso yo estoy cambiando nada. También comentaros que este live mode reloading funciona muy bien, digamos, en todo el ecosistema de cuarcos. Si queréis ver un ejemplo un poco más complejo, podemos usar lo que es el config property. Config property es una extensión de microfile aspecto que nos ayuda para configurar nuestra aplicación. Vamos a poner, por ejemplo, que un bien que se llama reading.message, no, podemos decirle y podemos aquí string.message, y ahora lo que quiero es devolver este messag, o sea, fijaos que ahora ya estoy cambiando varias cosas, ya no es cambiar de string. Y aparte que voy a ir aquí en la application properties, que es el fichero donde se configura nuestra aplicación, le puedo poner aquí reading.message igual a con ju. ¿Se acabó? Es decir, yo haré cambiar un fichero que es en topoveris, también he cambiado el fichero código, y ahora me voy aquí a un world y pongo en ju. Sin tener que recombilar nada, nada, simplemente no funciona, ¿vale? Nosotros vais desarrollando, vas haciendo calls o lo que queráis, incluso podéis debugar, porque si os fijáis y esto es importante ver, si os fijáis, cuando yo he arrancado aquí, a ver si lo veo, llegó a ver. Bueno, igual no. Ahí, sí, arriba de cuarcos del vano. Sí, correcto. Fijaos que también arranca, gracias. Ahora también abre el puerto 5500, que es el puerto por defecto para poder debugar en remoto. Es decir, podríamos debugar sin ningún problema nuestra aplicación, sin tenerla que remitir en un sitio. Quería decir que podemos ir haciendo cambios en nuestro código mientras debugamos. Y luego podríamos debugar, cambiar código y todos los resultados siempre se van viendo en tiempo real, ¿vale? Una cosa que realmente ayuda mucho a los desarrolladores. Lo otro que quiero enseñaros ya antes de dejar paso, ahora, es de que también una de las cosas que permite muy fácilmente a cuarcos es crear un contenedor Linux y desplegarlo a Kubernetes. En este caso, tengo aquí un cluster. En este caso, creo que está en Estados Unidos. Es un Google. Sí, es un Google, perfecto. Se ha habido en el Amazon. Recordemos que ahí está yo. Y, bueno, en el primer medio de una demo y más un poco catastrófico. Pues, hack ops, ¿no? Les mandamos un abrazo a los de Amazon, que todos lo pasamos mal cuando se nos quedan en servicio en producción. Y así que, un abrazo para los amigos de Amazon. Sí, pero ayer me cogió justo en medio de la demo y todo. Pero, bueno, cosas que pasan, cosas del directo. Pero hoy he cogido Google 4, por si acaso. Ahora lo que estás haciendo es para desplegar esta aplicación que nos has enseñado de prueba en un contenedor. Sí. En Kubernetes. Antes, he añadido la extensión de GIP para poder ir al contenedor y luego la extensión de Kubernetes para desplegar. Bueno, aquí lo vemos. Esto no lo voy a usar para nada. Vamos a usar Y como registro, ¿vale? Esto es el registro. Y aquí en el group, lo vemos. Es LordDoctorJazz, porque es mi group IB. Y luego, si os fijáis, no voy a añadir nada más, porque la versión le va a coger de aquí y el artefac ID va a coger. Luego, lo que tengo que hacer antes de nada es ir a myQuite, que es este. Positorio es como si fuera LordDoctorJazz. Creo el repositorio. Lo creo public, porque por defecto, lo creo private en myQuite, luego al lado público. Vale, ahora tengo aquí mi auditorio. Este es el group ID. Este es el artefac ID. Y luego, simplemente, tengo que ir aquí. Puedo hacer un label. Me van. Open, trim, compile. No, compadre. Compadre. Minus D. Skype Test. Esto que no queremos usar como para los test. Y hago un leñado este flag. Cuerpos.qvenites.deploy. Igual la true, que lo que estoy haciendo es simplemente decirle, mira, yo lo que quiero es que me hagas un, que compides mi aplicación, me hagas un contenedor, me hagas un push al repositorio, al repositorio de contenedores. Y me despliegas la aplicación. Yo le he añado, veremos que lo hará bastante rápido. No está compelando, está haciendo jar. Y veremos que en breve, ahora mismo, lo que está empezando a hacer es la imagen de el contenedor talker, bueno, el contenedor Linux. Claro que aquí lo está creando todo, está creando los intupo, etcétera. En breve empezará a hacer el push. Lo que pasa es que las máquinas estas ocupan muy poco espacio, unas 70 neras, no nos hará nada hacer el push. Vale, podemos ver aquí que el push ya ha pasado, aquí. Y finalmente ha hecho un deploy al QBnet server. Luego, si lo queréis ver, aquí podemos hacer un refresh. Y si voy aquí a tags, podemos ver que unos segundos hace, unos pocos segundos se ha hecho un push de mi contenedor y evidentemente se voy a que hago un QSCara. Esto, Alex, esto, yo entiendo que, siendo un desarrollador de Java, no, no. Tú tienes que, te dicen, mira, tienes que desplegar una aplicación, tienes que tener un contenedor, tienes que crear una imagen, tienes que, todas esas fases de creación de imagen, que si me busco una imagen, que si le añado el Java, que si luego le pongo el server de aplicaciones que quiero, que si le meto el código, que si lo tengo que compilar, tengo que generar la imagen compilada, tengo que volver a desplegarla, tengo que añadirla a Kubernetes, tengo que desplegarla a Kubernetes, tengo que crear las rutas. Todos esos pasos los hemos hecho de un solo golpe dentro del mismo código de la aplicación, ahora mismo, ¿no? Sí, sí, simplemente teniendo las dos extensiones puestas y poniendo este flag de aquí y a lo general. Es que esto, esto para cualquier desarrollador que actualmente esté teniendo que generar sus propias imágenes, que esté teniendo que irse a Kubernetes, que tiene que que pongo la imagen aquí, que no gome la bajo, que la instancia, que tiene esto, o sea, esto es tremendo, porque es rapidísimo. Un pegadillo aquí ha generado el pod, podríamos hacer, podríamos ver los deployments. Además, lo tienes todo en el mismo siten, tu repositorio kit, todo juntito ahí, como es maravilloso. Incluso de crear services, y si alguien se pregunta qué yamel usa para desplegar esta aplicación, si vamos a dar que Kubernetes, Kubernetes, vamos aquí, y ahora te genera el Kubernetes JSON o Kubernetes yamel, el día que crea aquí esto es, podemos ver aquí, es el yamel que él automáticamente ha aplicado. Fijaos que aquí este es el cognor que hemos creado. Comentaros que si queréis modificar este yamel, no es necesario cerrarlo manualmente, hay dos opciones. La primera es, en el application.properies, podéis usar, por ejemplo, autuarkus.humanities. Y fijaos que, por ejemplo, te dice si queréis poner computaciones, config maps, embars, mapping secrets, si queréis poner un servidio, etcétera, el host, etcétera, o sea, aquí hay todo para poder configurar el fijero yamel que va a crear, o fijeros JSON que va a crear de Kubernetes, y si no queréis configurarlo aquí, lo que también puedes hacer es crear un, en el directory source main Kubernetes, poner allí unos yamels y luego lo que hace autuarkus es, automáticamente, coge el Kubernetes yamel que ha generado y las partes que nosotros hemos definido en los yamels en source main Kubernetes, los reemplaza con nuestros valores. Tenemos estas dos opciones para poder modificar el yamel por defecto que ya genera. Alex, verás, yo es que os reconozco, o sea, hola, soy Miguel, soy Cisadmin. Miguel, te queremos. No, ahora en serio. Yo soy más una persona de infraestructura que desarrollo, aunque me gusta mucho el desarrollo, y siempre pienso en eso, en cómo recuperar algo para producción, qué voy a hacer en caso de que tenga un desastre. O sea, para mí esto es fantástico, porque tú me das un repositorio, lo tengo todo en el mismo repositorio, y cualquier, tengo que regenerar una aplicación en otro entorno, en otro cluster, en otro momento, rápidamente, y tengo que desplegar la aplicación y recuperar los datos, porque está todo el estado de la aplicación en un único repositorio. Vamos, dicho desde un punto de vista de alguien de operaciones, de alguien que tiene que poner cosas en producción, esto a mí me suena fantástico, no sé, si alguna vez te lo había comentado, pero fantástico, sí. Sí, fíjate que también, ta, ¿qué comentas es el tema de operaciones? Fijaos que al tener, no simplemente tenerlo todo ya en un solo repositorio, sino al poder compilarlo a un binario nativo y simplemente usar 26 melas de memoria, implica que estamos aumentando la densidad de despliegue. Ahora mismo podemos desplegar muchas más aplicaciones en un mismo nodo que antes, porque tenemos más memoria, bueno, tenemos la misma memoria disponible, pero como consumimos menos memoria, implica que podemos desplegar más aplicaciones, es lo que se conoce como la densidad de despliegue, desplegamos más aplicaciones en un mismo nodo. Sí, sí. Sí, sí, ya hemos configurado tantas veces servidores de aplicaciones con el XMX y demás parámetros. A ver, ¿cuánto? Por lo menos cinco sergigas, ¿eh? De repente, contarte con, volver a hablar de MEGAS, es que son varios niveles de memoria, de memoria consumida para una aplicación menores. Estamos hablando de una reducción tremenda. De hecho, tenemos la misma aplicación que os he enseñado ahora, la tenemos también hecho en Springboard, por ejemplo, tampoco que el día ahora aquí, o creo que sería uno, podemos ver en... ¿Veis? Algo que nos dicté. Bueno, si no es igual, tampoco no quiero ahora seguir tiempo con esto, porque debe estar en algún otro men'space que ahora nos secuales, pero la misma aplicación diríamos más o menos usa unos doscientas y cinco megas, ¿no? Y que seguimos hablando de megas, pero que son un diez veces más, ¿no? Es un orden de magnitud. Sí, sí, bueno. Sí, a mí me pasa bastante que cuando hablo con equipos de desarrollo que están trabajando con Spring, me preguntan mucho por Cuarcus, oye, esto de Cuarcus. Y normalmente son los que evaluan Cuarcus y empiezan evaluándolo por los números de rendimiento y normalmente se quedan por la productividad, porque resulta mucho más cómodo y más efectivo. Lo que me están comentando. No, pero está fenomenal. Es la misma de Spring Boot. Bueno, de hecho, aún no ha arrancado, por tanto, no sabemos ni cuánta memoria va a usar. Por lo que, claro, tanto un poquito, ¿no? Ha arrancado, ¿no? Ha arrancado, veo. A ver si nos actúa un memoria usas. Venga. Bueno, si ya está arrancando. Fíjate ahora, a ver si memoria. Espera, espera, no, esta es la de Cuarcus, un segundo. Venga. Tato un poco en empezar a graficar. Empezar a tomar datos y... Pero ahora, salen estos valores. Mira, aquí está, mira, 317 en frente de 26. La misma aplicación. La misma aplicación, no está en Spring Boot. Y al tiempo de arrancada, pues está aquí puesto en 3,4 segundos. En frente de... Alex, una pregunta. Si tú tuvieras que darle un consejo a alguien que va a empezar ahora con Cuarcus y lleva muchos años trabajando con Java, ¿qué le dirías? Bueno, primero que piense, que no deja de ser librerías que seguramente haya usado alguna vez en la vida. Judge arrest, CDI, beam validation, JPA. O sea, que no se va a enfrentar algo directamente que sea propietario de Cuarcus. Sí que hay una cosa propietaria de Cuarcus pero que ahora nos enseñará que ayuda muchísimo en el desarrollo de aplicaciones persistentes, ¿vale? Pero en general, todos son especificaciones y, incluso, si tú en pie quieres empezar a usar Cuarcus y tienes un background muy importante de Spring Boot, no hay ningún problema, porque en Cuarcus hay unas extensiones que nos permiten usar las anotaciones de Spring Boot y luego en tiempo de configuración lo que hacemos es cambiar estas anotaciones por anotaciones Cuarcus. En fin, tú des como desarrollador, haz usas AlpaWireT, ResController, no sé, la anotación de Spring Boot, etcétera, ¿no? y Value, etcétera. Y luego, nosotros en Compilación o Cuarcus, en Compilación nos cambia a estos otros años. O sea, no tengáis miedo a enfrentaros a una aplicación Cuarcus como desarrollador porque si tenés background de Spring Boot podéis seguir usando las mismas anotaciones y si no, tenés otro background tipo que ya habéis usado WildFly o GlassFridge o cualquier servidor Java y o Jakablait, pues también funciona sin ningún problema. Y sin más, os paso, Auri, porque ahora veréis una cosa, que veréis cómo el lagroom funciona cuando empezamos a desarrollar aplicaciones persistentes. Así que, Auri, te dejo compartir pantalla. Vale, gracias, Alex. Hola, Auri. Hola a todos. Bien, bien, bien. Dime un poquito, ¿qué nos basta contar? Pues sí, haber yo había preparado una pequeña demo usando el sitio que os ha enseñado Alex codcuarcus.io donde vamos a generar una aplicación pequeñita que se va a conectar a una base de datos para insertar un elemento y leerlo, ¿vale? Porque la aplic que nos ha enseñado Alex está muy bien, pero sabemos que, en general, la vida real demanda un poquito más. Entonces, bueno, pues sin más, creo que veis mi pantalla, ¿no? Sin nadie dice lo contrario, entiendo que sí. Pues además, que también quería añadir una cosa que para empezar con cuarcus, una cosa que está súper bien son las guías que podéis encontrar en el sitio web. Aquí tenéis un apartado de guías y tenéis una guía hecha para cada una de las extensiones que ayuda mucho a un primer aterrizaje y para un primer uso. Así que os aconsejo que vayáis a estar un vistazo. Vayan a estar un vistazo. Vayan a estar un vistazo. Vayan a estar un vistazo. Bueno, entonces, yo voy a generar un proyecto que igual nos va a exponer un endpoint res usando Jaxer res, el estándar. Selecciono aquí las extensiones. También voy a usar Ivernate ORM Companache que ahora os cuento un poquito más y vamos a tener una base de datos MariaDB y una última extension SmallRide OpenAPI para conectarnos al swagger. Tenero mi aplicación. Me lo baja en forma de zip. Eso me ha generado un pequeño proyectito con unas clases base que lo tengo en descargas. Me lo voy a copiar aquí en demos. Hago un zip. Y ahora me posiciono y abro mi editor favorito que en mi caso es IntelliJ. Y vamos a ver. Esta demo es con Ivernate ORM Panache que es una capa por encima de Ivernate ORM que como sabéis imagino todos los que estéis en el mundo de desarrollo Java Enterprise es la implementación jpa de facto y el añadirle ese subtítulo de Companache nos va a simplificar un montón el acceso a bases de datos. Ahora veréis. Tengo aquí mi IDE y tengo un proyecto maven clásico. Yo también he usado maven. No lo he remarcado, pero bien soy mayor como Alex. Entonces, bueno, pues tenemos el típico proyecto maven con una clase Tours que ahora la voy a renombrar y mi application properties un POM con todas esas extensiones que he ido seleccionando la magia quarkus maven plugin que es el que va a hacer toda la magia quarkus. Entonces, empiezo vamos a crear una clase aquí developer que va a ser nuestra entity a la cual voy a notar con entity y le voy a decir para tener las facilidades de Panache que extiende la clase Panache entity además, voy a tener una columna con el nombre del developer y en principio nada más ahora. Ahora me vengo aquí voy a renombrar este resource para que sea el endpoint de mi entity developer. Lo renombro ok me dice esto porque fijaos que me ha generado además una clase de test y una native developer resource IT para que no tengáis excusa luego de que no podáis hacer test os damos una clase hecho los test siempre siempre que no nos falten para luego hacer el skip test que hemos visto bueno pues cuando estamos haciendo un prototipo de los skip test eso sí, antes de la producción tiene que estar el test pero para el prototipo así se ha prototipado o simplemente que muchas veces los test puede que los lance un Jenkins en otra máquina más potente o tal tú vas a estar desarrollando en modo desarrollo como nos enseñó Alex entonces bueno vale pues este método me va a devolver una lista de developers vale aquí importo mi clase lo voy a renombrar también developers y fijaos lo que hago simplemente aquí usando panache puedo acceder al método list all a partir de el nombre de la clase developer con esto ya estaría y con eso listarías las entradas de los nombres de los developers dentro de la base de datos dentro de la base de datos es decir que en menos de 5 minutos desde cero te has creado un del chasis entero en cuarcusío te lo has descargado, lo has abierto tenías ya todo configurado las clases y todo todos los objetos o sea todo lo que vas a consumir todos los artefactos que vas a consumir y te has hecho una aplicación y recupera los otros datos y te los lista efectivamente, ahora solo me falta una cosa que es configurar la conexión a la base de datos, que eso no lo he hecho para esto en el fichero application properties tengo estas properties de cuarcus que sirven justamente para eso yo ahora estoy trabajando en local y lo que he hecho es lanzar una base de datos en mi localhost en el porto 3306 maría database vale que uy, yo he tenido un error por ahí bien, te lo digo la tengo aquí aquí esta mi base de datos lanzada entonces simplemente yo configuró la manera de conectarse me voy aquí a un terminal lanzo mi aplicación esto debería haberlo hecho antes lanzo mi aplicación en modo desarrollo, lo que nos explicaba Alex es poder ir modificando el código y teniendo el feedback directamente sin tener que relanzarlo todo, sino que estoy en modo desarrollo y una vez que termine todo pues a lo mejor ya lanzo los test más exhaustivamente etcétera veis el port uy va vaya pasamos de la escondida no tengo la ah, me he cogido una mala extensión es la maría database hemos cogido la la posgres la que siempre cojo pues ha debido ser por inercia yo soy de posgres, ha sido mi flujo era mira, mira, no he hecho nada no he hecho nada y lo está, he cambiado me ha venido bien porque mirad que he cambiado hasta una extensión en el POM y no he tenido ni que reiniciar, Quarkus está escaneando el file system en permanencia ahí ha detectado que ha habido un cambio y me lo ha relanzado y esta vez sí la aplicación sí que arranca, vale, ahora en el puerto 8080, mi localhost cuál era el PAS eso no me acuerdo si lo cambió ah, he puesto este pues vamos a poner developer aquí en el PAS developer debería salirme las he vuelto a cambiar, no tienes que hacer nada y ahora con Acdegai te sacaría la lista de claro, lo que pasa es que no tengo nada en base de datos, vale vamos a conectarnos al swagger para aquí para lanzar una ¿Qué pasa? que Google se ha medido por medio por medio no no en búsqueda veis, aquí tengo mi método expuesto y vamos a probarlo vamos a decirle por qué no puedo evitar esto no te falta el post, solo has hecho alguien ah, claro eso es vale, vale venga, pues entonces vamos a añadir un método post, que va a ser post que me va a servir para para crear un developer que va a ser este va a consumir aplicación gson y va a ser me va a devolver una response insert developer dev ahora sí me lo va a proponer vale y voy a decirle que via developer me haga un persist de la entity que recibe y por último retur response ok si todo ha ido bien, claro vale, ahora sí si ahora accedo al al saga de nuevo, has hecho un cambio en el código has añadido el método post y ahora sin tocar nada aquí mamás sin manos sin tocar nada el método get y el método post los dos ahí disponibles inmediatamente, además claro esto en realidad seamos honestos super mágicos en realidad a Quarkus lo que está haciendo por debajo es relanzar todo cuando detecta que ha habido un cambio lo que hace es parar, recompila y relanza que ocurre que lo hace tan rápido que prácticamente es al ojo humano es inapreciable yo le doy una pega muy grande ahora de dónde sacas el rato para ir a poner café antes ponías a compilar se te enfiaba el café no lo voy a saco a compilar claro vale pues vamos a crear un developer aquí eso conmigo execute acabas de introducir o sea he lanzado una query con el dato name vale y he hecho una llamada al endpoint developer con un guide vale que ocurre tenemos aquí un error pero que es bastante explícito me dice que no tiene una transacción activa y me aconseja añadir esta notación al método efectivamente pues voy a añadirlo a nivel del resource añadimos no toco nada no reinicio vuelvo aquí para intentarlo y ahora sí en teoría me lo ha creado si venimos aquí y me deja esto auri fíjate he accedido y todas esas modificaciones las he hecho sin en ningún momento relanzar el servidor veis que aquí si vemos pues vemos los diferentes ya que como he puesto la consola así no se aprecia bien pero pot replays cada vez que yo he hecho un cambio ha habido un pot replays si pero que tarda 1,68 segundos bueno en ese caso porque luego va mejor cada vez va mejor o sea que si yo la verdad que esto es una de las mejores cosas que tiene quarkus solo por esto todo el mundo debería probarlo es impresionante pues una cosilla más te pregunto a ti ahora si tuviera que comentarle a alguien que está empezando a programar yo tengo una hijada que tiene 20 años que acaba de terminar ahora los estudios y que ha estado pues con framework como yo que sé springboard o trabajando en JEE y les estoy contando cosas de quarkus que le dirías que le contarías a mi hijada Olga que se animara a probar quarkus pues a ver que que quarkus es un framework super agradecido lo primero por lo rápido que es y por el que tiene este modo desarrollador y luego otra de las cosas mejores de quarkus es que soportan los mejores estándares del mercado es decir que cuando tienes conocimiento en una librería la vas a poder seguir usando en quarkus para desembarcar y empezar a producir código prácticamente no tienes que aprender nada específico es luego a medida que vas a empezar a usarlo que sí que vas a ir aprendiendo más cosas y sobre todo cosas ligadas a la compilación nativa y al hecho de que efectivamente hoy en día hemos pasado de tener las aplicaciones desplegadas en máquinas enormes dedicadas por completo a esa aplicación a tenerlas en el cloud con una necesidad de una densidad mucho más alta porque eso se traduce en los costes que pagamos etcétera pero eso viene más tarde para un desarrollador puede empezar y desde el primer momento se va a sentir productivo usando quarkus se va a sentir en casa o mejor o mejor en una casa retenida de ver que pasamos la reforma porque bien una cosilla más estoy viendo que estamos trabajando como ha enseñado a alex y esto quizá alex me lo puedes contar tú estoy viendo que trabajamos o sea que quarkus y cubernetes, quarkus y contenedores van bastante de la mano o me estoy equivocando si de hecho es así vamos muy enfocados en que sea una aplicación o sea que sea un framework para realizar aplicaciones en cubernetes porque aquí simplemente hemos hecho una breve introducción pero hay muchísimas extensiones por ejemplo hay una extension que se llama health check que o health que lo que se encarga es de poder nosotros definir los linestroof y los ridnestroof que tenemos es decir los níticos ridnestroof que tenemos en cubernetes saber si el pod está homebio o no o saber si el pod tiene que estar aparcado o no esto es un linestroof y un ridnestroof los podemos definir de forma programática usando anotaciones de una especificación tenemos también una integración con metricals por ejemplo con promethews si estás en cubernetes que no son de promethews como herramienta para monitoreo también hay la extensión para integrarse micrometor que sirve para todo tema de tracing también hay la integración y bueno y ese es un fin de más extensiones que se integran muy bien con cubernetes y con contenedores es decir tenemos un framework que está basado en el lenguaje de Java o Java dependiendo en qué parte del Atlántico estés hablando que además se integra bien con cubernetes que hace uso de todo lo que suele estar alrededor de cubernetes como promethews que te genera fácilmente las imágenes que te acceda a base de datos del tirón y que encima si quieres empezar te vas a la página web que nos habéis enseñado seleccionas 1, 2, 3, 4, 5, 6 y te descargas tu chasis para empezar en minutos pues me parece que como le decía Auri que mañana mi productividad va a bajar un poco voy a estar probando cuarcus si no solamente es esto sino que también por ejemplo una de las grandes cosas que tiene cuarcus es que puede usarse en modo nativo que es el que hemos visto en mi primera demo donde veíamos que arrancaba en miles segundos pero también en modo ya hábanos sin ningún problema luego si tarda un segundo a arrancar y usa más 10 megas pero lo que quiero que vea es que es muy importante es que por defecto hay un cambio entre springwood y cuarcus y es que springwood seguramente muchos de vosotros suena el concepto de fat jar donde springwood pone todas las librerías dentro de un jar en nosotros también en cuarcus funciona este modo pero no es el de por defecto se crea un directorio lit donde ponen todas las librerías y un directorio jar hay perdón y un fichero jar donde hay nuestro código y alguna gente pregunta por qué este es el defecto si no es mucho más comiendo a poder hacer un jar y un jar y que esté todo allí dentro la razón es que si pensamos como se crean los contenedores linux sabemos que tenemos un concepto de capas, ¿verdad? que nosotros nada de vez que hacemos un fichero se crea una capa y estas capas se pueden rehusar pero es muy duro luego, ¿qué pasa? que normalmente en nuestros proyectos cuando estamos arreglando bugs lo que hacemos es cambiar nuestro código pero no cambiamos las librerías luego, la gran diferencia es que si estuviéramos en una estrategia fat jar quiere decir que cada vez que nosotros arreglamos un bug, por ejemplo cambiamos un if por ejemplo estaríamos generando una nueva capa de docker con todo el jar en cambio, como aquí lo tenemos separado quiere decir que cuando hagamos un docker build vamos a tener que la capa de librerías como no la hemos cambiado se va a rehusar de tal forma que lo único que estamos haciendo es crear capas pequeñitas con nuestros cambios de código simplemente con nuestros cambios de código esto implica una mayor velocidad de creación de contenedores y también un ahorro de espacio diríamos en disco un repositorio y de tiempo y de transmisión y de todo, si, si hay una cosa más, todo esto a ver, supongo normalmente se va por hecho pero quiero que quede claro todo esto es opensource, todo esto es código abierto y está disponible ahí apache version 2 que diríamos que es la más libre en el sentido de que en el caso de las licencias apache permiten poder usar el código sin ningún tipo de restricción si alguien quisiera involucrarse más en profundidad con Quarkus y dedicarse a pues eso, a cambiar añadir, modificar, alterar probar y demás ¿dónde podría ir? ¿Hay algún recurso de comunidad? Sí, en Google Groups Avionics Ah, no, bueno, que todo el código está disponible en GitHub, ya se puede echar un vistazo desde ahí luego hay un Google Groups también para developers está el Zulip Chat donde está todo el equipo Core de Quarkus donde todo el mundo es bienvenido y puedes entrar ahí y hacer una pregunta y la verdad es que es bastante reactivo, o sea que responden muy rápido y no sé qué más pues luego están los Quarkus Insights los Lunes los BitOps y ahora en el Opensiv Commons en vivo que de ahí nos ha invitado a venir a contarlo y te lo agradecemos mucho Bueno, y luego que Quarkus es un framework que está abierto, es decir, que si tú como desarrollador o en tu equipo también es una necesidad concreta y no existe la extensión para ello la puedes escribir que integra perfectamente, para eso sí que es verdad que hay que conocer y ir un poquito más allá no el primer día seguramente y conocer al equipo y claro no al equipo sino un poco la dinámica la dinámica la gente entiendo, bueno como cualquier proyecto de eso bueno abierto es decir, te tienes que involucrar tienes que ir a, empiezas haciendo un pull request de un error de documentación y terminas escribiéndote un módulo entero te encantas, te encantas, te encantas y hasta donde llegues pues creo que esto es todo, muchísimas gracias alguna cosilla más que me queráis comentar antes de cerrar no, que todos a usar Quarkus que todo el mundo a usar Quarkus pues en Alex, Auri muchísimas gracias por venir con nosotros a Opensiv Commons por contarnos más de Quarkus que nuestros compañeros amigos y usuarios y personas pues eso, en este caso hablan en español que para esto estamos haciendo estas sesiones de Opensiv Commons en vivo van a disfrutar mucho de esta sesión y de nuevo gracias por codificación en vivo de bugging en vivo, lanzamiento en vivo despliegue en vivo y todo un placer teneros aquí muchas gracias