Detección de presencia por ARP, o cómo saber si tu hijo está en casa

Los adolescentes prefieren morir antes que salir de casa sin su móvil y la condenación eterna antes que permitir que se quede sin batería, así que comprobar si el móvil de tu hijo está conectado a tu red WIFI es una buena forma de saber si está o no en casa.

El siguiente programa te avisa por Telegram cuando tu hijo entra o sale de casa. De modo general, te avisa cuando un determinado dispositivo pasa a estar presente o desaparece de tu red doméstica.

Este programa puede ejecutarse en cualquier máquina Unix-like de nuestra red local que esté encendida permanentemente. En mi caso utilizo una Raspberry PI que tiene otros usos adicionales.

Leer más…

¿Dónde comprar ordenadores personales compatibles con Linux?

Me cuesta mucho cambiar de ordenador personal porque para mí es una herramienta y no un fin en sí mismo, así que cualquier cambio me incomoda y me entorpece hacer el trabajo que realmente quiero hacer con el ordenador. En el caso de los portátiles la cosa es aún más dolorosa, porque el soporte de sistemas alternativos a Microsoft Windows es, como norma, ridículo.

Si te funciona el sonido, no te funcionará la WIFI. Si funciona la WIFI, olvídate de tener aceleración hardware 3D en la tarjeta gráfica. Si todo parece funcionar, hibernar el portátil y que se restaure correctamente será como jugar a la ruleta rusa.

En fin, desesperante.

Mi mejor opción hasta ahora ha sido preguntar a amigos que están usando Linux y contrastar experiencias. Lo malo es que a) mucha gente aprende a convivir con problemillas que no me apetece compartir tras gastarme 1.200 € en un portátil nuevo y b) cuando todo funciona perfectamente, o bien la máquina no se ajusta exactamente a lo que quiero (por ejemplo, ahora mismo quiero un portátil con una CPU marca AMD; no quiero Intel) o bien se ha dejado de fabricar.

En España, por suerte, existen un puñado de empresas que importan y certifican máquinas compatibles con Linux. Mi problema con ellas es que la selección de modelos suele ser muy reducida y que, al no ser fabricantes sino importadores de productos OEM, puede haber cambios de catálogo en cualquier momento.

Iré actualizando la lista siguiente de vez en cuando:

Leer más…

Parar y relanzar Kodi en una instalación OSMC

OSMC es una distribución Debian para Raspberry PI (entre otros) que incluye Kodi. Con ella puedes convertir tu Raspberry PI en un centro multimedia, conectarla a la televisión, manejarla desde el mando a distancia, etc.

OSMC arranca automaticamente Kodi al encender la Raspberry PI y lo relanzará si Kodi muere por algún motivo. A veces, no obstante, es necesario parar Kodi de forma controlada para -por ejemplo- realizar modificaciones en su base de datos o ficheros de configuración de forma manual.

Para detener Kodi de forma controlada en OSMC, podemos entrar en la Raspberry PI mediante SSH y ejecutar el siguiente comando:

$ sudo systemctl stop mediacenter.service

Una vez que hayamos completado el trabajo, podemos relanzar todo el sistema con un reboot normal y corriente o bien con el siguiente comando, si no queremos reiniciarlo todo:

$ sudo systemctl start mediacenter.service

Proveedores de alojamiento baratos

Hago un uso intensivo de mis servidores, así que prefiero usar alojamiento dedicado en vez de no tener ni idea de lo que voy a pagar cada mes (y que además sería bastante, dado mi perfil de uso) si emplease la nube.

No quiero servidores compartidos ni gestionados. Solo trabajo con servidores dedicados que provisiono de forma simple con SmartOS y Ansible, y que tienen siempre los discos duros llenos y las CPUs y la memoria al 99%.

Siempre estoy a la caza de proveedores de alojamiento baratos. Iré actualizando la lista de vez en cuando:

Cómo se procesó el audio de "El relato como creación de la realidad en Borges"

La charla de Elena El relato como creación de la realidad en Borges se grabó con una Sony ICD-PX312. Es una buena grabadora, pero las condiciones de la sala eran muy complicadas: ruido de fondo monumental (ruido de otras aulas, ruido de los tubos fluorescentes), los alumnos tosiendo constantemente, jugando con los bolígrafos, tecleando en los ordenadores, Elena moviéndose por la tarima y preguntas y lecturas de los alumnos, alejados del micrófono. Incluso se puede oír perfectamente a un alumno afilar sus lápices con un afilador eléctrico.

Intentar obtener un audio inteligible de una calidad mínima ha sido difícil. Voy a describir los pasos aquí. Usé el software Audacity.

Leer más…

El relato como creación de la realidad en Borges

Nota

Elena Marcela González Gómez es filóloga y profesora de lengua y literatura española en un instituto de Madrid.

Este texto sirvió como preparación para una charla impartida a alumnos de cuarto de filología en una universidad madrileña el 14 de marzo de 2018. La charla se grabó, pero, lamentablemente, el sonido tiene una calidad muy deficiente.

Aquí tenéis la grabación en formato Opus. Tiene una duración de una hora y cuarenta minutos.

Si tienes problemas para escuchar ese audio, puedes intentarlo con una versión de menor calidad en el vetusto y anticuado formato MP3.

