Despliegue continuo de aplicaciones Java mediante Bitbucket Pipelines y Oracle Kubernetes Engine

En esta charla conjunta con el Colegio de Ingenieros de Guatemala exploramos de principio a fin la creación de un pipeline de entrega continua con Bitbucket Pipelines para la publicación de microservicios sobre Oracle Cloud.

Iniciamos con un pequeño vídeo acerca de las diferencias entre DevOps, Integración Continua, Despliegue Continuo, Agile y relacionados.

Continuamos con la demostración, para lo cual creamos un microservicio basado en MicroProfile, Payara Micro y cuyo testing está implementado con JUnit y Arquillian. Todo esto a través del arquetipo Kukulkan-EE.

Una vez listo nuestro microservicio, creamos un pipeline declarativo con Bitbucket Pipelines mediante el cual automatizamos la ejecución de pruebas con Maven.

Si las pruebas son exitosas, ¡Es el momento de llevarlo a la nube!. La nube de Oracle. Continuando con Bitbucket Pipelines demostramos la publicación de una imagen Docker sobre Oracle Container Registry.

Todo listo, ahora procedemos a desplegar nuestro microservicio mediante Oracle Kubernetes Engine

Desde la TV hasta la nube, el presente, pasado y futuro de Java en 26 años

En esta charla conjunta con el Colegio de Ingenieros de Guatemala conmemoramos los 26 años de Java, recorriendo sus éxitos pasados, su estado actual y sus retos para el futuro. Analizamos de forma crítica la plataforma y con las preguntas de la audiencia se logró uno de los webinars más activos que he tenido en 2021.

Arrancamos con el pasado:

Acá hablamos de:

  • ¿Como nace Java? – 00:45
  • El primer éxito de Java – 02:35
  • Momentos importantes de Java – 04:25
  • La evolución en resumen – 06:00

Posteriormente viajamos a 2021, donde la pandemia sigue siendo un desmadre:

Acá hablamos de:

  • El presente de Java – 00:05
  • La Java Virtual Machine – 01:42
  • Java en backend – 03:32
  • Ingeniería de datos – 04:22
  • ¿Java es de Oracle y ya no es libre? – 05:55
  • Popularidad de Java – 11:37
  • Grupos de usuarios Java en Latinoamerica – 12:30
  • El tamaño del ecosistema de Java – 14:50
  • ¿Porqué Twitter usa Java? – 16:49
  • ¿Porqué Spotify usa Java? – 18:15
  • ¿Porqué Nubank usa Java? – 23:15

Por último hablamos del futuro de Java, sus retos y que nos espera si queremos que sea relevante durante los próximos 26 años:

Acá hablamos de:

  • Los retos de Java en el futuro – 01:00
  • El mundo políglota – 02:30
  • ¿Que lenguajes deberla aprender? – 07:58
  • Java Cloud Native – 11:45
  • Microservicios en Java, puntos fuertes y puntos débiles – 15:32
  • ¿Como aprender Java? – 21:12
  • Comunidades Java en Centro América – 25:16
  • Estilos de programación en Java – 27:10
  • Lenguajes emergentes en la JVM- 31:41
  • MicroProfile – 35:37
  • Los retos del futuro de Java – 39:12
  • Java en la ingeniería de datos – 40:02
  • Java en IoT – 41:42

Como de costumbre los slides se encuentran disponibles en Slideshare:

Tolerancia a fallas con MicroProfile Fault Tolerance (Chassis) y Linkerd (Service Mesh)

En esta serie de videos a partir de la charla presentada en TDC Connections 2021, hablamos acerca de los distintos abordajes que existen para la implementación de tolerancia a fallas en sistemas distribuidos (microservicios), incluyendo:

Historia de la tolerancia a fallas en microservicios:

Implementación de tolerancia a fallas vía microservice chassis:

Implementación de tolerancia a fallas vía service mesh:

Demostración de tolerancia a fallas en una aplicación con microservicios en Java y Kotlin, así como un cliente SPA escrito en TypeScript sobre Oracle Cloud y Oracle Kubernetes Engine.

Como de costumbre los slides se encuentran disponibles en SlideShare:

El estado de Java en 2021 desde 10000 pies de altura

El 23 de mayo recién pasado Java cumplió 26 años, en este contexto vale la pena analizar el estado de la plataforma desde los 10000 pies de altura donde la altitud es la ideal y las turbulencias son minimas.

En este megapost estaré analizando Java en las siguientes áreas:

  1. La plataforma Java
  2. Los lenguajes de la JVM y su relevancia
  3. Las distribuciones Java
  4. Java imperativo, Java declarativo y Java reactivo
  5. Cloud Native Java
  6. Reflexiones finales

Este post puede ser utilizado como una lectura completa, una lectura rápida o un articulo con profundidad.

Abrochense sus cinturones mientras alcanzamos los 10000 pies de altura y no olviden compartir.

Continue reading →

[QuickTip] Conectarse a redes VPN Fortinet SSL con NetworkManager en Gentoo (O cualquier otra distro Linux)

