En el lenguaje de programación Java los punteros no existen de la misma forma que en otros lenguajes como C o C++. En Java existen los punteros o referencias pero no son libres de apuntar a cualquier dirección de memoria del programa, en C y C++ lenguajes más destinados a la programación de sistemas y cercanos al lenguaje de la máquina ofrecen manipulación de punteros pudiendo obtener un puntero con la dirección de memoria de una variable.
Las tareas de un programador no consisten únicamente en escribir líneas de código o de un arquitecto decidir que usar o no usar y como. Una tarea importante de un programador o un arquitecto debe ser también escribir o mantener documentación actualizada. La arquitectura empleada en una aplicación permite conocer cuáles son sus componentes y piezas específicas de las que se compone sin tener que analizar el código fuente. La arquitectura de una aplicación puede ser de muchas formas, las decisiones de arquitectura también son un aspecto susceptible de ser documentadas, que permitan conocer cuáles fueron las motivaciones para elegir entre unas opciones y otras y que cambios de arquitectura ha sufrido una aplicación y por que motivos.
Continuar leyendo...
Matomo es una alternativa a Google Analytics con funciones similares que cubren las necesidades de la mayoría de sitios web. Es software libre con algunas funciones premium que requieren comprar una licencia anual de uso. Matomo se puede hospedar on-premise que requiere administrar esa infraestructura o en la nube ofrecida por la propia Matomo. En el artículo muestro en un ejemplo como empezar a usar Matomo en un sitio web con Docker.
Continuar leyendo...
El juego World of Warships es un juego de estrategia en el que la habilidad en el manejo del mando o disparo no es tan importante para ser un jugador que tenga un nivel por encima de la media. Otra parte importante de este juego es el juego en equipo en la que cada miembro según clase de barco y características ha de desempeñar su papel para que el equipo consiga la victoria. Conocer la misión de cada barco, las características de barco propio y del contrario junto con otras nociones básicas como que objetivos enemigos son los prioritarios, dónde posicionarse y que errores comunes no cometer también contribuyen a ser un mejor jugador.
Continuar leyendo...
Google Analytics es la herramienta más utilizada para implementar la funcionalidad de analítica en un sitio web. Es fácil de usar, de implementar, no requiere mantenimiento de infraestructura propia, es gratuita, ofrece numerosas funcionalidades que ayudan enormemente a obtener información del sitio web, de los usuarios, obtener informes. Sin embargo, Google Analytics es una tercera parte con la que se comparte la información del sitio web que supone una pérdida de privacidad y protección de datos del sitio web y requiere instalar un script de JavaScript que ralentiza la carga de las páginas web. GoAccess ofrece analítica web en tiempo real que al contrario que Analytics obtiene los datos únicamente desde el lado del servidor basándose en los archivos del log del servidor web, es software libre y es utilizable sin necesidad de involucrar a terceras partes.
Continuar leyendo...
El juego de rol For the King no destaca por tener los gráficos más avanzados o una historia muy elaborada. Lo compensa con una muy buena implementación de lo esencial en un juego de rol con múltiples clases de personajes, estadísticas en cada atributo, equipo y objetos, un sistema de combate sencillo, rápido y bien implementado basado en estadística que requiere pensar en la acción a realizar durante el turno de combate. Un juego sencillo a la vez que bastante entretenido en la categoría de juego de rol, estrategia, exploración de mazmorras y combate por turnos.
Continuar leyendo...
Una cosa es escribir artículos de ejemplo y otra usarlos en una empresa que factura unos cuantos cientos de millones de euros cuyo servicio es considerado crítico en producción. Por ejemplo por citar algunos artículos de este año, algo como la autenticación de los usuarios con Keycloak no es sencillo implementarlo e integrarlo en una organización con numerosos sistemas ya funcionando, o implementar un segundo factor de autenticación, o un sistema para realizar las traducciones, o trazabilidad con Sleuth y Zipkin, o tener una herramienta para consultas SQL en producción con SQLPad, o definir una autoridad de certificación, o disponer de una arquitectura de referencia en grado de producción de las aplicaciones Consul, Vault y Nomad de HashiCorp. No solo es usarlo hay que mantenerlo, definir un plan para intervenciones comunes como realizar copias de seguridad de las bases de datos o actualizaciones a nuevas versiones sin que afecte al servicio. Así que los artículos quizá estén muy bien pero hay algunas cosas más a tener en cuenta para aplicarlos en un caso de producción en un organización.
Con este artículo continúo haciendo de vez en cuando una pequeña donación a algunos programas que utilizo habitualmente y proyectos que me parecen importántes e útiles con la intención de apoyar su desarrollo aunque sean cantidades pequeñas. Este es ya el octavo artículo de donación que escribo y poco a poco las cantidades que he donado ya empiezan a ser respetables.
Continuar leyendo...
Algunas personas y en algunos proyectos Java añaden en la declaración de cada parámetro de un método o variable local la palabra reservada final.
La palabra final tiene su utilidad pero hacerlo de forma indiscriminada y en la totalidad de cada parámetro y variable local de cada método hace más verboso el código sin proporcionar una utilidad significativa porque Java ya en ciertas circunstancias considera a muchas variables efectivamente como final, si al escribir el código se sigue la recomendación de no hacer nunca asignaciones sobre variables que son parámetros y se prefiere crear una nueva variable local en vez de modificar el valor de una existente.
La internacionalización y localización son funcionalidades habitualmente necesarias de implementar en una aplicación. La localización ha de tener en cuenta los diferentes literales para cada idioma y no hardcodearlos en el código fuente de la aplicación, las diferentes formas plurales de los lenguajes, el formato de números e importes, fechas e incluso utilizar la forma correcta para ordenar cadenas alfabéticamente.
Continuar leyendo...
La internacionalización (i18n) y localización (i10n) en un proyecto de software es muy habitual y necesario cuando la aplicación ha de soportar múltiples lenguajes, países, regiones, culturas o en el mismo país diferentes idiomas oficiales según la región. La traducción necesita un flujo de trabajo coordinado entre los desarrolladores de la aplicación que realizan la internacionalización y los traductores que realizan la localización. Para facilitar el flujo de trabajo y funcionalidades útiles para los traductores hay herramientas específicas para la tarea, una herramienta para traducciones de software libre es Weblate.
Continuar leyendo...
Con el paso de los años las arquitectura recomendadas han cambiado. En el caso de las aplicaciones web pasando por la arquitectura spaghetti, a la por capas y finalmente con una mezcla de hexagonal, domain-driven-design o DDD y dependiendo del caso siendo RESTful, utilizando CQRS, estándo dirigida por eventos o event-driven y en los casos en los que su aplicación es útil usando event sourcing.
Continuar leyendo...
Los teclados mecánicos son un producto de mayor calidad que los teclados de membrana más baratos. Los teclados mecánicos son apreciados por sus usuarios por la diferencia de tacto en la pulsación de las teclas, durabilidad, personalización y formatos de tamaños. Los teclados mecánicos son más caros pero para los usuarios que hacen un uso intensivo de ellos durante muchas horas son una mejora significativa en la escritura y pulsación de teclas.
Continuar leyendo...
Para implementar relaciones jerárquicas en base de datos relacionales hay varias soluciones conocidas. En este artículo comento las más conocidas con sus desventajas y cual elegir en función de si la base de datos soporta consultas recursivas o en caso de que no las soporte.
Continuar leyendo...
El patrón Singleton es un patrón de diseño muy utilizado, este patrón garantiza que de una clase solo haya una única instancia. En Java hay varias formas de implementar el patrón, algunas son más sencillas otras no son thread-safe o con evaluación lazy.
Continuar leyendo...