Ejemplos de uso de los comandos AT del ESP8266

En ESP8266 y el "internet de las cosas" explico qué es el ESP8266. Tradicionalmente estos módulos vienen de serie con un intérprete de comandos AT. Su uso fundamental es servir de adaptador de puerto serie a WIFI para otro microcontrolador diferente.

No se trata de una configuración que yo necesite, así que lo primero que hago cuando me llega un ESP8266 es reprogramarlo. Antes de hacerlo, no obstante, quiero daros una impresión de cómo va la cosa y sus posibilidades.

La documentación del fabricante está en chino (literalmente), pero poco a poco se ha ido publicando información con cuentagotas en webs de terceros:

Leer más…

ESP8266 y el "internet de las cosas"

En 2014 se publicó un pequeño circuito integrado que, poco a poco, ha ido ganando fama: el ESP8266. Se trata de un microcontrolador bastante capaz de (relativamente) bajo consumo eléctrico y lo más interesante de todo es que incluye soporte WIFI integrado. El chip es lo bastante capaz como para que podamos programarlo en lenguajes de alto nivel como Lua o Python y el traer WIFI de serie permite una integración doméstica trivial: el famoso Internet de las cosas. ¡Y todo por menos de dos euros!

esp8266.jpg

Leer más…

Determinar automáticamente el desfase de audio en un fichero MKV

En Cómo corregir la desincronización de audio en un fichero Matroska explico cómo generar un fichero Matroska con los audios sincronizados, pero requiere determinar la desincronización precisa para poder compensarla. Este proceso suele ser bastante sencillo, pero requiere dedicarle unos minutos. La inmensa mayoría de las películas no tienen problemas así que la tentación es no comprobarlo de forma sistemática y, como no puede ser de otra manera, nos saltaremos justo la película que está mal.

Las causas de la desincronización son varias. En contenedores anticuados como AVI, usar sonido VBR o, incluso ABR, es una receta para el desastre. Afortunadamente esos contenedores están despareciendo (poco a poco, eso sí) y Matroska, el nuevo estándar, soporta audio VBR sin problemas merced al uso de códigos de tiempo en las pistas. Lo que está muy bien, porque Opus genera VBR por defecto.

No obstante, ocasionalmente, tenemos problemas de desincronización de audio y vídeo cuando generamos un fichero Matroska a partir de otro. ¿Por qué?.

Leer más…

Parches actualizados para "getmail"

En Migración de mi servidor de correo a IMAP4 y parches en "getmail" publico un parche para getmail que, entre otras cosas, detiene la descarga de correo cuando la partición IMAP4 se queda sin espacio, dejando algo de margen para poder procesar los buzones y hacer sitio.

Ese parche es incorrecto. Resulta que si se llena la partición la descarga se corta, pero los mensajes que se hayan recibido hasta ese momento no se borran en el servidor ni se deja constancia de su descarga. Es decir, cuando tengamos espacio libre... se volverán a descargar creando duplicados.

Esta fragilidad de getmail (hay muchas razones para que un programa falle en mitad de su ejecución) es fastidiosa, pero es lo que hay hasta que escriba un reemplazo. Estudiando el código y mirando cómo gestiona getmail los mensajes configurados como demasiado grandes, etc., veo que hay una forma "oficial" de hacer lo que quiero.

El parche actualizado, en formado diff, es el siguiente:

Leer más…

Compiling matplotlib in Solaris 10

Trying to install matplotlib 1.5.1 in my Solaris 10 machines produces the following compiling error:

[...]
    In file included from /usr/local/include/python3.5m/Python.h:36:0,
                     from src/mplutils.h:21,
                     from src/ft2font_wrapper.cpp:1:
    /usr/include/unistd.h:496:75: error: conflicting declaration of C function ‘void swab(const void*, void*, ssize_t)’
     extern void swab(const void *_RESTRICT_KYWD, void *_RESTRICT_KYWD, ssize_t);
                                                                               ^
    In file included from /usr/local/include/python3.5m/Python.h:34:0,
                     from src/mplutils.h:21,
                     from src/ft2font_wrapper.cpp:1:
    /usr/include/stdlib.h:143:13: note: previous declaration ‘void swab(const char*, char*, ssize_t)’
     extern void swab(const char *, char *, ssize_t);
                 ^
    error: command 'gcc' failed with exit status 1

    ----------------------------------------
  Rolling back uninstall of matplotlib

Leer más…

Compiling NumPy in Solaris 10

Trying to install NumPy 1.10.1 in my Solaris 10 machines produces the following compiling error:

[...]
/usr/local/bin/gfortran -Wall -g -Wall -g -shared -Wl,-gc-sections -Wl,-s -mimpure-text build/temp.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_litemodule.o build/temp.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_lite/python_xerbla.o -L/usr/local/lib -L/usr/local/lib/gcc/i386-pc-solaris2.10/5.3.0 -L/usr/local/lib -Lbuild/temp.solaris-2.10-i86pc.32bit-3.5 -llapack -lblas -lpython3.5m -lgfortran -o build/lib.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_lite.so
    ld: fatal: unrecognized option '-g'
    ld: fatal: use the -z help option for usage information
    collect2: error: ld returned 1 exit status
    ld: fatal: unrecognized option '-g'
    ld: fatal: use the -z help option for usage information
    collect2: error: ld returned 1 exit status
    error: Command "/usr/local/bin/gfortran -Wall -g -Wall -g -shared -Wl,-gc-sections -Wl,-s -mimpure-text build/temp.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_litemodule.o build/temp.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_lite/python_xerbla.o -L/usr/local/lib -L/usr/local/lib/gcc/i386-pc-solaris2.10/5.3.0 -L/usr/local/lib -Lbuild/temp.solaris-2.10-i86pc.32bit-3.5 -llapack -lblas -lpython3.5m -lgfortran -o build/lib.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_lite.so" failed with exit status 1

    ----------------------------------------
  Rolling back uninstall of numpy
Command "/usr/local/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-ottl5a7u/numpy/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-24agajji-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-ottl5a7u/numpy/

Leer más…

Tor, nodos "Bridge" y ofuscación

Para que un usuario pueda conectarse a la red Tor, es necesario que sepa dónde conectarse. Por tanto, los nodos Tor públicos están registrados y localizados. Sus IP están identificadas.

Esto tiene dos problemas:

  • De cara al administrador de ese nodo Tor, su IP está registrada. Si ese administrador usa esa IP para más cosas que el servicio Tor, puede experimentar problemas de acceso a algunos recursos. Existen multitud de organizaciones que no permiten el acceso desde la red Tor. Aunque el administrador no esté utilizando Tor para entrar en el servicio, su IP es la de un nodo Tor.

    Alguien con conocimiento sabe que la red Tor está compuesta por dos tipos de nodos: nodos repetidores y nodos de salida. Los únicos nodos que se conectan a la red abierta son los nodos de salida. Aunque filtrar Tor sea feo, puestos a hacerlo deberían filtrarse solo los nodos Tor de salida. Los nodos repetidores, la mayoría de la red Tor, solo se conectan a otros nodos Tor. Que un proveedor de información filtre tu conexión porque tu IP es la misma que un nodo repetidor no es efectivo para prevenir ningún ataque y, en cambio, penaliza al pobre administrador de ese nodo Tor.

    Esto es un problema muy real. A fecha de febrero de 2016 organizaciones como la Xunta de Galicia, la organización gestora de dominios española, o la mismísima http://www.red.es/ filtran el acceso desde IP de Tor, aunque se trate de nodos repetidores.

    Algunos tweets al respecto: 1, 2, 3.

  • De cara a un usuario de Tor que necesita acceder a la red desde un entorno hostil, el acceso puede estar filtrado por el enemigo o, como mínimo, el enemigo sabrá que está usando Tor. Este conocimiento en sí puede suponer un riesgo, ya sea porque en esa jurisdicción se trata de algo ilegal o simplemente resulta sospechoso. Puede posibilitar, incluso, un ataque de confirmación.

Las dos cuestiones a resolver, entonces, son:

Leer más…

Migración de mi servidor de correo a IMAP4 y parches en "getmail"

Mi épica migración de tecnología de correo electrónico sigue su curso. La última etapa consiste en lo siguiente:

  1. Instalo Dovecot en mi servidor principal y migro las cuentas POP3 tradicionales a flamantes IMAP4.
  2. Modifico la configuración de correo de mi teléfono para que utilice IMAP4 en vez de POP3. Es importante indicarle que borre los mensajes en la carpeta Papelera al cabo de un mes.
  3. Modifico la configuración de mi proceso getmail para que ahora realice la descarga mediante IMAP4. Un detalle importante es que en vez de borrar el correo descargado directamente, lo mueva a la carpeta Papelera.

El efecto conjunto de los dos últimos puntos es que tengo acceso en el móvil al último mes de correo que he descargado en el ordenador. Esto es importante por si ocurre el típico "ayer te envié un email" y ya nos hemos bajado el correo pero no lo hemos mirado todavía. También es interesante comprobar que quien borra el correo de forma definitiva en el servidor es el móvil, al cabo de un mes de su descarga en el portátil.

Tal y como explicaba en Migrar Thunderbird de "mbox" a "IMAP" (VI): Experiencia tras dos semanas, la descarga de correo con getmail es lenta. Es algo que tengo planificado solucionar... algún día.

La configuración actual de mi getmail es:

Leer más…