Explico algunos detalles sobre el procesado de este audio en Cómo se procesó el audio de "El relato como creación de la realidad en Borges".

Leer más…

Activación/Desactivación de extensiones Mercurial de forma puntual

A veces necesitamos una extensión Mercurial de forma puntual y no queremos tenerla activada por defecto en nuestra configuración. Por ejemplo, porque se trata de una extensión de uso delicado o experimental.

Podemos invocar Mercurial desde la línea de comandos de la siguiente manera:

$ hg --config extensions.histedit= histedit

Aquí estamos activando la extensión histedit para modificar changesets en fase secreta o borrador.

Te puede interesar conocer extensiones Mercurial comunes o cómo activar o desactivar una extensión de forma permanente.

Si lo que quieres es desactivar puntualmente una extensión activada en la configuración por defecto, puedes indicarlo con un ! (signo de admiración). Por ejemplo:

$ hg --config extensions.mq=! COMANDO

Durante esta invocación de Mercurial, la extensión Mercurial Queues estará desactivada. Por ejemplo:

$ hg qseries --config extensions.mq=!
hg: unknown command 'qseries'
'qseries' is provided by the following extension:

    mq            manage a stack of patches

(use 'hg help extensions' for information on enabling extensions)

Podemos usar el mismo principio para modificar cualquier opción configurada en los ficheros INI de Mercurial.

Que tus "futures" de larga duración no impidan que tu programa Python termine (Python 3.7)

Advertencia

El uso de las técnicas descritas en este artículo es peligroso. Más vale que sepas lo que estás haciendo.

En Que tus "futures" de larga duración no impidan que tu programa Python termine explico cómo conseguir que un programa Python termine, aunque tenga Futures pendientes de ejecución. Más te vale que tengas buenos motivos para ello y que entiendas los riesgos, pero conocer esta técnica es útil cuando la necesitas.

El código propuesto no funciona bajo Python 3.7, a punto de salir, por su uso del nuevo PEP 562 para acelerar la importación del módulo concurrent.futures. Tendremos que importar concurrent.futures.thread y concurrent.futures.process de forma explícita.

Es decir, en Python 3.6 hacíamos algo así:

import concurrent.futures
import atexit
atexit.unregister(concurrent.futures.thread._python_exit)
atexit.unregister(concurrent.futures.process._python_exit)

En el nuevo Python 3.7 tendremos que hacer lo siguiente:

import concurrent.futures.thread
import concurrent.futures.process
import atexit
atexit.unregister(concurrent.futures.thread._python_exit)
atexit.unregister(concurrent.futures.process._python_exit)

Problema solucionado. De momento.

Verificar contenido DNS con DNSSEC y Python

Ahora que tengo todas las piezas DNSSEC en su lugar (dominios protegidos por DNSSEC y clientes que verifican DNSSEC), queda explicar cómo lo estoy utilizando.

Conviene leer el contexto primero.

Teniendo DNSSEC, tenemos una base de datos masivamente distribuída y masivamente cacheada. Podemos atender millones de dispositivos de forma segura sin apenas carga en nuestros servidores DNS. Algunos ejemplos de uso:

En mi caso, estoy utilizando esta tecnología para controlar y actualizar una miriada de dispositivos IoT y sistemas empotrados que tengo distribuídos por todo el mundo. El DNS me permite hacerlo de una forma escalable y redundante (gracias al cacheo de la red mundial de servidores DNS) y DNSSEC me permite hacerlo de una forma segura.

Leer más…

Ignorar la configuración DNS que nos llega por DHCP (y usar dnsmasq)

Si seguimos los pasos indicados en Activar verificación de DNSSEC en "dnsmasq", tendremos un servicio dnsmasq capaz de verificar DNSSEC. Estupendo. Ahora solo hace falta que enviemos nuestras peticiones DNS a través de ese servicio dnsmasq.

Si estamos en un entorno de servidores, con direcciones IP fijas, etc., no hay mayor problema; bastaría con configurar apropiadamente el fichero /etc/resolv.conf [1].

[1] En un entorno de servidores yo no usaría dnsmasq, ya que está pensado para cosas "pequeñas" y domésticas. Mejor usar un servidor DNS de verdad como BIND.

En un entorno doméstico solemos tener una dirección IP dinámica asignada mediante un servicio DHCP que, típicamente, nos proporciona el router de la operadora de telecomunicaciones que nos da la conexión a internet. En esa negociación DHCP es muy normal configurar muchas cosas más además de la dirección IP, como servidores de tiempos, nombre de dominio, máscaras y ruta por defecto a internet. También nos suele entrar información sobre los servidores DNS que nuestra operadora quiere que usemos.

Hay mucha información en internet sobre cómo ignorar esa configuración de DNS a la hora de que el ordenador configure su red automáticamente al encenderlo. Lamentablemente mucha de ella está anticuada, es contradictoria o frágil. Con la irrupción, como un elefante en una tienda de cristal, de esa aberración de la filosofía Unix que es systemd, las cosas no han hecho sino complicarse aún más.

Voy a documentar cómo lo estoy haciendo yo cuando trabajo con Raspberry PI y la distribución Raspbian actual:

Leer más…