Hugo es un de las mejores herramientas en la categoría de generadores de páginas web estáticas, también puede utilizarse para generar bitácoras. Su fácil instalación, rapidez, personalización o su gran sistema de plantillas y taxonomía son varias de sus características destacadas. Con Hugo conseguí resolver varias de las necesidades que tenía para Blog Bitix, la gestión de enlaces internos y externos, personalización de diseño y procesado de imágenes.
Continuar leyendo...
Dada una consulta con los datos a recuperar GraphQL hace una llamada al correspondiente resolver o data fecher para obtener el valor de cada propiedad. Cuando se tratan de propiedades en un java bean esto no supone ningún problema en cuanto a rendimiento pero cuando obtener el valor de una propiedad es costoso la consulta resulta ineficiente.
Por ejemplo, siguiendo el ejemplo que he utilizado en anteriores artículos sobre GraphQL de una librería en la que hay un tipo para representar un libro con una propiedad con sus comentarios, con una consulta que permite recuperar los libros para cada uno de ellos se llama al resolver que recupera los comentarios. En este ejemplo no ya que están los datos en memoria y no se usa una base de datos pero si recuperar los comentarios de cada libro supusiera una consulta SQL en una base de datos relacional (o tráfico de red en una base de datos NoSQL u otro servicio) y la lista de libros devuelta fuese grande cada vez que se realizará esta consulta el número de sentencias SQL a ejecutar sería grande y el tiempo de respuesta pobre y con una carga mayor para el servidor de base de datos.
Los navegadores web utilizan la palabra clave sentencia debugger; como punto de ruptura para iniciar el depurado de un código JavaScript. En vez de poner el punto de ruptura desde el navegador utilizando la herramienta de depuración para desarrolladores con esta instrucción se puede poner en el código fuente donde se desee, de esta forma se evita buscar entre los múltiples recursos que haya cargados en la página e ir a la línea en la que se desea iniciar la depuración poniendo un punto de ruptura.
Internet es la revolución de finales del sigo XX e inicio del siglo XXI equivalente a la revolución industrial de los siglos anteriores. Está transformando la sociedad y cambiando aquellos sectores en los que se adentra.
Continuar leyendo...
A lo largo del tiempo han surgido varias formas de gestionar las excepciones. En C hace muchos años eran con códigos de error, en Java se incorporaron en el lenguaje las excepciones checked o unchecked o la nueva clase Optional en Java cada una con sus ventajas y y algunas deficiencias. Más recientemente usando un tipo tal que Either<L,R> son otra forma para el tratamiento de errores sobre las opciones anteriores.
Continuar leyendo...
Ya han pasado varios meses desde que hice germinar en septiembre varias bellotas de roble, ha pasado el invierno, ha llegado la primavera y ahora tengo unos pequeños plantones de roble. Al germinar y crecer hasta la altura entre unos 10 o 15 centímetros en un primer momento desarrollaron unas siete hojas de un tamaño bastante grande. Con el invierno las hojas se les comenzaron a amarillear y aún en mayo todavía tienen varias aunque en algún momento se les caerán, cuando veo que la hoja ya está bastante amarilla pruebo a ver si la hora se desprende fácilmente sin hacer mucha fuerza.
Apache Tapestry es uno de los mejores frameworks web para Java que he usado, sin embargo, también tiene algún incordio o curiosidad. Una de ellas es que las plantillas han de ser XML bien formado y en este caso que comento en el que necesitaríamos una plantilla con etiquetas desbalanceadas nos obliga a buscar una solución, esta es la que uso.
Continuar leyendo...
El prompt de la terminal es el símbolo del sistema que precede al comando que introducimos en la terminal y por defecto indica el directorio de trabajo que utilizarán los comandos y el directorio que utilizarán las rutas relativas. El prompt del intérprete de comandos Bash se puede personalizar para por ejemplo modificar el color de su texto y la información que incluye con las preferencias del usuario.
Con la clase Optional añadida en el JDK en la versión 8 del lenguaje Java se puede evitar una de las excepciones más comunes que se produce cuando se hace uso de una referencia nula a un objeto.
Continuar leyendo...
Una de las novedades que incorporó Java 7 es la sentencia try-with-resources con el objetivo de cerrar los recursos de forma automática en la sentencia try-catch-finally y hacer más simple el código. Aquellas variables cuyas clases implementan la interfaz AutoCloseable pueden declararse en el bloque de inicialización de la sentencia try-with-resources y sus métodos close() serán llamados después del bloque finally como si su código estuviese de forma explícita.
Un ejemplo de código que lee una línea de un fichero usando la sentencia try-with-resources es la siguiente de Java 7. Como se observa no es necesario llamar de forma explícita al método close para liberar los recursos de la instancia de la clase BufferedReader.
Las excepciones son una forma de gestionar las condiciones de error que se dan en los programas. En el lenguaje C se utiliza el valor de retorno de la función para determinar la condición de error que se ha producido, el problema es que comprobar el valor de retorno puede ignorarse y la gestión de errores está mezclada con la tarea del programa.
El lenguaje Java utiliza un mecanismo de excepciones, las excepciones son objetos que se lanzan cuando se produce una condición de error. Todas las excepciones en Java heredan de Throwable subdividiéndose en Error y Exception, las primeras son condiciones de error del sistema y las segundas condiciones de error del programa. A su vez las Exception pueden ser checked si heredan de esta y son aquellas que el compilador fuerza a que sean capturadas no pudiendo ignorarse, han de capturarse en una construcción try catch o declarar que el método puede lanzar la excepción no capturada. Las excepciones unchecked heredan de RuntimeException que heredan a su vez de Exception pero tienen la particularidad de que no es necesario capturarlas ni declararlas como que se pueden lanzar debido a que se consideran condiciones de error en la programación como un acceso a un array fuera de rango que produce un ArrayIndexOutOfBounds, el conocido NullPointerException cuando se utiliza una referencia nula, otro es ArithmeticException que se produce al dividir por 0.
Uno de los sistemas de control de versiones más utilizado es Git. Bash es el intérprete de comandos por defecto en la mayoría de distribuciones GNU/Linux. A la hora de trabajar en la terminal y estando como directorio actual en un directorio que está bajo el control de versiones de git bash por defecto no muestra ninguna información del estado de los archivos en su repositorio en el símbolo del sistema o prompt.
Hace unos días Slimbook presentaba el nuevo equipo AIO Curve con una pantalla de 24 pulgadas ampliando su catálogo de productos en una nueva categoría, un todo en uno, all-in-one o AIO. Como es el caso de estos modelos el equipo consta de un monitor en el que en parte trasera de la pantalla está integrada el procesador, memoria, almacenamiento SSD, todas las piezas como salida de red, wifi, audio y conexiones. La características de estos equipos es que no necesitan de mucho espacio, solo el que ocupe el monitor, son silenciosos y requiere de algún cable menos.
Una de las tareas más importante que realizan algunas aplicaciones es el manejo de la entrada y salida ya sea al sistema de ficheros o a la red. Desde las versiones iniciales de Java se ha mejorado soporte añadiendo programación asíncrona de E/S, permitir obtener información de atributos propios del sistema de archivos, reconocimiento de enlaces simbólicos y facilitado de algunas operaciones básicas.
Continuar leyendo...
Ya he comentado que a mi los Mac ni macOS me convencen por varios motivos, por su precio, por el software libre y porque lo que he podido comprobar no me ha parecido que tenga nada de lo que GNU/Linux hoy en día tenga algo que envidiar, algunas cosas en macOS quizá sean algo mejor pero otras en GNU/Linux también en él lo son.
Tras regalar mi antiguo portátil Sony VAIO ahora estoy buscando nuevo equipo y barajando opciones. El Sony era y es un buen equipo con el que he estado muy contento, tenía un Intel Core i5 3210M Ivy Bridge de 22 nanómetros con dos núcleos y 4 hilos con el bug Meltdown y Spectre, 8 GiB de memoria RAM, almacenamiento SSD de 256 GiB SATA de almacenamiento y una pantalla de resolución 1600x900, la gráfica era un integrada Intel HD 4000 básica pero más que suficiente para un entorno de escritorio y con buen soporte en GNU/Linux por sus controladores de código abierto. Sin embargo, aunque era un portátil lo usaba únicamente como equipo de escritorio sin moverlo en ningún momento y en cuanto a memoria los 8 GiB de memoria sigue siendo perfectamente útiles pero en mi uso en algunos casos se me quedaban cortos al virtualizar o usar varios contenedores Docker.