• Recargar sin reiniciar la configuración de una aplicación Spring Boot con Spring Cloud Config

    java planeta-codigo programacion spring

    Spring

    Java

    No es raro la necesidad de querer cambiar algunos valores de la configuración de una aplicación sin ningún cambio adicional en el código. Normalmente la configuración se externaliza en un archivo de texto en un determinado formato como properties o yaml que se lee al iniciarse la aplicación pero que al querer hacer cambios y hacerlos efectivos requiere reiniciar la aplicación.

    Para evitar la caída de servicio en un reinicio de aplicación requiere tener varias instancias de la aplicación, ir sacando del balanceador las instancias para que no le soliciten nuevas peticiones, reiniciarlas y añadirlas de nuevo al balanceador si se hace balanceo de carga en el servidor o reiniciar las aplicaciones progresivamente si se hace en el cliente. Y esto con todas las instancias del servicio. Spring Cloud Config y Spring Boot entre sus funcionalidades de configuración posee una que consiste en recargar la configuración o ciertas partes de la misma. Para ello Spring Boot Actuator ofrece un endpoint con el que disparar la recarga.


    Continuar leyendo...

  • Desempaquetado y análisis de teclado y ratón inalámbrico V7 CKW200

    hardware planeta-codigo

    Los teclados básicos son más que suficientes para la mayoría de usuarios, incluso los inalámbricos solo cuestan unos pocos euros más. Buscaba un teclado inalámbrico y al final opté por el V7 CKW200 por ser barato, tener un diseño atractivo, ser teclado completo, inalámbrico y tener teclas multimedia para subir y bajar el volumen entre otras. Este modelo es un combo de teclado y ratón inalámbrico baratos pero básicos, el teclado funciona perfectamente durando las pilas casi un año y medio, el ratón del V7 CKW200 finalmente lo sustituí por uno con cable, un Logitech M90.
    Continuar leyendo...

  • El comando fork bomb explicado

    gnu-linux planeta-codigo

    GNU

    Linux

    El siguiente aparente, gracioso e inocente conjunto de caracteres que parecen una colección de varios extraños emojis es un comando que si se ejecuta en una terminal de GNU/Linux crea gran cantidad de procesos de forma continua hasta que los recursos del sistema se agotan causando que sea inusable haya que reiniciarlo generando los problemas que de ello se deriven si el reinicio es forzado, este comando es el comando fork bomb para el intérprete de comandos bash.


    Continuar leyendo...

  • El editor de archivos e IDE minimalista Visual Studio Code

    planeta-codigo programacion software

    Visual Studio Code

    Para trabajar y desde que empecé a usar un generador estático para el blog primero con Octopress y luego con Hugo he necesitado un editor de archivos de texto y de código fuente. Uno de los más conocidos es Sublime Text con numerosas funcionalidades y atajos de teclado para realizar muchas acciones únicamente pulsado unas pocas teclas y sin necesidad de ratón en gran medida. Sublime Text está muy bien pero no es gratuito por lo que después de un tiempo empecé a usar Atom, sin embargo, al estar este basado en Electron que en realidad es un navegador Chrome y JavaScript con Node su rendimiento se nota pobre. Buscando más alternativas la gente mencionaba bastante a menudo Visual Studio Code, lo probé, es el que más me ha gustado de todos y el que uso ahora.


    Continuar leyendo...

  • Registro y descubrimiento de servicios con Spring Cloud Netflix

    java planeta-codigo programacion spring

    Spring

    Java

    Los microservicios en una aplicación con una arquitectura de microservicios son efímeros, se crean, se escalan para atender picos de mayor demanda, pueden desaparecer por problemas de la red de comunicaciones que no es fiable y volverse a crear en una ubicación diferente. Por esta naturaleza efímera es necesario un servicio con el cual los clientes de los microservicios puedan encontrarlos y que los microservicios utilizan para registrarse cuando se inician.


    Continuar leyendo...

  • Aplicaciones basadas en microservicios

    planeta-codigo programacion spring

    Spring

    Java

    La arquitectura de las aplicaciones está cambiando en lo que era lo habitual hace no tanto. Con el desarrollo de las redes de comunicación entre computadoras tanto en una red local con ethernet como en internet con el protocolo TCP/IP se desarrollaron las primeras aplicaciones cliente/servidor como es un servidor web y un navegador o una base de datos y una aplicación.

    A las páginas HTML de los servidores web, estáticas hasta entonces, se les añadió lógica de servidor para procesar datos y generar el contenido dinámicamente, se crearon las aplicaciones web ejecutadas en el servidor en un principio en lo que ahora denominamos monolitos en forma de código espagueti o más estructurado con los denominados frameworks del lenguaje de programación de turno empleando el modelo de tres capas formadas por la presentación, lógica y base de datos.


    Continuar leyendo...

  • Los fragmentos en GraphQL

    java planeta-codigo programacion

    GraphQL

    Los fragmentos en el contexto de GraphQL pueden ser de dos tipos, definidos previamente o definidos en linea. Los primeros permiten simplificar las consultas definiendo en un bloque una colección de datos a recuperar si tener que indicarlos explícitamente individualmente, lo que resulta útil para no repetir el mimo grupo de datos si se utiliza en varias consultas diferentes. Los fragmentos en línea permiten recuperar unos datos u otros en función del tipo de la instancia de la cual se quieren recuperar.


    Continuar leyendo...

  • Usando directivas en GraphQL

    java planeta-codigo programacion

    GraphQL

    En GraphQL construyendo la consulta adecuada se recuperan exclusivamente los datos solicitados.

    Por ejemplo, si de un libro solo se requieren las propiedades el id, title y date de entre todas las que tienen la consulta sería en este caso la siguiente para una consulta que devuelve los datos de un conjunto de libros.

    1
    2
    3
    4
    5
    6
    7
    
    query Books {
      books {
        id
        title
        date
      }
    }
    query-1.graphql

    Si se desea recuperar solo el id y title sin el date la consulta debe ser diferente.


    Continuar leyendo...

  • El editor, explorador e IDE GraphiQL para una API con GraphQL

    java planeta-codigo programacion

    GraphQL

    Hace ya un tiempo escribí una serie de artículos sobre GraphQL para desarrollar una API en una aplicación como alternativa a desarrollarla basada en REST. En esa serie de artículos explicaba varios conceptos básicos e introductorios pero suficientes para desarrollar una API completamente funcional con GraphQL usando el lenguaje de programación Java. Sin embargo, sobre algunos otros conceptos y posibilidades de GraphQL no había escrito.

    Uno de esas posibilidades de GraphQL es la herramienta GraphiQL que es un editor interactivo para construir consultas y explorar la API. Una de sus mayores ventajas es que ofrece asistencia contextual y proporciona mensajes de error en caso de que la sintaxis de la consulta sea errónea. En los artículos que escribí con anterioridad los ejemplos los hice usando el comando curl. Ahora que he visto y aprendido algunas pocas cosas más de GraphQL en este artículo explico como usar la herramienta GraphiQL como alternativa a curl.


    Continuar leyendo...

  • Sobre las competiciones deportivas de videojuegos o eSports

    opinion planeta-codigo

    El sector de los videojuegos es una industria que mueve miles de millones de euros en todo el mundo mayor que sectores con más historia como la industria del cine, los juegos triple A poseen inversiones y desarrollos cinematográficos. Los computadores y aparatos electrónicos están muy relacionados con los videojuegos ya desde hace mucho tiempo desde que aparecieran en 1947 el primer videojuego. En la actualidad los videojuegos son unos programas informáticos de los que en la computación personal más de cómputo requieren a los ordenadores, una buena parte de la presión para mejorar los computadores proviene de los videojuegos con tarjetas gráficas muy potentes, cantidades de memoria consideradas enormes hasta hace una década, procesadores más potentes en la guerra actual por añadir más núcleos a las CPU. Recientemente los sistemas operativos y entornos de escritorio han empezado a aprovechar de las capacidades de las tarjetas gráficas o GPU para proporcionar efectos visuales y acelerar algunas operaciones de cálculo más eficientemente que en la CPU.


    Continuar leyendo...

  • Personalizar el mensaje emitido de un objeto en Log4j

    java planeta-codigo programacion

    Java

    Usar una librería como Log4j es probablemente indispensable en una aplicación para obtener información de su funcionamiento, mensajes informativos, advertencias, errores o excepciones que se están produciendo o se han producido. Los mensajes que se emiten contienen información útil para monitorización en tiempo real o su inspección pasado un tiempo.

    En cada punto de la aplicación en la que se desea emitir una traza es necesario proporcionar el formato del mensaje y sus parámetros extraídos de las propiedades de los objetos con la intención obtener una traza con los valores de determinadas propiedades. Si es habitual emitir una traza de ciertas clases para evitar poner la misma traza en diferentes puntos de la aplicación Log4j posee una funcionalidad para transformar en objeto en un mensaje personalizado como se comenta en su documentación para mensajes.


    Continuar leyendo...

  • Después de la guerra del número de núcleos en los procesadores, ¿vendrá la guerra de la computación heterogénea o manycores?

    hardware opinion planeta-codigo

    Intel

    AMD

    Hace alguna década los procesadores eran de un solo núcleo y hasta la aparición de Windows NT y GNU/Linux los sistemas operativos no se aprovechaban plenamente las capacidades de multiprogramación de los procesadores que ya se incluían desde los Intel 386.

    La mejora de rendimiento en los procesadores se conseguía a base de mejores diseños en los procesadores como la segmentación, superescalaridad, caches de datos e caches de instrucciones más grandes que era posible debido también en parte al mayor número de transistores que permitían incluir los procesos de litografía de tamaño más reducidos para los transistores, también por la adición de nuevas instrucciones en el conjunto de la arquitectura o ISA, o mayor número de registros y de mayor tamaño entre otras cosas.


    Continuar leyendo...

  • Identificar todas las trazas de una petición en una aplicación web Java con Log4j

    java planeta-codigo programacion

    Java

    En una aplicación web hay múltiples usuarios realizando peticiones al servidor de modo que al usar una librería de logging como Log4j las trazas de información de los diferentes usuarios aparecerán intercaladas. En esta maraña de trazas resulta difícil obtener la secuencia de trazas de una petición siendo la diferencia entre descubrir la causa de un error o pasar varias horas revisando trazas sin encontrar nada significativo en la inmensa cantidad de ellas relativas a otras peticiones. La librería Log4j proporciona un mecanismo para seguir la secuencia completa de trazas de una petición con el concepto denominado fish tagging.


    Continuar leyendo...

  • Como recuperar Arch Linux después de una actualización que provoca el sistema no inicie

    gnu-linux planeta-codigo software-libre

    Instalar un sistema GNU/Linux es sencillo y está muy bien, también es importante saber como intentar recuperarlo cuando una actualización de software provoca que el sistema no se inicie con normalidad hasta el entorno de escritorio gráfico, el motivo puede ser incluso un kernel panic. El objetivo de la recuperación es corregir el problema del inicio, si no es posible, recuperar los valiosos documentos, imágenes, vídeos u otros archivos antes de finalmente llegar al punto de reinstalar el sistema para devolverlo a un estado correcto aunque quizá perdiendo los datos que tuviese.
    Continuar leyendo...

  • La librería Log4j para emitir trazas en aplicaciones Java

    java planeta-codigo programacion

    Java

    La librería Log4j es una librería para emitir las trazas de depuración e información indispensables cuando son requeridas en una aplicación Java. Es la librería sucesora de logback y aunque no es imprescindible suele usarse en combinación con slf4j ya que esta permite cambiar de librería de logging subyacente sin hacer ningún cambio en la aplicación.

    Algunas de las nuevas características de log4j son:

    • Rendimiento mejorado usando funcionalidades asíncronas en los loggers.
    • Soporte para múltiples APIs como SL4J, Commons Logging y java.util.logging (JUL).
    • Sin encadenamientos a la librería al poder en cualquier momento usar cualquier librería compatible con SLF4J.
    • Recarga automática de la configuración sin perder ninguna traza.
    • Filtrado avanzado basado en datos de contexto, marcadores, expresiones regulares y otros componentes.
    • Arquitectura basada en plugins.
    • Soporte de propiedades definidas en archivos de configuración, propiedades del sistema, variables de entorno, el mapa ThreadContext y datos del evento.
    • Soporte de lambdas de Java 8. Las expresiones lambdas no se evalúan si no está activado el nivel de log consiguiendo el mismo efecto que con una sentencia if pero en menos código.
    • Niveles de log personalizados fácilmente definibles sin necesidad de realizar subclases.
    • Recolección de basura reducida lo que evita presión al recolector de basura y mejora el rendimiento de las aplicaciones.

    Por defecto, la configuración de Log4j se describe en un archivo xml aunque también soporta definirlo en un formato menos verboso como yaml. La siguiente aplicación de Spring Boot al iniciarse emite en la consola varios mensajes usando log4j2.


    Continuar leyendo...