Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Usando submodules en git

Imago voragine.net
• Por

Los submodules de git permiten incluir un repositorio en otro en cualquier ubicación. Incluir por ejemplo una librería de javascript en un proyecto web como un módulo permite funcionar con su última versión fácilmente, sin necesidad de preocuparse por sustituir versiones manualmente: basta actualizar el repositorio.

Yo he usado los módulos de git por primera vez para hacer una web con Hugo. En el repositorio del sitio web he incluido el theme Learn de Hugo como módulo.

Cómo hacer un contador en un loop (range) de Hugo

Esa operación básica en casi cualquier lenguaje que es poner en funcionamiento un contador en Go no lo es en absoluto. Estoy aprendiendo la sintaxis que usa Hugo para construir sus templates, Go templates, y pensé que definir una variable numérica, asignarle el valor 0, e incrementar su valor con cada iteración se haría igual que en cualquier otro lenguaje, pero no. De hecho hasta que ha salido la versión 0.48 de Hugo no se podía ni redefinir el valor de una variable. Para versiones anteriores hay que recurrir a Scratch, una serie de métodos que permiten salvar esta limitación en Go Template.

Usando Scratch hacer un counter vuelve a ser posible:

{{ $.Scratch.Set "counter" 0 }}
{{range $array }}
    {{ $.Scratch.Set "counter" (add ($.Scratch.Get "counter") 1) }}
    Valor de $counter en esta vuelta del loop: {{$.Scratch.Get "counter"}}
{{end}}

Entorno de desarrollo para R RStudio y RStudio server en Debian

Imago voragine.net
• Por

RStudio es el entorno de desarrollo más extendido para programar con R. Me cuesta usar un entorno de desarrollo que no sea vim pero parece ser que en el caso de R merece la pena, así que lo he instalado en mi Debian Buster.

He aprovechado para instalar y probar RStudio Server, así que en este pequeño manual lo cuento también, y cómo hacer las configuraciones básicas. RStudio Server permite usar RStudio desde cualquier máquina cliente a través de un navegador.

Redes sociales verticales open source

Imago voragine.net
• Por

Las redes sociales verticales o redes sociales de nicho son aquellas que están limitadas a un contexto temático, geográfico... Suelen ser cerradas, accesibles bajo registro. Academia.edu para académicos, Github para programadores, Doximity para médicos y otros profesionales de la salud en Estados Unidos.

Estamos montando la infraestructura de la Civic Innovation School (CIS), el entorno colaborativo de aprendizaje de Civicwise. Uno de sus espacios será una red social vertical que funcione como lugar de encuentro e intercambio de toda la red en torno a la CIS.

Queremos una solución que sea de código abierto, fácilmente accesible desde dispositivos móviles y que no requiera una inversión de trabajo muy grande para ponerla en marcha o mantenerla. A continuación algunas opciones que barajamos.

pass, el gestor de contraseñas de línea de comandos

Imago voragine.net
• Por

pass es un gestor de contraseñas de línea de comandos. Sigue la filosofía UNIX, toda una cultura y unos valores surgidos alrededor del desarrollo del sistema operativo UNIX: minimalismo, modularidad, facilidad de reutilización del código. En la práctica este tipo de desarrollo produce programas que hacen una sola cosa muy bien, programas que se pueden combinar de la misma manera que se usan las bibliotecas en diferentes entornos de programación, programas que utilizan archivos de texto para guardar la información y configuración. Son valores que Linux ha heredado.

El funcionamiento de pass es simple: guarda cada contraseña en un archivo de texto encriptado bajo una clave GPG. La base de datos de contraseñas es a su vez un repositorio git en el que cada nueva contraseña o modificación de una existente se añade mediante un commit que realiza automáticamente pass.

La estructura de archivos de texto hace que interactuar con pass sea muy sencillo, así que hay multitud de clientes que permiten acceder a la base de datos de contraseñas desde navegadores, editores, entornos de programación...

A continuación explico brevemente cómo instalar y configurar pass en Linux Debian, y cómo instalar la extensión passff para acceder a la base de datos de contraseñas desde Firefox.

Incluir tipos de contenido personalizado (custom post types) en el feed principal de un sitio web WordPress

Por omisión en el feed principal de un sitio que funciona con WordPress se muestran las entradas del tipo de contenido post. Para incluir otros tipos de contenidos se puede usar el siguiente código, añadiéndolo al archivo functions.php:

add_filter( 'pre_get_posts', 'prefix_custom_feed' );
function prefix_modify_feed( $query ) {
        if ( $query->is_feed() )
            $query->set( 'post_type', array( 'post', 'link' ) ); 
        return $query;
}

También se puede obtener un feed combinado modificando los parámetros de la URL del feed, de la siguiente manera:

https://voragine.net/feed?post_type[]=post&post_type[]=link

Cómo limpiar el caché de apt de un sistema Linux

El gestor de paquetes apt guarda una lista de paquetes para no tener que descargarla cada vez. Cuando una instalación Linux llega a una cierta edad el caché de apt puede ocupar varias decenas de gigabytes. apt no limpia el caché automáticamente, así que puede contener en el listaod paquetes obsoletos que ya no se pueden instalar. Se puede comprobar el tamaño del caché de apt con el siguiente comando:

sudo du -sh /var/cache/apt

Si el tamaño excede los 3GB, probablemente el caché de apt contiene paquetes obsoletos. Se puede limpiar el caché con la opción autoclean:

sudo apt-get autoclean

Si se quiere eliminar completamente el caché:

sudo apt-get clean
Contexto

Paginar un listado de entradas en una page template usada como portada en WordPress

Para paginar un loop en una page template usada como portada en WordPress se puede usar el mismo procedimiento que para un loop en cualquier otra plantilla. Lo único que hay que cambiar el el nombre de la variable, que en este caso no se llama paged sino page. Una de estas cosas que te pueden hacer perder medio día hasta que des con ello.

Entonces, para mostrar las entradas de la página actual de un loop paginado dentro de una plantilla de página (page template) en la portada (front page):

$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );

Todo está documentado en el codex de WordPress.