Los pasos que describo a continuación son los que doy para preparar una Raspberry Pi 2 Model B Rev 1.1 con Raspbian Pi OS Lite desde cero. No es necesario que tenga ni teclado, ni ratón, ni monitor. Al terminar el proceso puedo conectar con SSH utilizando autenticación con clave pública. Y, por último, lo configuro como servidor de impresión. Estos pasos son los siguientes:
Descarga Raspberry Pi Imager.
Todo el software está disponible en la página correspondiente de la web de Raspberry Pi.
Inserta una tarjeta Micro SD.
Aunque yo estoy usando una de 64 GB, deberías tener suficiente con una de 4 GB.
Ejecuta Raspberry Pi Imager.
Selecciona el sistema operativo.
Haz clic en el botón Choose OS, luego en Raspberry Pi OS (other) y, por último, en Raspberry Pi OS Lite (32-bit).
Selecciona la tarjeta Micro SD.
Haz clic en el botón Choose Storage para seleccionar en qué tarjeta quieres guardar el sistema operativo.
Configura el sistema operativo.
Ésta es la parte que más me gusta. Haz clic en el botón con forma de engranaje que aparece en la parte inferior derecha de la ventana de Raspberry Pi Imager.
Desde ahí podrás:
Creo que todo lo que introduzcas en esta ventana se guardará en un archivo llamado first_run.sh, pero no estoy seguro de si hay alguna otra dependencia.
Guarda el sistema.
Haz clic en el botón Write para que el sistema se guarde en la tarjeta SD con las opciones de configuración seleccionadas. Este proceso tardará un poco, dependiendo de la versión del sistema operativo seleccionado y de la velocidad de la tarjeta Micro SD.
Enciende la Raspberry Pi.
Cuando el proceso termine, extrae la tarjeta y ponla en la Raspberry Pi. Enciéndela y conéctate por SSH.
Actualiza el sistema.
Para ello tendrás que ejecutar estas órdenes una por una:
$ sudo apt update
$ sudo apt upgrade
$ sudo apt list --upgradable
$ sudo apt upgrade
$ sudo apt dist-upgrade
$ sudo apt autoremove
Instala el servidor de impresión.
Se trata de CUPS:
$ sudo apt install cups
Instala los controladores de tu impresora.
En mi caso, estoy usando una Samsung ML-1640 Series, así que me sirve SpliX:
$ sudo apt install printer-driver-splix
Crea un usuario para administrar la impresora.
Aunque podrías usar el mismo usuario que estás utilizando para configurar el sistema, es mejor crear uno nuevo que no tenga privilegios de administración:
$ sudo adduser impresora --ingroup lpadmin
Indica qué contraseña tendrá el usuario, la necesitarás luego. No es necesario que proporciones ningún dato más.
Modifica la configuración de CUPS.
Guarda el original, por si acaso:
$ sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original
$ sudo nano /etc/cups/cupsd.conf
Permite el acceso desde la red local, cambiando esto:
# Only listen for connections from the local machine.
Listen localhost:631
por esto:
# Only listen for connections from the local machine.
# Listen localhost:631
Port 631
Ahora, permite el acceso a las diferentes secciones de la web de CUPS. Busca en el archivo todos los elementos <Location>
. Debería haber 4. Antes de la etiqueta de cierre (</Location>
) añade la línea Allow @local
. Esa parte debería quedar así:
# Restrict access to the server...
<Location />
Order allow,deny
Allow @local
</Location>
# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
Allow @local
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow @local
</Location>
# Restrict access to log files...
<Location /admin/log>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow @local
</Location>
Guarda los cambios y reinicia el servidor:
$ sudo /etc/init.d/cups restart
Añade la impresora a CUPS.
Visita la página web de CUPS, que está en la misma IP que tenga tu Raspberry Pi, en el puerto 631. Si estuviese en la IP 192.168.1.2, tendrías que abrir https://192.168.1.2:631.
Haz clic en Administration, en la barra superior:
Haz clic en el botón Add Printer:
CUPS te pedirá el nombre de usuario y la contraseña de un usuario con permisos de administración del sistema de impresión. Para esto creamos antes el nuevo usuario. Introduce su nombre y su contraseña.
Ahora, CUPS te mostrará una serie de opciones. En mi caso, la impresora está conectada por USB, así que sólo tengo que seleccionarla y hacer clic en el botón Continue:
Ahora, indica dónde se encuentra la impresora, eso puede ayudar a quien quiera añadirla, marca la casilla de verificación Share This Printer y haz clic en el botón Continue:
Para terminar, selecciona la marca y el modelo de la impresora y haz clic en el botón Add Printer:
Una cosa más. Antes de poder utilizar la impresora debes establecer sus opciones predeterminadas. En mi caso, acepto las que CUPS me ofrece y hago clic en el botón Set Default Options:
¡Listo! Ya puedes usar tu impresora USB por Wi-Fi, tanto desde tus PC como desde tus dispositivos móviles.
Como he comentado otras veces, los pasos aquí mostrados consiguen solucionar un caso muy particular que, obviamente, no tiene por qué ser el tuyo. Sin embargo, podría ser que algo de lo que cuento aquí te sea útil en algún momento. En cualquier caso, lo publico porque sé que a mí me va a venir bien tenerlo como referencia.
]]>Deep learning is not an exact science, but a set of everchanging, empirically derived engineering best practices, woven together by unreliable narratives.
François Chollet, “Deep Learning with Python, Second Edition”, página 256.
]]>El caso es que me gustó la forma en lo que lo expuso y quería poner la cita aquí. Fui a la web buscando la transcripción pero aún no la tenían. Tampoco recordaba el momento exacto en el que lo decía. Sabía que era al principio. Tendría que volver a escucharlo, saltando hacia adelante, con el riesgo de pasármelo y tener que volver a empezar. Sí, podría hacer eso o… utilizar Whisper.
Según lo describe OpenAI en su repositorio de GitHub y lo traduce DeepL con su tecnología también basada en IA:
Whisper es un modelo de reconocimiento del habla de uso general. Se ha entrenado con un gran conjunto de datos de audio diverso y es también un modelo multitarea que puede realizar reconocimiento del habla multilingüe, así como traducción del habla e identificación de idiomas.
Es decir, que vamos a utilizar una IA para buscar lo que dice un humano sobre otra IA.
En estos momentos estoy trabajando con Ubuntu 22.04 dentro de WSL, en Windows 11. Vengo de usar macOS y, la verdad, no podía estar más contento, no echo nada de menos. Bueno, sí, Time Machine. Pero eso es otra historia para otro momento. Tengo Miniconda para gestionar diferentes entornos de ejecución de Python, así que puedo instalar Whisper así:
conda create --name whisper python=3.9
conda activate whisper
conda install -c conda-forge cudatoolkit=11.7 cudnn=8.1.0
pip install torch torchvision torchaudio
pip install -U openai-whisper
Quizá las versiones que estoy utilizando no sean las mismas que tengas que utilizar tú si quieres repetir el experimento, pero el proceso será similar.
Si quieres desactivar el entorno virtual:
conda deactivate
Y si algo va mal, borra el entorno virtual y empieza desde cero:
conda remove -n whisper --all
También hay que descargar el MP3 del podcast. Se puede conseguir de muchas formas diferentes. En mi caso lo que hice fue ir a la página del podcast en Google, buscar el episodio que me interesaba, empezar a reproducirlo y, entonces, bucear en el código usando el inspector hasta encontrar el enlace adecuado que contuviese los caracteres mp3
(era el último, qué mala suerte). Para transcribir el texto utilicé:
whisper audio.mp3 --language English --device cuda --verbose False
Si todo va bien, Whisper te dará la transcripción completa del podcast en diferentes formatos, algunos con marcas de tiempo incluídas. Así de sencillo. Ya puedo poner la cita que quería:
But I also got some interesting feedback that was sort of the opposite of that. I was saying, I think by calling these just sort of predictive text models or saying that they just generate the next words in a sequence, or that they're just like one argument you hear all the time, especially on Twitter in the last week, is that this is just essentially fancy autocomplete, that these language models, all they're doing is sort of remixing text that's already on the internet and presenting it to you in a way that seems human but isn't.
And the feedback that I got from, and this was from, including from pretty senior folks in the AI research community was like, that's actually kind of underselling what these models are doing, that yes, they are predicting the next words in a sequence, but that they're doing so not just by sort of remixing fragments of text that are out there on the internet, but by building these kind of large scale understandings of human language and syntax and grammar and how we communicate with each other, that there's actually something that's a lot more complicated here than just predicting the next word in a sequence.
And I think I'm coming around to that view that there is something between totally harmless fancy autocomplete and fully sentient killer AI, and that that is what we were talking about when we're talking about something like Bing slash Sydney is it's not just fancy autocomplete.
There is something interesting and important going on here. And that's true even if it's not sentient.
Se trata de un detalle importante. Estos modelos no son únicamente una máquina probabilistíca para construir secuencias de palabras sino que están consiguiendo comprimir la forma en la que nos comunicamos, con todas sus reglas, de forma cada vez más eficaz.
Aunque sean logros impresionantes, no puedo evitar tener, a la vez, una sensación extraña. Estamos empezando a replicar lo que llevan toda la vida diciéndonos que nos hace diferentes. Desde luego es una cura de humildad.
]]>En cuanto pude me hice con un iPhone 4s y, desde entonces, mi contacto con Android ha sido meramente profesional. Sin embargo, los precios desorbitados (para mí) de los últimos modelos de iPhone me han obligado a cambiar a Android. Vengo de usar un iPhone SE de primera generación, así que prácticamente cualquier smartphone Android reciente me va a parecer un salto enorme.
Ambas plataformas tienen muchos puntos en común, y cada vez convergen más. La principal diferencia, por tanto, está en la interconexión entre plataformas (iOS/macOS, por ejemplo) y en las apps exclusivas de cada plataforma. Con estas premisas, tengo claro que voy a echar algunas cosas de menos:
Iré actualizando esta lista a medida que vaya echando de menos más cosas.
]]>Actualización (2022-01-26): estoy instalando la nueva versión de Android Studio y dice incluir depuración inalámbrica sin usar los truquitos que describo a continuación.
Creo que intenté hacer esto cuando comenzó a ser una posibilidad con Android, sin éxito. O el proceso no estaba maduro por entonces, o metí la pata en algo. Tengo más claro que, cuando lo probé en iOS, estaba tan mal montado que lo dejé por imposible. Sin embargo, hoy no me ha quedado más remedio que intentarlo de nuevo, estoy trabajando con un sensor conectado al smartphone por el único puerto USB del que dispone:
Esto me obliga a desconectar el sensor, conectar el smartphone al ordenador, instalar la app, desconectar el smartphone del ordenador, conectar el sensor y comprobar que todo funciona. Con cada cambio hay que repetir el proceso. Por no hablar del fatídico momento en el que algo falle y tenga que depurar. He estado dejando pasar el momento de volver a probar la conexión Wi-Fi con Android Studio hasta ahora mismo. Los pasos para lograrlo son los siguientes:
Conecta tu smartphone Android a la misma red Wi-Fi que tu ordenador.
Averigua la IP con la que se ha conectado el smartphone. Si es posible, resérvala, de manera que siempre sea la misma dentro de esa Wi-Fi. Te facilitará mucho el trabajo. Supongamos que se trata de la IP 192.168.1.123.
Conecta el smartphone al ordenador por USB.
Localiza la ubicación del SDK de Android en macOS. En mi caso está en ~/Library/Android/sdk/.
Abre un terminal en la carpeta platform-tools del SDK de Android.
Ejecuta adb devices
para asegurarte de que el dispositivo está conectado. Deberías ver algo así:
Además de la IP, necesitas asignar un puerto al smartphone. Si se tratase del puerto 5555, deberías ejecutar adb tcpip 5555
.
Por último, conecta el puente de depuración con el smartphone ejecutando adb connect 192.168.1.123
.
Comprueba que todo es correcto volviendo a ejecutar adb devices
. El resultado debería ser similar al siguiente:
¡Listo! ¿Cómo he podido estar tanto tiempo sin hacer esto, con lo fácil y cómodo que resulta trabajar así?
]]>Ahí también veo la posible inspiración de otros de mis favoritos, Les Luthiers.
]]>En un episodio especial conversan con BmC sobre su proceso creativo. Ya conocía a BmC por hacer la música de algún que otro podcast que escucho (como, por ejemplo, Welcome to Macintosh). En ese episodio comenta cómo llegó hasta lo que es ahora la sintonía de Reply All, un podcast que no conocía de nada. Por lo visto, es muy popular.
Reply All me tenía tan enganchado que me propuse hacer lo mismo que con otros como 99% Invisible: escuchar todo lo que me había perdido. Está vez, en orden cronológico inverso. Mala idea, porque Reply All vuelve de vez en cuando a mencionar episodios anteriores, y sin el contexto necesario perdía detalles, y tenía que saltar de un episodio a otro anterior, y luego volver.
Pero entonces me enteré de que antes de Reply All, Alex Goldman y PJ Vogt hicieron TLDR y, claro, me pusé con él, dejando en pausa Reply All. Son capítulos más cortos, de unos 10 minutos de duración. Tras el número 7 ocurrió algo extraño: había un episodio de “Note to Self”, otro podcast. Pensé que era un error, que se les había colado ése en la lista, por error. Aún así, como ya conocía el podcast porque las creadoras había empezado ZigZag en Radiotopia, decidí escucharlo. Estaba ahí por una razón: hablaban de TLDR.
Lo más impresionante es que, en un momento dado, sonó de fondo algo que me llamó la atención (salta al minuto 17):
Los chillidos me confundieron: no sabía si era la canción o las locutoras. Retrocedí unos segundos, volvía a escuchar, esta vez prestando atención a la letra, la busqué y descubrí esta maravilla:
“Descubrir” es quizá un poco atrevido cuando estamos hablando de un vídeo que han visto casi 900 millones de personas desde 2013, pero lo que es cierto es que yo no conocía What does the fox say?. Y sigo sin saber qué hace el zorro, la verdad.
]]>Instala Python 3.7.0. Es la misma versión que incluye Blender 2.80, la última disponible en el momento de escribir estas líneas. En macOS utilizo pyenv para disponer de varias versiones de Python a la vez.
Instala el paquete que te interese. Por ejemplo, PIL:
~/.pyenv/versions/3.7.0/bin/pip install Pillow
Copia el paquete a Blender. El resultado es que dicho paquete acabará dentro de la propia aplicación:
cp -pR ~/.pyenv/versions/3.7.0/lib/python3.7/site-packages/PIL/ /Applications/Blender.app/Contents/Resources/2.80/python/lib/python3.7/site-packages/
La principal desventaja de este sistema es que cada vez que instales una nueva versión de Blender es necesario volver a instalar los paquetes que uses, teniendo especial cuidado de comprobar qué versión de Python incluye.
Si conoces alguna forma más simple de conseguir el mismo resultado no dudes en ponerte en contacto conmigo.
]]>El futuro de esta aplicación no parecía demasiado prometedor. La principal dificultad a la que se enfrenta este software parece ser la dificultad de encontrar programadores expertos en Qt y C++ dispuestos a colaborar en el proyecto. Pero quizá no todo esté perdido porque… ¡hay una versión de Fritzing basada en JavaScript en marcha!
Si se cumplen las previsiones, antes de que termine el año 2019 veremos una nueva versión de Fritzing.
]]>I dedicate this book to Mr Evans, a wonderful man who helped many of us of us to learn about the depths of history over which we float. It is important that we know where we come from, because if you do not know where you come from, then you don’t know where you are, and if you don’t know where you are, then you don’t know where you’re going. And if you don’t know where you’re going, you’re probably going wrong.
Terry Pratchett, al final de “I Shall Wear Midnight”.
]]>