Introducción al SQL (Parte 2: componentes básicos)

  Como se ha visto en una entrada anterior de la presente bitácora, el lenguaje estructurado de consultas está basado en el cálculo relacional de tuplas. Como resultado, toda consulta formulada utilizando el cálculo relacional de tuplas (o su equivalente, el álgebra relacional) se puede formular también utilizando SQL. Existen, sin embargo, capacidades que van más allá del cálculo o del álgebra relacional. El lenguaje SQL consta de unas 30 sentencias que permiten desde la creación de tablas, hasta la recuperación de datos, modificación de éstos, asignación de permisos, etc.
  En el contexto en el que se utiliza el lenguaje SQL, una tupla, o registro, representa un objeto único de datos implícitamente estructurados en una tabla. En términos simples, una tabla de una base de datos puede imaginarse formada de filas y columnas o campos. Cada fila de una tabla representa un conjunto de datos relacionados, y todas las filas de la misma tabla tienen la misma estructura.
  Así, la tupla es un conjunto de campos que contienen los datos que pertenecen a una misma repetición de entidad. Se le asigna automáticamente un número consecutivo (número de registro) que en ocasiones es usado como índice aunque lo normal y práctico es asignarle a cada registro un campo clave para su búsqueda.

El archivo YAML

  Se ha explicado, en una entrada anterior, que para instalar contenedores con Docker Compuesto hace falta que haya en el directorio donde se ejecute un archivo del tipo yaml.
  No obstante, este tipo de archivo no es exclusivo de su empleo con la mencionada herramienta de Docker, sino que se utiliza para otras tareas informáticas, llegando a ser muy versátil.
  YAML es un formato de serialización de datos legible por humanos inspirado en lenguajes como XML, C, Python, Perl, así como el formato para correos electrónicos especificado en RFC 2822.
  Este tipo de archivo fue creado bajo la creencia de que todos los datos pueden ser representados adecuadamente como combinaciones de listas, mapeos ("hashes", en inglés) y datos escalares (valores simples). La sintaxis es relativamente sencilla y fue diseñada teniendo en cuenta que fuera muy legible pero que a la vez fuese fácilmente mapeable a los tipos de datos más comunes en la mayoría de los lenguajes de alto nivel. Además, YAML utiliza una notación basada en la indentación y/o un conjunto de caracteres Sigil distintos de los que se usan en XML, haciendo que sea fácil componer ambos lenguajes.

Modos alternativos de instalar Telegram en Linux

  En una entrada anterior se ha hablado del cliente de mensajería instantánea Telegram, y se ha explicado el modo más sencillo de instalarlo en varios de los sistemas operativos más comunes, incluyendo uno de Linux.
  Sin embargo, el método explicado anteriormente puede fallar debido a cambios en los sistemas operativos Linux más actuales (Debian 9, Ubuntu 18.10 y derivados, etc.), por lo que en esta entrada de la presente bitácora se mostrarán otros métodos diferentes para instalar con mayor seguridad de éxito este programa de mensajería instantánea en los sistemas operativos de Linux.
  Estos métodos requieren algo más de trabajo por parte del usuario, pero lo compensan con su mayor porcentaje de éxito y su menor porcentaje de errores, sin detrimento en las futuras actualizaciones del programa.
  Los ejemplos mostrados en la presente entrada de esta bitácora se han hecho con Debian 9.

Crear imagen plantilla de máquina virtual de KVM de Linux

  Cuando se trabaja con sistemas virtualizados, lo más cómun es que se posean varias máquinas virtuales con el mismo sistema operativo, aunque cada una de ellas tenga instalados diferentes programas. Otra circunstancia que se puede dar es que se posea todo el sistema y una aplicación desplegados en numerosas máquinas, pudiendo hacer cambios sólo sobre la aplicación. Para este tipo de situaciones existen las imágenes plantillas de máquinas virtuales.
  Una imagen plantilla se puede definir como una imagen de un disco virtual de máquina virtual que sirve de modelo para la creación de más discos virtuales, o máquinas virtuales, con las mismas características que esta.
  En el caso de programas de virtualización como VMware o Virtualbox, los propios programas tienen la opción en sus menús de crear imágenes de disco virtual que posteriormente se pueden emplear como plantillas; en el primero son llamadas archivo ovf, y en el segundo archivos ova.
  No obstante, KVM no tiene esa opción para crear tales archivos de imagen de disco virtual, por lo que hay que ser más imaginativos a la hora de crear plantillas de este programa de virtualización; aunque hay que tener en cuenta que los discos virtuales del KVM (archivos con extensión ".qcow2") son más estables que los de los otros dos programas arriba mencionados, lo que hace que se puedan transformar fácilmente en otros formatos de discos virtuales (".vmdk", ".vdi", ".raw" o ".qed", por ejemplo) sin que haya demasiados problemas de compatibilidad entre distintos programas de virtualización.