En estos días tuve la necesidad de brindar atención a un cliente a través de una red VPN, aunque comúnmente utilitaria el cliente para MacOS de Fortinet, estoy de vuelta en Linux a tiempo completo gracias a la pandemia y el WFH permanente.

Mi distro (Gentoo Linux) no cuenta con un cliente para VPNs Fortinet, ya que solo se distribuyen binarios compilados en formato RPM o DEB. Por lo que tuve que explorar algunas alternativas.

En Linux existe la biblioteca OpenFortiVPN la cual es compatible con el modelo de comunicación VPN+SSL de Fortinet. Alrededor de esta biblioteca se ha creado un pequeño ecosistema con alternativas independientes, asi como un plugin del proyecto Gnome para Network Manager.

Instalando NetworkManager-fortisslvpn

En Gentoo Linux es fácil instalar el complemento para fortisslvpn ya que se encuentra disponible en portage, pero debe de considerarse que nuestro entorno debe ser compatible con NetworkManager -e.g. Gnome, KDE, XFCE-, para esto podemos ejecutar simplemente emerge:

emerge net-vpn/networkmanager-fortisslvpn

Con esto se instalara tanto openfortivpn como el complemento para NetworkManager.

Configurando una red Fortinet en NetworkManager

Si la red es compatible con SSL+VPN podemos ir directamente al administrador de Network Manager de nuestra preferencia y debe aparecer como un protocolo para VPN, por ejemplo en Gnome 40:

VPN en Gnome 40

Posteriormente procedemos a ingresar los datos de la red

Red Fortinet

Un inconveniente que encontré en este punto es que la interfaz gráfica no es muy útil al diagnosticar problemas en la conexión. Para eso, siempre es conveniente analizar los logs del sistema, ya que por defecto NetworkManager genera sus registros ahi.

Por ejemplo en mi caso existió un fallo porque se usaba un certificado SSL auto-generado:

Certificado invalido

Al parecer es un problema común para el cual podemos agregar el certificado directamente en la GUI

Agregando certificado

Si todo es correcto, al finalizar nuestra configuración debemos conectarnos sin inconvenientes

FortiSSL VPN funcionando correctamente

Explorando los objetos centrales de Kubernetes con Oracle Cloud

En esta charla conjunta con el Colegio de Ingenieros de Guatemala hablamos acerca de Kubernetes como plataforma de orquestación de contenedores, incluyendo:

  • Motivaciones e historia de Kubernetes
  • Arquitectura básica de funcionamiento
  • Uso de objetos centrales -e.g. Container, Pod, Deployment, Service-

Para la charla se ejecutan diversas pruebas básicas con Minikube y Oracle Cloud con el objetivo de presentar Kubernetes a las personas que estan iniciando con la plataforma.

Como de costumbre los slides se encuentran disponibles en Slideshare:

Mis notas respecto al cambió de malla curricular ECYS USAC

Dado que en el pasado he sido conocido por meterme en problemas al emitir opiniones aclaro que estas notas son con espíritu constructivo y trataré que el texto se mantenga en ese espíritu.

¿Quien soy y porqué escribo esto?

Mi nombre es Víctor Orozco, soy graduado de ECYS-USAC y he recorrido esta industria como investigador, profesor, empresario, ponente en eventos internacionales, organizador de eventos y sobre todo como aficionado al conocimiento. Se que cualquier decisión de USAC impacta a todo el ecosistema público y privado del país.

Algunas sugerencias respecto a la malla curricular

Por invitación de algunos profesores decidí unirme al streaming en el cual se presentó la propuesta de malla curricular y como primer punto quisiera felicitar a las personas a cargo porque se que es un proceso largo y que requiere bastante esfuerzo, especialmente por el enfoque metodológico que utilizaron. Y dado que durante el streaming manifestaron su interes y apertura a criticas constructivas me gustaría dar la mia.

1. Mejor socialización de la diferencia entre ingeniería de software y ciencias de la computación a potenciales estudiantes

Algo que percibí con énfasis durante el streaming fue el reajuste de la carga horaria para reducir cursos de ciencias de la computación y aumentar cursos que promuevan la comunicación, soft skills y el dominio del idioma ingles.

Como bien menciona Mike Loukides en su articulo Rethinking Programming, estamos ante el borde de uno de los mayores cambios a nivel educacional en computación. Los programas de computación modernos deben reconocer que hoy en día las profesiones de TI se dividen en dos grandes grupos:

  • Personas altamente entrenadas que son las que construyen lenguajes, frameworks y plataformas
  • Personas entrenadas para construir valor mediante websites, aplicaciones móviles y productos terminados

Mi percepción como estudiante fue que a la carrera le faltaba reconocer esta diferencia y veo que con la propuesta finalmente se está cumpliendo, pero para reducir fricciones y sobre todo orientar a los estudiantes futuros, la propuesta debe ser socializada de tal forma que quede claro que el perfil buscado por la industria local es el de personas entrenadas para construir valor.

