Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Cómo cambiar un grupo de ubicaciones georreferenciadas de sistema de referencia de coordenadas geográficas (CRS)

Imago voragine.net
• Por

Los sistemas de referencia de coordenadas (CRS) o sistemas de referencia espacial (SRS) son complicados, al menos para mí que no soy geógrafo y tengo un conocimiento superficial de GIS: existen más de 13.000 sistemas diferentes y siempre me cuesta saber en qué sistema están las ubicaciones de un conjunto de datos georreferenciados. Siempre he tenido la intuición de que es algo complejísimo, sin saber exactamente a qué nivel. Solo cuando leí este maravilloso post de 2011 sobre el tema (que por supuesto no hace falta leer para conseguir cambiar de CRS un conjunto de datos), empecé a tomar consciencia de la magnitud de la complejidad: el post explica la incapacidad de las distintas herramientas de transformación para conseguir precisión en las conversiones, dando resultados que pueden diferir en torno a 20km. Apasionante lectura también para personas interesadas en saber curiosidades como de dónde vienen los códigos EPSG, hoy uno de los estándares para sistemas de referencia de coordenadas.

Pero voy a tema. A mí que trabajo casi siempre desarrollando para web me interesa en general que los datos geográficos usen latitud y longitud. Es el sistema de coordenadas que se suele usar en web: Google Maps, Bing Maps, OpenStreetMap usan latitud y longitud. Si los datos que recibo usan un sistema cartesiano, tengo que transformarlos.

Convertir imágenes PNG o JPG a WEBP, y viceversa, desde la línea de comandos

Imago voragine.net
• Por

WebP es el formato estándar abierto más utilizado para servir imágenes comprimidas en web. Está desarrollado por Google. Casi cualquier framework o CMS puede generar imágenes en este formato a partir de formatos comprimidos como PNG o JPG así que raramente hay que hacerlo manualmente. Sin embargo hay veces que aún me hace falta, por ejemplo cuando hay que optimizar un sitio web que tiene unos años. En estos casos merece la pena hacerlo desde la línea de comandos: es la manera más rápida y además, como siempre ocurre con la línea de comandos, permite automatizar el proceso con un script de bash.

Google dice que las imágenes WebP lossless pesan un 26% menos que la versión PNG. WebP permite compresión lossless (sin perdida de datos para una eventual reconversión al formato original) y lossy (con perdida de datos pero mayor nivel de compresión).

Cómo descargar un archivo con wget a través de una conexión HTTPS

Imago voragine.net
• Por

Por omisión wget da error si se usa con una URL a través de conexión segura HTTPS. Esto se debe a que no le estamos diciendo qué certificado tiene que usar para comunicarse con el servidor al que se está conectando. Ésta es una operación que cualquier navegador web hace hoy en día automáticamente, sin que nos tengamos que preocupar por ello. No es el caso de wget.

Para evitar este error y poder descargar una URL a través de conexión segura HTTPS cuando no conocemos el certificado se puede usar el modificador --no-check-certificate.

Cómo evitar que xss-lock bloquee la pantalla cuando una aplicación está a pantalla completa

Imago voragine.net
• Por

xss-lock es un programa que gestiona el bloqueo de pantalla cuando el equipo está inactivo. xss-lock cumple esta tarea llamando a un bloqueador de pantalla externo, y comunicándose con el login manager que define el tiempo de inactividad antes de bloquear la pantalla y conecta con la sesión para salir del bloqueo.

Yo uso xss-lock para gestionar el bloqueo de pantalla en i3wm. xss-lock funciona estupendamente sin mucha configuración excepto cuando hay una aplicación a pantalla completa. En este caso bloquea la pantalla considerando que hay inactividad. Esto es especialmente molesto cuando estoy viendo una película: cada 5 minutos tengo que mover el ratón o se activa el bloqueo.

Para evitarlo he añadido un pequeño script de bash que monitoriza con wmctrl si hay alguna aplicación corriendo a pantalla completa. Si es así, pausa xss-lock con pkill. Cuando se sale del modo pantalla completa, el script reactiva xss-lock.

Cómo solucionar ModuleNotFoundError: No module named ‘pip’ en un entorno virtual de Python

Imago voragine.net
• Por

