• Colecciones sincronizadas e inmutables en Java

    java planeta-codigo programacion

    Java

    En la API de Java hay un conjunto amplio de estructuras de datos de diferentes tipos para guardar información de forma eficiente según sea la necesidad de la aplicación. Desde listas de elementos ordenados, conjuntos de elementos no repetidos, estructuras clave-valor, árboles, pilas, colas, … Este conjunto de estructuras se encuentran agrupadas en la API de colecciones. Además de las estructuras de datos se les puede añadir funcionalidades en algunos casos necesarias para hacerlas inmutables de modo que no puedan ser modificadas, y para hacerlas sincronizadas en los casos que varios threads hagan operaciones de consulta y alguno operaciones de escritura de modo que las estructuras no se corrompan, una colección no sincronizada se puede convertir en una sincronizada o también existen colecciones sincronizadas diseñadas específicamente para ser eficientes en las aplicaciones concurrentes.


    Continuar leyendo...

  • Las colecciones de Java, estructuras de datos para guardar referencias a objetos

    java planeta-codigo programacion

    Java

    Los programas en su funcionamiento manejan información y esta se guarda en algún tipo de estructura adecuada según el tipo de uso de esa información, ya sea para lectura al recuperar datos y escritura par insertar nuevos datos. En Java hay dos interfaces que el resto de colecciones implementa, una interfaz es Collection y la otra es Map, estas en su contrato define una serie de métodos que las implementaciones deben proporcionar.


    Continuar leyendo...

  • Lookahead y lookbehind en expresiones regulares con Java

    java planeta-codigo programacion

    Java

    Las expresiones regulares son un gran invento y muy útil para comprobar que una cadena cumple el patrón definido en la expresión regular, hay coincidencias en partes de la cadena y para reemplazar coincidencias. Son muy potentes para realizar estas tareas pero al mismo tiempo pueden volverse en cierta medida complicadas.

    Una de las funcionalidades que soportan las cadenas es búsqueda hacia delante o lookahead y búsqueda hacia atrás o lookbehind. La primera permite examinar los siguientes caracteres de la cadena analizada y la segunda los caracteres pasados.


    Continuar leyendo...

  • Las clases anidadas inner, anónimas y locales en Java

    java planeta-codigo programacion

    Java

    Por regla general en Java cada clase se define en su propio archivo de código fuente, pdor ejemplo, una clase de nombre Order se ha de definir en el archivo Order.java. Sin embargo, esta no es la única forma de definir clases, es posible definir clases inner y anónimas que evita tener que crear un nuevo archivo de código fuente.

    Las clases inner se definen dentro de otra clase cuando esa clase inner tiene alta cohesión (su lógica está muy relacionada con la clase que la contiene), en algunos casos se emplean para ocultar los tipos que implementan la lógica. Dependiendo de si la clase inner debe acceder a los datos de la clase que la contiene o no la clase inner se define como no estática o como estática con la palabra reservada static. Las clases inner estáticas no necesitan una referencia a la clase que la contiene y por ello son algo más eficientes y el método preferido de definirlas, si la clase inner debe acceder a los miembros de la clase contenedora hay que definirla como no estática. Para desambiguar la referencia this y miembros con el mismo nombre de la clase inner con la de la clase contenedora se puede utilizar en el ejemplo Order.this.products quitando los static de las clases.


    Continuar leyendo...

  • Ofuscar datos sensibles en las trazas con Log4j

    java planeta-codigo programacion

    Ciertos datos son sensibles y hay que protegerlos al guardarlos en una base de datos, pero no sirve de nada si estos datos son emitidos en texto plano en las trazas de la aplicación invalidando cualesquiera otras medidas implementadas por muy correctas que sean en la aplicación. Los archivos de log también necesitan tener en cuenta ciertas medidas de seguridad para los datos que se emiten. Una de las medidas es no emitir en los logs los datos sensibles y otra ofuscarlos para que estén incompletos.
    Continuar leyendo...

  • Servidor OAuth, gateway y servicio REST utilizando tokens JWT con Spring

    java planeta-codigo programacion software spring

    Spring

    Java

    Hace unos días encontré un articulo del blog técnico de los desarrolladores de Idealista. En él comentaban que tenían una API para realizar simulaciones hipotecarias usando Spring como framework, Spring Security OAuth como forma de autenticación y autorización y JWT como forma de codificar el token que otorga el servidor OAuth y contiene la información necesaria para que el servidor de recursos permita o no el acceso al recurso que aloja.


    Continuar leyendo...

  • 9º aniversario del blog

    blog opinion planeta-codigo

    Blog Bitix

    Ya han pasado nueve años desde que el sábado 6 de febrero del 2010 cree un blog, El blog de pico.dev, que fue el precedente de Blog Bitix cambio motivado por pasar de Blogger a Octopress con GitHub Pages y posteriormente con Hugo.

    Dicen que las bitácoras o blogs están en decadencia por las redes sociales como Twitter u otras formas de compartir contenido como los podcast que son más cálidos por la voz humana que los fríos blogs y vídeos de YouTube dinámicos más útiles en ciertos casos que los estáticos blogs, otras formas son a través de LinkedIn o Facebook. Sin embargo, y a pesar de todo creo que los blogs son una de las mejores formas de compartir contenido simplemente por el hecho de que es un contenido indexable por los buscadores cosa que ni los podcast ni los vídeos de YouTube cumplen en la misma medida a los cuales se llega por recomendación y no por búsqueda.


    Continuar leyendo...

  • Log de SQLs y de SQLs lentas en MySQL y PostgreSQL

    planeta-codigo programacion

    MySQL

    PostgreSQL

    La información generalmente y en la mayoría de los casos es de las cosas más importantes de una aplicación. Para guardarla se suelen emplear bases de datos relacionales por sus propiedades de consistencia, transaccionalidad y propiedades ACID aunque más recientemente se ha popularizado otros sistemas no SQL como Redis o Mongo para diferentes casos de uso.

    Dos de las bases de datos relacionales más usadas son PostgreSQL y MySQL. El rendimiento de una aplicación en buena parte depende del acceso a la base de datos relacional. Por ello conviene saber cuáles, cuántas consultas se están lanzando al servidor y el tiempo tardan, además suele ser útil monitorizar especialmente las consultas que consideramos lentas al superar cierto umbral de tiempo. Con la información de que consultas, cuantas y las lentas se toman tomar acciones asegurar el buen funcionamiento del sistema, para mejorar el rendimiento de la aplicación optimizando las consultas lentas u optimizando la aplicación para que realice menos consultas al servidor de base de datos si es que hay un problema de 1+N típico en las librerías ORM como Hibernate.


    Continuar leyendo...

  • Convertir un JSON a objetos y objetos a JSON con JSON-B, Gson y Jackson en Java

    java planeta-codigo programacion

    Java

    Continuando la serie de pequeños artículos sobre cómo procesar JSON después de ver anteriormente otras dos formas, Generar, procesar y modificar documentos JSON con JSON-P en Java y Usar expresiones JSONPath para extraer datos de un JSON en Java, en este artículo hay una tercera.

    En las dos primeras si los datos son muchos o son todos la tarea de recuperar los datos uno a uno requiere una buena cantidad de código. Dado que un JSON no son nada más que valores, arrays y mapas utilizando la estructuras de datos equivalentes de Java se puede hacer una correspondencia entre los datos del JSON a objetos POJO siguiendo ciertas convenciones.


    Continuar leyendo...

  • Conferencia BilboStack 2019

    planeta-codigo programacion

    La octava edición de la BilboStack sigue fiel a su cita en el calendario a finales de enero como en anteriores ocasiones. Tampoco cambia el formato de cuatro presentaciones en dos tracks simultáneos y de ser únicamente de media jornada a la mañana par disfrutar a la tarde del networking, comida y de Bilbao para aquellos que así quieran y aprovechar el viaje si se viene de fuera. Tampoco cambia el recinto como en la edición anterior de el Palacio Euskalduna, con un aforo bastante amplio aún así las entradas han llegado a agotarse y no han quedado prácticamente sitios libres en la sala A3.


    Continuar leyendo...

  • Usar expresiones JSONPath para extraer datos de un JSON en Java

    java planeta-codigo programacion

    Java

    Para tratar JSON en Java hay varias alternativas una de ellas es utilizar la API de bajo nivel JSON-P, otra es JSON-B que requiere construir una o varias clases de Java a las que hacer la correspondencia entre el JSON y los objetos Java. Otra alternativa es utilizar expresiones o selectores que seleccionen los datos de JSON de forma similar a como se puede hacer con XPath para el caso de XML o jQuery con los elementos de HTML.


    Continuar leyendo...

  • Reproducir audio y música MIDI y sampled (wav, mp3, ogg) con Java y FFmpeg

    java planeta-codigo programacion

    Java

    FFmpeg

    En la API de Java en el paquete javax.sound.sampled hay unas pocas clases que permiten reproducir archivos de música o sonidos y en el paquete java.sound.midi contiene clases para la música o sonidos digitales o sintetizados. Los tipos de archivos de música o sonidos soportados son wav, au, aif para los archivos sampled, y archivos midi para los digitales. Nativamente Java con las clases incluidas en el JDK no puede reproducir varios formatos de archivo de sonido populares como mp3 u ogg.


    Continuar leyendo...

  • Generar, procesar y modificar documentos JSON con JSON-P en Java

    java planeta-codigo programacion

    Java

    Los servicios que ofrecen una API REST normalmente emplean JSON como formato para intercambiar datos tanto en las peticiones como en las respuestas. En Java hay varias formas de generar y procesar JSON para obtener los datos que contiene.

    Una de las formas estándar es usando la especificación JSON-P que convierte un JSON a una estructura de objetos Java que representan los datos del JSON como son los objetos Json, JsonObject, JsonArray, JsonString o JsonNumber. Esta API permite convertir una cadena de texto en formato JSON a objetos de la API y una jerarquía de objetos de la API a una cadena.


    Continuar leyendo...

  • Comandos para compilar código fuente y ejecutar programas Java

    java planeta-codigo programacion

    Java

    Aún recuerdo cuando empecé a programar con el lenguaje Java sobre el año 1997 que la compilación y ejecución del código la hacía manualmente con los comandos javac java y jar en un máquina Intel Pentium a 120 Mhz con tan solo 8 MiB, más tarde 32 MiB, con Windows 95 y Java 1.2, momento en el que ni siquiera había un IDE ni las herramientas de construcción modernas como Maven y Gradle, había que descargar manualmente las librerías de dependencias en forma de archivos jar que se requiriesen. Luego con JBuilder como IDE este se encargaba de realizar la compilación y ejecución y no hacía falta utilizar estos comandos directamente.


    Continuar leyendo...