Introducción a las bases de datos (Parte 3: Funciones de un sistema de gestión de bases de datos)

  Se ha visto, en entradas anteriores de la presente bitácora, que para poder operar con una base de datos (o varias de ellas) era necesario utilizar una clase de programa conocida como sistema de gestión de bases de datos, o simplemente, gestor de bases de datos.
  De esta clase de programa, se ha visto también que existen varios tipos, y qué objetivos persiguen.
  Obviamente, el sistema de gestión de bases de datos debe poder realizar ciertas funciones con estas o resultaría un programa bastante inútil. Además, las funciones están relacionadas con los objetivos antes mencionados.
  Por otra parte, para realizar las mencionadas funciones, el gestor de bases de datos necesita emplear ciertos lenguajes específicos derivados del lenguaje SQL (DDL, DML, DQL, y DCL), que también se explicarán brevemente a su debido momento.

Introducción al SQL (Parte 1: Los tipos de datos)

  El lenguaje de consulta estructurada ["Structured Query Language" ("SQL"), en inglés], más conocido popularmente como lenguaje SQL o SQL a secas, es un lenguaje específico del dominio utilizado en programación, diseñado para administrar, y recuperar información de sistemas de gestión de bases de datos relacionales.  Una de sus principales características es el manejo del álgebra y el cálculo relacional para efectuar consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como realizar cambios en ellas.
  Este tipo de lenguaje informático consiste en un lenguaje de definición de datos, un lenguaje de manipulación de datos y un lenguaje de control de datos. El alcance de SQL incluye la inserción de datos, consultas, actualizaciones y borrado, la creación y modificación de esquemas y el control de acceso a los datos. A veces, el SQL también se describe como un lenguaje declarativo, puesto que incluye elementos procesales.
  Actualmente, este tipo de lenguaje es el lenguaje de base de datos más usado. De hecho, hace tiempo que pasó a ser el estándar del ANSI y de la ISO, siendo revisado para incluir más características desde entonces. No obstante, la mayoría de los códigos SQL no son completamente portables entre sistemas de bases de datos diferentes sin ajustes.

Introducción al PHP (Parte 12: Otras sentencias de control)

  Existen algunas sentencias relacionadas con las estructuras de control que no pertenecen ni al grupo de las sentencias condicionales ni al de las sentencias de control de bucles
  Estas sentencias cumplen ciertas funciones de apoyo a las de los dos grupos antes mencionados, por lo que no carecen de importancia a la hora de crear guiones en lenguaje PHP.
  A pesar de ello, su uso es opcional, existiendo alternativas que cumplen sus mismas funciones, aunque de modo menos elegante. 

Crear una red informática mediante archivos en Linux

  Una red informática consiste en dos o más ordenadores conectados entre sí y que comparten recursos, ya sea hardware (periféricos, sistemas de almacenamiento…) o software (archivos, datos, programas, aplicaciones…). Una red informática permite que varios usuarios puedan intercambiar información, pasar archivos, compartir periféricos como las impresoras e incluso ejecutar programas en otros ordenadores conectados a la red.
  En la actualidad prácticamente todo está conectado por redes informáticas, desde las redes internas de las empresas o los hogares particulares, hasta el propio Internet, que no es más que una red informática inmensa.
  Para realizar las conexiones entre los equipos informáticos hacen falta utilizar ciertos protocolos de red, ciertos lenguajes informáticos, y ciertas herramientas físicas.
  Lo más habitual es emplear DHCP para conectar varios equipos informáticos (ver también cómo conectar dos equipos de Linux mediante DHCP en el siguiente enlace), y configurar el dominio empleando el programa bind. No obstante, aquí se verá un método más sencillo para realizar ambas cosas en Linux.
  Para ejemplificar esta explicación se emplearán dos equipos con el sistema operativo Debian 9.

Creación de una máquina virtual con KVM de Linux

  En una entrada anterior se ha explicado qué era KVM, un programa de virtualización, y se ha explicado cómo instalarlo y configurarlo para prepararlo con el fin de poder crear y utilizar máquinas virtuales.
  En la presente entrada se verá el modo de creación de una máquina virtual con este programa. Se debe tener en cuenta que la siguiente explicación es específica para el huésped que se va a instalar en ella, por lo que existen variantes dependientes del sistema operativo que se instale.
  Se utilizará el sistema operativo Debian 9 tanto en el equipo informatico anfitrión como en el huésped para ejemplificar la explicación.

Gestión de puertos de redes desde el cortafuegos de Windows

  El cortafuegos ("firewall", en inglés) es un programa que sirve para bloquear las comunicaciones no autorizadas que, al mismo tiempo, permite el acceso a las que lo están.
  Por su parte, un puerto de red es una interfaz (conexión funcional entre dos sistemas, programas, dispositivos o componentes de cualquier tipo, que proporciona una comunicación de distintos niveles permitiendo el intercambio de información) para comunicarse con un programa a través de una red.
  En numerosas ocasiones, un usuario se encuentra con que ciertos programas no son capaces de acceder por los puertos debido a que el cortafuegos no se lo permite. Aquí se verá como hacer que el cortafuegos posibilite el acceso a dichos programas por el puerto que necesiten.