Hay veces que tras una actualización del sistema, tras actualizar Debian, todos los entornos virtuales de Python dejan de funcionar y devuelven el error ModuleNotFoundError: No module named 'pip'. Para solucionar el error, desde el entorno virtual se puede usar el módulo ensurepip.

Cómo convertir archivos .eps a .svg desde la línea de comandos con Inkscape

Imago voragine.net
• Por

Inkscape se puede utilizar en modo no interactivo desde la línea de comandos. Esta funcionalidad es muy útil para automatizar tareas como el cambio de formato de un grupo de imágenes.

Para generar un archivo .svg a partir de un .eps se puede invocar inkscape de la siguiente manera:

inkscape -o archivo.svg archivo.eps

Para aplicar este comando a un grupo de archivos .eps que están en la misma ubicación se puede usar un loop de bash:

for i in *.eps; do inkscape -o $i.svg $i; done

Crear tipografías para web desde la línea de comandos: generar woff, woff2 y eot a partir ttf

Imago voragine.net
• Por
Existen multitud de conversores de tipografías de escritorio (formatos TTF y OTF) a tipografías web (formatos WOFF, WOFF2, EOT...). Consisten en aplicaciones web a los que se envían las tipografías de escritorio y que devuelven las tipografías web, e incluso la hoja de estilos CSS que permiten usarlas en cualquier página web. ¿Por qué usar entonces la línea de comandos para generar tipografías web? Por dos razones: la primera es la automatización: con la línea de comandos se puede automatizar este proceso. Pero la más importante para mí es que no tengo manera de saber lo que esas aplicaciones web están metiendo en esos archivos que me descargo y que luego subo a los servidores web en los que funcionarán las páginas web que estoy desarrollando. Unas veces porque el código de esas aplicaciones no está disponible para estudiarlo, otras porque aunque lo esté yo no tengo el tiempo de estudiarlo.

Cómo cambiar el nombre de usuario (username) en WordPress usando wp-cli

El nombre de usuario en WordPress está protegido por diseño, de manera que no se puede cambiar desde el panel de administración ni usando las funciones PHP para actualizar los datos de un usuario. La orden wp user update de WP-CLI tampoco permite cambiar el username. Esta protección tiene su lógica, pero hay veces que necesitamos cambiar algún username. Una manera de hacerlo es modificándolo directamente en base de datos.

Con WP-CLI podemos lanzar una query a la base de datos para cambiar el username:

wp db query "UPDATE wp_users u,
    ( SELECT
          COUNT(*) as number_of_same_login_users
          FROM wp_users u
          WHERE user_login = 'mary_new'
    ) tmp
    SET u.user_login = 'mary_new'
    WHERE
            u.user_login = 'mary_old'
        AND tmp.number_of_same_login_users = 0"

En una línea:

wp db query "UPDATE wp_users u, ( SELECT COUNT(*) as number_of_same_login_users FROM wp_users WHERE user_login = 'mary_new' ) tmp SET u.user_login = 'mary_new' WHERE u.user_login = 'mary_old' AND tmp.number_of_same_login_users = 0"

Visto en este hilo de wordpress.stackexchange.com.

Cómo obtener el propietario de una carpeta o archivo en Bash para usarlo en un script

Para obtener el propietario de un archivo o carpeta en Linux se puede usar el comando stat, y de la siguiente manera se puede almacenar en una variable y usarlo cuando se quiera dentro de un script de bash:

owner=${stat -c '%U' /path/to/your/file}

Y para obtener de manera análoga el grupo de una carpeta o un archivo:

group=${stat -c '%G' /path/to/your/file}

Visto en el blog de Mattias Geniar.

Borrar masivamente entradas u otros contenidos en WordPress con wp-cli

Recientemente he sufrido ataques en algunas webs gestionadas con WordPress. Una de las consecuencias es que cientos de artículos sobre casinos en línea y juegos de azar son creados. Borrar estos contenidos desde el panel de administración puede llevar un buen rato. Con wp-cli se puede hacer con un comando.

Normalmente estas infecciones crean los contenidos automáticamente y de una vez, así que la fecha es la misma para todos los contenidos. Podemos por tanto obtener un listado de entradas filtrado por fecha y luego borrarlas. Algo así:

wp post delete $(wp post list --year=2022 --month=06 --day=01 --format=ids) --force