Python

  • En el artículo Cómo autenticar con clave pública en SSH expliqué detalladamente todos los pasos necesarios para autenticar con clave pública un usuario a través de SSH.

    Para que el usuario con el que ejecutamos ansible (en este caso root) sea capaz de autenticar con clave pública (sin contraseña) en los servidores, será necesario agregar la clave pública del mismo en cada archivo authorized_keys perteneciente al usuario con el cual queremos autenticar en cada sistema remoto. Es una tarea tediosa, pero debe realizarse una única vez.

  • Anteriormente expliqué cómo autenticar contra un servidor LDAP en PHP. Ahora comparto una función para autenticar con LDAP en lenguaje Python.

  • Python es un lenguaje orientado a objetos, y como tal permite construir clases para definir objetos que tendrán un cierto estado interno y un conjunto de operaciones sobre el mismo. Sin embargo, Python también permite crear módulos, o conjuntos de funciones y definiciones de datos, no organizados utilizando el paradigma orientado a objetos. Incluso es posible implementar una mezcla de ambos esquemas.

  • Este artículo explica cómo capturar excepciones (errores no programáticos, de tiempo de ejecución) en Python, y cuáles son los tipos de excepciones disponibles.

  • En Apache, la funcionalidad necesaria para interpretar scripts Python la provee el módulo "mod_python".

    mod_python es un módulo que embebe el intérprete python en el servidor Web Apache. Permite escribir aplicaciones Web en Python que se ejecuten más rápido que el tradicional CGI y tengan acceso a características avanzadas tales como la capacidad de retener conexiones a bases de datos, datos entre accesos y características internas de Apache.

  • El día de hoy tuve que realizar una instalación de uWSGI en un servidor corriendo Debian 9. Estos son los pasos necesarios para instalarlo correctamente.

    uWSGI es una implementación de WSGI capaz de servir aplicaciones Python, pero que además apunta a proveer la pila de software completa para implementar servicios de hosting. Anteriormente demostré su instalación y configuración en el artículo Python en la Web con Nginx+uWSGI+Flask.

  • Este artículo explica cómo recibir parámetros HTTP vía GET, es decir como argumentos en la URL (llamado query string), en scripts CGI Python.

  • Anteriormente expliqué cómo conectarse a una base de datos Postgres desde Python utilizando el driver pg8000. Esta vez voy a demostrar cómo instalar y utilizar el driver psycopg2, cuyo funcionamiento es muy similar al del driver pg8000.

  • Anteriormente expliqué detalladamente cómo montar un servidor Web Nginx con soporte para Python a través de uWSGI, con el objetivo de servir una aplicación desarrollada utilizando el microframework Flask. En esta oportunidad demostraré los pasos necesarios para crear un entorno virtual de Python para uWSGI que permita aislar la aplicación Flask y al mismo tiempo hacer uso de Python 3.

  • Python no cuenta con una implementación nativa de arreglos (una estructura básica en todo lenguaje de programación) pero cuenta con listas, las cuales son más poderosas que los arreglos en cuanto a funcionalidades. Al ser vistas como conjuntos de elementos ordenados, pueden comportarse de manera natural como pilas y colas. Y al soportar elementos de cualquier tipo, pueden tener cualquier número de dimensiones.

    Gracias a estas características, es posible realizar de manera sencilla algunas tareas que requieren algo más de trabajo cuando se utilizan arreglos tradicionales en otros lenguajes.

  • Una de las muchas formas de "vender humo" en este mundo consiste en ofrecer soluciones a problemas inexistentes. Entre los tantos requisitos para certificar la norma ISO 9001:2015, una empresa debe contar con un sistema de registro y gestión de no conformidades. Como dentro de mi organización se está buscando certificar dicha norma, se solicitó al área de sistemas evaluar alternativas de software para implementar dicha herramienta.

    A simple vista, el cuento de la certificación ISO parece un gran negocio para las empresas consultoras. Esto se hace evidente cuando uno descubre que la mayoría de las herramientas de software para la gestión de calidad son de licencia propietaria. Es decir, hay empresas que se dedican exclusivamente a desarrollar soluciones cerradas para requerimientos impuestos por terceros (el consultor cobra una suma importante por venderte el problema y su socio por venderte la solución). Aunque, afortunadamente, investigando un largo rato en Internet, surgió la oportunidad de instalar y probar KMKey Quality, gracias al Catálogo de Software Libre de la Universidad de La Laguna.

    KMKey Quality es un software de gestión de calidad ideal para la implantación y mantenimiento de un Sistema de Gestión de calidad (SGC) de cualquier tipo: ISO 9001, ISO 14001, OHSAS 18001, etc, o de una combinación de los mismos, facilitando la gestión de un sistema integrado.

    KMKey es liberado bajo la licencia GPLv2, pero su creador y principal impulsor es la empresa Earcon, quien hace lo mínimo indispensable para cumplir con dicha licencia.

    En el mundo existe software libre y open source de todo tipo. Hay proyectos importantes desarrollados por grandes comunidades, proyectos medianos desarrollados por grupos más pequeños, y proyectos chicos desarrollados por individuos. Pero a pesar de las diferencias en cuestiones de importancia/magnitud, en general todos cultivan los valores del software libre hablando en términos de calidad de software. El software comunitario en general está cuidadosamente documentado, tanto en forma de manuales como a nivel de comentarios en el código fuente. Además se cuida mucho la limpieza del código, ya que se piensa desde el día cero en que el código fuente estará a la vista de todo el mundo. Así sea un solo individuo quien desarrolle/mantenga una pieza de software libre, si es un miembro de la comunidad open source, muy posiblemente respete y promulgue estas ideas. Pienso que más aún siendo el caso de un individuo, pues si su intención es sumar desarrolladores a su proyecto, debe saber que probablemente pocos sientan deseos de aportar código o soluciones a un proyecto cuyo código fuente es desprolijo y/o pobremente documentado.

    En el software privado es diferente, porque los desarrolladores tienen la certeza de que nadie fuera de la empresa verá su código fuente. Entonces la calidad del software se reduce a las políticas de calidad de software de la empresa.

    Pero hay otra clase de proyectos libres u open source, y son aquellos desarrollados y mantenidos por una única empresa de software comercial. Y digo comercial porque el código fuente se libera bajo licencias libres u open source, sólo que la empresa detrás del "producto" es quien lucra con el mismo. Esto no está mal, por supuesto. Si estuviese prohibido hacer dinero con el software libre, éste simplemente no existiría.

    El problema surge cuando la empresa que mantiene una pieza de software libre hace todo lo posible para monopolizar su soporte. Por ejemplo, libera todo su código fuente sin comentarios (quien haya examinado código fuente de systemd puede comprobarlo), hace todo lo posible por ofuscar su configuración, y peor aún no provee documentación alguna. Es decir, hace lo mínimo indispensable para cumplir con la licencia.

    Tal vez uno se pregunte por qué entonces estas empresas liberan el código bajo una licencia libre u open source, si no tienen deseos de sus productos de software sean en esencia libre. Esto ocurre porque en muchos países, notablemente en la Unión Europea, han tomado al sabia decisión de forzar el uso de software libre en entidades gubernamentales. La consecuencia de esta decisión, es que las empresas proveedoras de software para el estado se vieron obligadas a liberar sus productos bajo licencias abiertas. Incluso puede ser que hayan tenido que abrir el código de productos antes cerrados, lo cual pone en evidencia lo ordinario que es el software de código cerrado.

    A ésto se reduce mi experiencia con KMkey y por ello que decidí compartir este artículo. Tanto la arquitectura de KMKey como el proceso de instalación y configuración, carecen de una documentación mínima. A causa de esto es necesario realizar un trabajo de ingeniería inversa, a partir de un appliance disponible en Internet, e invertir largas horas, sólo para entender cómo funciona, cómo se relacionan sus diferentes componentes, y cómo lograr ponerlo en funcionamiento en uno de nuestros servidores.

  • CKAN es un poderoso sistema de gestión de datos que permite hacer la información accesible, agilizando la publicación, y proveyendo herramientas para compartir, encontrar y utilizar datos. CKAN apunta a entidades (gobiernos, compañías y organizaciones) que desean hacer sus datos abiertos y públicos.

    Este artículo explica la instalación completa de CKAN desde sus fuentes en un sistema Debian 7, incluyendo la configuración del DataStore, FileStore, DataPusher, y el plugin "ckanext-basiccharts" (para gráficos de torta, barra y otros).

  • Lamentablemente, el cliente letsencrypt-auto que se utiliza para generar certificados TLS de Let's Encrypt no está pensado para acceder a Internet a través un proxy HTTP/HTTPS. Entonces, ¿qué pasa si necesitamos emitir un certificado para uno de nuestros servidores, dentro una red corporativa, detrás de un proxy HTTP? No queda otra alternativa que realizar algunos cambios en el script (estas son las grandes ventajas de utilizar soluciones abiertas, se pueden modificar/adaptar a las necesidades de cada uno).

    Este artículo explica cómo modificar el script letsencrypt-auto para que funcione utilizando un proxy HTTP/HTTPS.

  • Este artículo explica cómo montar un servidor LAMP utilizando la combinación Linux+Apache+Python+MySQL sobre distribuciones Debian y derivadas.

  • En el artículo anterior expliqué cómo instalar un servidor Linux con Apache, Python y MySQL. Ahora voy a explicar cómo lograr la misma combinación pero reemplazando MySQL con PostgreSQL, el motor de bases de datos open source más avanzado.

  • Werkzeug es una librería de utilidades HTTP y WSGI para Python. El microframework Flask está basado en Werkzeug, esto significa que es posible implementar sesiones en aplicaciones Flask utilizando los módulos y clases provistos por Werkzeug.

    Dicho esto, Werkzeug incluye el módulo Sessions, el cual provee clases para el manejo de sesiones. En este artículo voy a demostrar cómo implementar sesiones almacenadas en el filesystem (como archivos, similar a lo que hace PHP por defecto) utilizando la clase FilesystemSessionStore.

  • La semana pasada compartí un artículo donde daba a conocer pyVmomi, un SDK desarrollado en lenguaje Python para la API de VMware vSphere que permite gestionar hosts de máquinas virtuales ESX, ESXi y vCenter. Hoy comparto mi primer script Python utilizando pyVmomi, el cual permite listar el espacio libre en todos los datastores de un host ESX/ESXi/vCenter.

  • De vuelta de unas breves vacaciones traigo un pequeño script Python para verificar el estado de una conexión a Internet. Este script simplemente hace ping a una serie de hosts (configurables) y si al menos uno de ellos responde correctamente asume que la conexión a Internet (y por ende la red) está funcionando. De lo contrario (si no obtiene respuesta desde ningún host) asume que la red no está funcionando. Por supuesto, este script no sirve si en algún nodo de la ruta hasta llegar a Internet se está filtrando el tráfico ICMP. Por otro lado, si se cae un nodo intermedio, pero la interfaz de red en el host funciona correctamente, asume que la red está fallando.

  • pip es una herramienta que permite instalar y gestionar paquetes de Python. Es la herramienta recomendada para instalar paquetes de Python que no están disponibles directamente en el archivo de Debian (o cualquiera sea la distribución GNU/Linux utilizada). En Debian y derivados, pip es el gestor de paquetes para Python 2, mientras que pip3 es el gestor para Python 3.

  • Cada dos por tres reviso el ranking de Alexa para tener una noción de cómo evoluciona el posicionamiento de Linuxito. Dato que Google no te dará jamás :P

    Claro está que Alexa no es una fuente 100% confiable, en el sentido que toma sus datos estadísticos a partir de apenas (?) 25000 extensiones disponibles para diferentes navegadores (¡plop!) y desde aquellos sitios que han elegido instalar el script Alexa para certificar sus métricas:

    Alexa's traffic estimates are based on data from our global traffic panel, which is a sample of millions of Internet users using one of over 25,000 different browser extensions. In addition, we gather much of our traffic data from direct sources in the form of sites that have chosen to install the Alexa script on their site and certify their metrics. However, site owners can always choose to keep their certified metrics private.

    ¿Por qué tanta preocupación por el posicionamiento o relevancia en Internet? Por diferentes motivos. Se me ocurre por curiosidad, por autosatisfacción personal (comprobar que el trabajo que uno hace es útil o relevante en Internet), como motivación para seguir mejorando (o para cerrar definitivamente el blog si las cifras no son alentadoras :P), y también por diversión (en este caso, despuntar el vicio de Python).

    Ahora bien, un blog dedicado a la administración de sistemas operativos de la familia Unix y otras yerbas, nunca va a posicionar mejor que los sitios triple equis, redes sociales o portales de noticias. Así que para saber si uno está bien o mal posicionado tiene que compararse con sus colegas blogueros linuxeros hispanohablantes.