Instalación básica de contenedor de red Tomcat en Linux


  El mundo de los servidores de red es basto y lleno de misterios.
  En entradas anteriores de la presente bitácora se ha hablado de Apache, de Internet Information Services, y de Nginx. Todos ellos han sido definidos como servidores de red (aunque algunos posean otras funciones añadidas).
  Mas en esta entrada se hablará de un interesante complemento a un servidor de red conocido como contenedor de red (o contenedor web), de entre los cuales uno de los más populares es Apache Tomcat.
  Pero lo primero es lo primero. Un contenedor de red es, desde el punto de vista de la programación informática en Java, la implementación que hace cumplimiento del contrato de componentes web de la arquitectura J2EE (Java 2 Enterprise Edition, plataforma de programación en Java).​ Este contrato especifica un entorno de ejecución para componentes web que incluye seguridad, concurrencia, gestión del ciclo de vida, procesamiento de transacciones, despliegue y otros servicios. Un contenedor web suministra los mismos servicios que el contenedor de JSP así como también una vista federada de las API de la plataforma J2EE. Un contenedor de red se suministra incluido en un servidor de red o J2EE.

Introducción a las bases de datos (Parte 2: Objetivos de un sistema de gestión de bases de datos)

  A pesar de la multitud de tipos de bases de datos, con sus inherentes y evidentes diferencias entre sí, lo que conlleva a diferencias entre los programas que las gestionan, existen objetivos compartidos por todas ellas y ellos.
  Estos objetivos genéricos que deben cumplir especialmente los sistemas de gestión de bases de datos (SGBD), sirven tanto para facilitar el proceso de diseño de aplicaciones, como para que el tratamineto de los datos sea más eficiente y rápido al dar una mayor flexibilidad a los usuarios.
  Debe recordarse que la función de un SGBD consiste en suministrar al usuario las herramientas necesarias  para manipular, en términos abstractos, los datos, de tal forma que no le sea necesario conocer el modo de almacenamiento de los datos en el ordenador, ni el método de acceso empleado.

Hacer que el fondo de una bitácora se adapte a cualquier resolución de pantalla

  Una bitácora​, popularmente conocida por su nombre en inglés "blog"​, es un sitio web que incluye, a modo de diario personal de su autor o autores, contenidos de su interés, que suelen estar actualizados con frecuencia y a menudo son comentados por los lectores.
  Sirve como publicación en línea de historias con una periodicidad muy alta, que son presentadas en orden cronológico inverso, es decir, lo más reciente que se ha publicado es lo primero que aparece en la pantalla. Antes era frecuente que las bitácoras mostraran una lista de enlaces a otras bitácoras u otras páginas para ampliar información, citar fuentes o hacer notar que se continúa con un tema que empezó otro blog.
  Actualmente, una bitácora puede tener diversas finalidades según el tipo, taxonomía o incluso su autoría, como por ejemplo para reforzar la marca personal del autor, generar información para comunidades temáticas concretas o incluso servir como medio para buscar oportunidades laborales.

Instalación de KVM en Linux

  Kernel-based Virtual Machine (KVM) ("Máquina virtual basada en el núcleo", en español) es una solución para implementar virtualización completa con Linux. Está formada por un módulo del núcleo (con el nombre "kvm.ko") y herramientas en el espacio de usuario, siendo en su totalidad software libre.
  KVM permite ejecutar máquinas virtuales utilizando imágenes de disco que contienen sistemas operativos sin modificar. Cada máquina virtual tiene su propio hardware virtualizado: una tarjeta de red, discos duros, tarjeta gráfica, etc.
  Este programa de virtualización requiere que el equipo anfitrión posea un procesador x86, o x86_64, con soporte para virtualización. La tecnología de virtualización recibe la denominación VT en Intel y SVM en AMD. Además, puede ejecutar huéspedes (o invitados) Linux/Unix/Windows de 32 o 64 bits.
  Actualmente, KVM utiliza una versión modificada de QEMU como interfaz ("front-end", en inglés). Por otra parte, sus pruebas de rendimiento han demostrado que, para algunas cargas de trabajo, ha resultado ser más rápido que otros programas del mismo tipo, mientras que para otras, no tanto.
  Una de las características más relevantes de KVM es el "overcommit" que es el uso de memoria excediendo aún la memoria física del anfitrión.
  Para ejemplificar la explicación se utilizará un equipo informático con el sistema operativo Debian 9 como anfitrión.

Configurar Nginx con proxy inverso y una aplicación de Tomcat en Linux

  En entradas anteriores se ha visto el modo de instalar un servidor de red Nginx y un contenedor de red Tomcat. También se ha comentado que el segundo solía ir conectado al primero (o a un servidor de red Apache), y que otra función de Nginx era crear proxys inversos con diferentes finalidades.
  Pero, ¿qué es un proxy inverso?, pues nada menos que un tipo de servidor proxy que recupera recursos en nombre de un cliente desde uno o más servidores. Estos recursos son entonces devueltos al cliente como si se originaran en el propio servidor de red. Por lo tanto, el proxy inverso es un intermediario para que sus servidores asociados sean contactados por cualquier cliente.
  Para ejemplificar esta explicación se ha empleado el servidor Debian 9 Stretch como sistema operativo base, el Nginx 1.14 como servidor de proxy inverso, y el contenedor de red Tomcat 8.