2. Ante el nuevo rumbo, pensar en que ECYS pueda tener diversos programas formativos de pregrado en un futuro no tan lejano

Durante el streaming también se mencionaba que se tomaron como base las mallas curriculares de diversas universidades del mundo, con especial énfasis en Estados Unidos, Brasil y México.

Como probablemente notaron en el caso de Estados Unidos y en su momento vi de primera mano en Brasil, en años recientes los programas de computación han sido separados y especializados en al menos 7 áreas de acuerdo a la guía de la ACM:

  • Computer Engineering
  • Computer Science
  • Cybersecurity
  • Information Systems
  • Information Technology
  • Software Engineering
  • with data science

Durante estos años he conocido excelentes profesionales Guatemaltecos a los cuales la universidad les brindó la escalera social para salir de nuestro país en búsqueda de una mejor calidad de vida y una de sus fortalezas ha sido el tener un buen trasfondo de ciencias de la computación.

En conferencias de software en el exterior he notado que los reclutadores en Brasil, Europa, Canada y Estados Unidos buscan a estos profesionales altamente capacitados porque son difíciles de conseguir incluso en sus países, especialmente a la hora de vencer entrevistas de trabajo frente a un pizarron tal y como se puede ver en diversos procesos de reclutamiento en el exterior.

Por ejemplo en la Universidad de São Paulo que fue mencionada en el streaming existen por lo menos tres programas con distintos enfoques:

Aunque en nuestro contexto no sea considerada como común la creación de lenguajes de programación, compiladores, drivers o videojuegos, estoy seguro que un buen número de personas busca y necesita esos programas formativos dentro de Guatemala para producir investigación y acceder a postgrados científicos en el exterior.

Por ese mismo motivo tenemos licenciaturas en física y matemática a pesar de que no seamos potencia en ninguna de esas áreas, aunque nuestra producción científica sea insípida, este tipo de carreras sirven como primer escalón para las personas que daran el salto al exterior e indirectamente también apoyan el avance del país.

3. Pensar en curso técnico universitario en desarrollo de software

Algo que he notado en facultades como agronomia es que es común la existencia de técnicos universitarios como una fase intermedia de la ingeniería, pudiendo obtener un grado intermedio.

Como probablemente también ya notaron, la mayoría de estudiantes de la USAC inicia a trabajar a partir del tercer año (o después de ganar compiladores 2), y muchos jamas regresaran a la universidad.

En sudamerica a este tipo de cursos se les llamaba «tecnologos» y siguiendo la linea de Brasil:

Si seguimos los lineamientos de la industria (y ahora hablando como empleador) a muchos empleadores les es irrelevante que el candidato posea o no el titulo de ingeniero, y de los que son ingenieros muchos jamas se van a colegiar.

El brindar un titulo intermedio ayudaría a muchos estudiantes de USAC (sobre todo por el perfil socieconomico) a demostrar que ha alcanzado un cierto nivel de conocimiento para ejecutar trabajos de entrada en la industria del software y legitimaríamos algo que ya existe desde hace varios años: La empleabilidad y buena aceptación por parte del mercado de estudiantes sin finalizar un programa completo de ingeniería.

GraalVM: Aplicaciones nativas AOT para los lenguajes de la JVM

En esta charla conjunta con el Colegio de Ingenieros de Guatemala se presenta una discusión acerca de GraalVM Native como innovación en el ecosistema de la JVM, durante la charla discutimos:

  • ¿Que es GraalVM?
  • GraalVM como VM políglota y reemplazo al JDK clasico
  • Compilación AOT
  • Static Linking
  • Helidon, Quarkus
  • Ventajas y desventajas de GraalVM Native

Como de costumbre los slides se encuentran disponibles en Slideshare:

Ergonomics para la JVM, Docker y Kubernetes

Durante el mes de marzo de 2021 realizamos un meetup en conjunto con la comunidad Cloud Native Guatemala. Nuestro objetivo era realizar una charla en formato «chill & slideless» pero que eventualmente derivó en un workshop bastante nerd gracias a las preguntas de la audiencia. En esta ocasión discutimos:

  • Las diferencias entre el modelo de memoria de Docker y la JVM
  • La importancia del mecanismo cgroups en contenedores
  • Como realizar tunning en versiones antiguas de Java para Docker y Kubernetes
  • ¿Que son y para que sirven las JVM ergonomics?
  • Nuevos frameworks Java para la era Cloud Native
  • GraalVM Native

Acá les comparto el vídeo

Muchas gracias a la comunidad por la invitación.

Desarrollo moderno con DevOps y Cloud Native

En esta charla conjunta con el Colegio de Ingenieros de Guatemala se presenta una discusión acerca del nuevo glosario del ingeniero de software incluyendo:

  • TDD
  • DDD
  • Cloud Native
  • 12 factors
  • DevOps
  • CQRS
  • Event Sourcing

Discutimos que significan todos esos términos y como pueden ayudarlos en su jornada cloud.

Como de costumbre los slides se encuentran disponibles en Slideshare: