• Los cuantificadores greedy, reluctant y possessive en expresiones regulares

    java planeta-codigo programacion

    En el mundo de las expresiones regulares hay tres tipos de cuantificadores que varían el comportamiento según el número caracteres que toman para encontrar ocurrencias. Son greedy o avaricioso, reluctant o reacio y possessive o posesivo. Cada cuantificador tiene una expresión en una expresión regular. La opción más habitual es el cuantificador greedy, añadiendo una ? se convierte en reluctant y añadiendo un + se convierte en possessive.

    Greedy  Reluctant  Possessive  Significado
    X?      X??        X?+         X, uno o ninguno
    X*      X*?        X*+         X, cero o mas
    X+      X+?        X++         X, uno o más
    X{n}    X{n}?      X{n}+       X, exactamente n veces
    X{n,}   X{n,}?     X{n,}+      X, al menos n veces
    X{n,m}  X{n,m}?    X{n,m}+     X, al menos n veces pero no mas de m
    

    Aparentemente cada uno de los cuantificadores realiza lo mismo, sin embargo, hay diferencias en su comportamiento al hacer emparejamientos entre los elementos de la expresión regular y la cadena en la que se está aplicando.


    Continuar leyendo...

  • Cómo seleccionar y hacer germinar facilmente semillas de roble

    fuera-de-tema

    Las semillas de roble son sencillas de hacer germinar, básicamente lo único que necesitan es humedad durante unas semanas. Puede emplearse algodón u otro material que haga que la bellota permanezca húmeda. En el caso de querer hacer germinar muchas bellotas el algodón en mis pruebas no es lo más adecuado por tener que gastar este elemento y no ofrecer el mejor resultado. No hace falta más que una simple bolsa de plástico cerrada con algo de agua sin que las belletas esten encharcadas pero si húmedas es suficiente y da muy buen resultado.
    Continuar leyendo...

  • Cache simple de datos y con Ehcache en Java

    java planeta-codigo programacion

    Java

    En ocasiones es necesario usar una cache que contenga un número de elementos hasta un límite y que cuando se vayan añadiendo más se vayan borrando otros según algún criterio. En Java si no queremos añadir una nueva dependencia al proyecto con una librería especializada como Ehcache la clase LinkedHashMap sirve para aquellos casos de uso simples sin necesidad de dependencias adicionales.

    Si el coste de obtener algunos datos es costoso ya sean porque hay que obtenerlos de una base de datos, mediante una operación de disco o red o hay que hacer algún cálculo sobre ellos en estos casos guardar los datos en una cache supondrá un aumento notable de rendimiento de mayor o menor medida según el coste de la operación que evita la cache. Usar una cache es viable si es posible usar datos no completamente actualizados y dedicar algo de espacio en memoria para la cache. Si en la mayor parte de las búsquedas que se hacen en la cache el elemento buscado está ya presente se considera un acierto o hit y si no está presente un fallo o miss, cuando mayor sea el número de aciertos en la cache mayor será el aumento rendimiento percibido.


    Continuar leyendo...

  • 37 buenos libros sobre sobre Java, Linux, DevOps y desarrollo que he leído

    blog gnu-linux java planeta-codigo programacion

    Con el buscador Google y usando las palabras clave adecuadas es raro no encontrar información sobre aquello que estemos buscando. Pero en internet la información suele estar muy dispersa y en cada sitio la información no es completa y con profundidad, internet esta muy bien como apoyo o para precisar una determinada cuestión. Sin embargo, los libros siguen siendo un buen material de aprendizaje, entre sus ventajas está que la información está mejor organizada con una estructura más didáctica y dependiendo del libro el tema tratado es explicado con profundidad. Desde el 2014 son unos cuantos libros más los que he leído.
    Continuar leyendo...

  • El antipatrón de inicialización de variables con dobles llaves en Java

    java planeta-codigo programacion

    Java

    Java es un lenguaje más verboso y con menos azúcar sintáctico (o veneno para ratas, según se mire) que otros lenguajes. Esto hace que por ejemplo para declarar e inicializar objetos tan comunes en un programa de tipo Map, List o Set que contengan un número fijo de elementos haya que escribir varias líneas de código. Estas clases de estructuras de datos del grupo de colecciones son de las más usadas en una aplicación Java. A la fecha de escribir este artículo Java no soporta literales para las colecciones que reduzca las lineas de código para inicializarlas y mejore la legibilidad del código aunque en versiones recientes si se han incorporado métodos de utilidad que cubren el requerimiento.


    Continuar leyendo...

  • Sustituir caldera de gas por un termo eléctrico Fleck Duo 7 50

    Tener una caldera es cara, bien por el coste fijo del gas tanto por el alquiler del contador como por el precio de la disponibilidad pero también por las revisiones obligatorias que hay que hacerles por motivos de seguridad. Con motivo de que me tocaba hacer la revisión de la caldera me he decidido a hacer la sustitución por un termo eléctrico, finalmente elegí un Fleck Duo 7 de 50 litros.
    Continuar leyendo...

  • La búsqueda de ejemplares de roble común

    fuera-de-tema

    Quercus Robur

    Hace ya mucho tiempo de pequeño planté alguna semilla de manzana por curiosidad para ver si germinaba, y sí germinó, pero al cabo de unos meses por desconocimiento de la forma de como cuidar una planta, excesivo riego o tierra no adecuada el retoño de manzano pereció. También planté alguna bellota de algún tipo de roble que alguno de mis hermanos trajo a casa, y sí germinó, y al igual que el manzano duró unos cuantos meses pero sucumbió de la misma forma.


    Continuar leyendo...

  • Desempaquetado maletín herramientas Mannesmann y bandejas melamina Balvi

    Tener en casa un pequeño conjunto de herramientas es necesario para realizar pequeñas tareas domésticas, desde quitar un grifo a atornillar algún elemento. Buscando en el gran catálogo del que dispone Amazon en su web quería uno que fuese bastante completo sin ser muy caro y aunque no fuese de calidad profesional cumpliese con las tarea. Hay muchos modelos pero me fijé en uno de Mannesmann modelo M29085. También necesitaba unas bandejas para la cocina y salón.


    Continuar leyendo...

  • Ejecutar varias tareas de forma concurrente en Java

    java planeta-codigo programacion

    Java

    En el artículo de iniciación a la programación concurrente en Java explicaba las facilidades que proporciona este lenguaje para la programación de tareas con varios hilos que implica la sincronización y bloqueo mediante varias primitivas como semáforos o locks, ponía el ejemplo y su código de dos de los típicos ejemplos que suelen usarse en las asignaturas de sistemas operativos, el problema de los filósofos y el del barbero.

    En el caso de tener varias tareas que tardan unos segundos si las ejecutamos de forma secuencial el tiempo que tardarán será la suma de todas las tareas. Si las tareas no son dependientes, no hace falta esperar a que termine una anterior para comenzar otra, o el problema se puede descomponer en varias partes ejecutándolas de forma concurrente y simultáneamente el tiempo total que tardarán aproximadamente será el tiempo de la tarea más lenta.


    Continuar leyendo...

  • 4 formas de hacer un bucle for en Java

    java planeta-codigo programacion

    La forma habitual en Java de hacer un bucle es con una sentencia for o while pero con el añadido de los iteradores en Java 5 no hace falta tener una variable para conservar el índice del bucle. Ya en Java 8 se han añadido los streams que ofrecen otras nuevas formas de iterar sobre los elementos de una colección en este último caso con técnicas propias de lenguajes funcionales.
    Continuar leyendo...

  • Iniciación a la programación concurrente en Java

    java planeta-codigo programacion

    Java proporciona en su API numerosas primitivas para realizar programación concurrente. La programación concurrente permite realizar varias tareas simultáneamente aprovechando los múltiples núcleos de los procesadores modernos con un tiempo de ejecución total para un conjunto de tareas significativamente menor. Dos de los problemas de concurrencia más conocidos son el problema de los filósofos y del barbero que en este artículo muestro como implementar usando varias de las primitivas ofrecidas por Java.
    Continuar leyendo...

  • Iniciar rápido un proyecto de Java con Gradle o de Spring con Spring Initializr

    java planeta-codigo programacion

    Gradle

    Spring

    Java

    Cuando se empieza un proyecto nuevo desde cero se debe disponer de una herramienta de construcción, una estructura de directorios que siga las convenciones de la herramienta de construcción, añadir las dependencias que vayamos a utilizar y alguna clase que muestre algo al ejecutarlo para comprobar que disponemos de la infraestructura básica de compilación, teses, generación de artefactos e inicio de proyecto.

    Dado que las clases Java hay que compilarlas para facilitar la tarea están las herramientas de construcción y estas siguen una serie de convenciones en la estructura de directorios además de requerir algunos archivos. En un proyecto de duración de varios meses o años el tiempo dedicado a crear esta infraestructura básica es despreciable y no complicado si nos basamos en un proyecto similar del que copiar, sin embargo, para hacer alguna prueba rápida es costoso.


    Continuar leyendo...

  • Portlets con el framework Apache Tapestry y Apache Pluto

    java planeta-codigo programacion tapestry

    Los portales ofrecen una solución para los casos de uso de integración de aplicaciones, edición de contenido a modo de CMS, agregación de blogs, foros, colaboración entre personas, red social entre otros. La pieza fundamental de un portal en Java es un portlet. Desarrollar un portlet usando la API directamente no es simple, algunos frameworks que usaríamos para desarrollar aplicaciones y páginas web son usables para desarrollar portlets, Apache Tapestry es uno de ellos como muestro con un ejemplo en este artículo.
    Continuar leyendo...

  • Introducción a los portales y ejemplo de portlet con Liferay

    java planeta-codigo programacion

    Muchas organizaciones usan portales para mantener su presencia en internet. Los portales son herramientas muy versátiles que incluyen la gestión de contenidos y flujo de trabajo para publicarlo, foros, blog, … Liferay es uno de los más conocidos que usa la plataforma Java. La unidad básica funcional de un portal es un portlet que en ciertos aspectos son similares en otros diferentes a lo que son los servlets en las aplicaciones web Java.
    Continuar leyendo...