Acerca de Dani

Soy un ingeniero de software actualmente trabajando como desarrollador freelance. Estoy especializado en desarrollo backend aunque me estoy poniendo al día en cosas en las que antes era bueno y que dejé de lado. Me interesan las buenas prácticas en el desarrollo de aplicaciones, el código bien testado, la usabilidad y la accesibilidad del software. En internet, te enseño a programar a través de mi canal de YouTube, makigas.

Organizar los e-mails de GitHub

Minientrada

Pude poner orden hoy en la carpeta de archivo en la que normalmente vuelco todos los e-mails de notificaciones de GitHub una vez los he procesado, y que estaba empezando a acumular un tamaño no poco considerable. (Sobre por qué archivo todo en vez de eliminar algunos tipos de notificaciones, es otro asunto.)

En las notificaciones que tienen que ver con un repositorio (como un issue, un PR o una release), GitHub rellena la cabecera List-Id con el identificador del repositorio del que procede. List-Id es una cabecera estandar que la mayoría de clientes de correo usa para reconocer listas. En el caso de GitHub, la List-Id de un repositorio es <repo>.<user>.github.com.

De modo que con un poco de análisis, he podido organizar automáticamente por carpetas todas las notificaciones, para que las notificaciones de makigas/clank (cuya List-Id será clank.makigas.github.com) vayan a Archivo/github.com/makigas/clank, o las del repositorio danirod/rectball vayan a Archivo/github.com/danirod/rectball.

Un par de filtros automáticos se van a asegurar de que futuras notificaciones vayan directamente a esas carpetas, ya que normalmente las notificaciones llegan en momentos en los que no les puedo dedicar tiempo y luego es complicado escarbar mi bandeja de correo para localizar todos estos correos cuando sí tengo tiempo de ponerme con ello.

Un exceso de newsletters

Minientrada

Twitter anunció la compra de Revue, y ha pasado a modo gratuito buena parte del servicio, bajando también los costes de la versión premium. ¿Que qué es Revue? Una alternativa a Substack.

Ya he hablado sobre estas cosas. Las newsletters en sí no están mal como alternativa a las redes sociales, pero resulta complicado de gestionar todo lo que se recibe a larga escala. Pueden quedarse en la bandeja de entrada esperando días su momento de ser leídas, pero mi experiencia haciendo esto es que al final elimino de golpe 10-15 e-mails una vez por semana. Aparte, le veo varios problemas:

  • No es anónimo, porque tengo que dar mi e-mail para formar parte de una lista.
  • No es gratis para quien publica, porque muchos proveedores cobran cuotas por tener más de un determinado número de suscriptores en esa lista. Esto quita voces interesantes que podrían crear una newsletter y no lo hacen porque hay que pagar, o provoca que algunas newsletters busquen estrategias de monetización (esperemos que sin involucrar hacer cosas feas con la lista de e-mails).
  • Algunas newsletters se han “desuscrito” de mí automáticamente simplemente porque, como mi e-mail lo leo en modo texto plano, no puedo descargar y ver los pixel beacons, por lo que cuento en sus listas como un seguidor inactivo.

Emitir en Twitch vs Emitir en YouTube

Minientrada

Durante 2020 he pasado bastantes horas emitiendo en vivo por internet a través de YouTube, y eso ha cambiado mucho mi percepción ante el arte de emitir en directo frente a lo que hacía en años anteriores.

Eso significa que he empezado a ver Twitch con otros ojos. Sobre todo comparado con lo que tengo más acostumbrado actualmente.

No sé si voy a quedarme en Twitch o no, pero he encontrado algunas cosas interesantes sobre la plataforma que lo hacen un poco más atractivo comparado con YouTube.

  • No quemo la marca. Ciertos contenidos que tengo en mente emitir entran en conflicto con lo que representa la marca makigas y no me parece prudente emitirlos en mi canal de YouTube.
  • No estropeo tanto las estadísticas de mi canal de YouTube. Este es uno de los puntos que más me interesan, porque últimamente estoy intentando subir contenido de calidad que me facilite el plan de expansión, el cual debería llegar este año por fin. Como no estropeo las estadísticas; por lo tanto:
  • No enfado al algoritmo. El algoritmo de YouTube se ofende fácilmente y con los planes a futuro que tengo para mi canal, eso no me interesa, porque eso podría suponer menos impresiones y menos ocasiones de aparecer en los buscadores. (A mi canal no le interesa la relevancia en el tiempo, le interesan los buscadores)

Y sobre todo, un aspecto que no pensé hasta 2020 que me iba a importar tanto:

  • No le tengo que prestar tanta importancia al VOD. Quizá haya contenido que valga la pena preservar de forma seleccionada, pero conservar íntegramente y de forma infinita streams de 2 horas de duración en los que tampoco pasa gran cosa.

Hasta siempre, «Asignar app a espacios»

Una opción discreta pero útil que había en versiones anteriores de macOS era la posibilidad de fijar ventanas de una aplicación a todos los espacios o escritorios virtuales. Así, daba igual en qué escritorio virtual te colocases, podías tener algunas ventanas mostrarse en todas partes. Útil si organizas ventanas en escritorios pero hay momentos en los que necesitas mostrar una ventana concreta en todas partes. (Por ejemplo, en el escritorio 1 tienes una hoja de cálculo, en el escritorio 2 un navegador web, pero quieres tener visible la calculadora tanto en el escritorio 1 como en el 2).

Pues bueno, parece que esta opción ha desaparecido en la última versión de macOS. Quería fijar mi llamada de Google Meet a todos los escritorios virtuales, para tener el botón del micrófono a mano mientras miraba cosas, pero al ir al menú contextual ya no aparece.

Captura de pantalla del dock de macOS.
Esto es lo que veo al hacer clic derecho en el icono.

No encuentro comentarios al respecto en Reddit, lo cual me resulta llamativo porque siempre hay alguien en Reddit que critica este tipo de regresiones argumentando que «es el fin de macOS como lo conocemos y Apple no nos escucha» o cosas así.

Pero en el manual de usuario de macOS sí que ha desaparecido. En el manual de instrucciones de macOS 10.15 hay un epígrafe llamado «Asignar apps a espacios». En el manual de instrucciones de macOS 11.0 ya no está esa sección.

Triste.

Pequeños detalles sobre los átomos en Erlang

La semana pasada empecé a publicar mi curso de Elixir en YouTube, y la recepción está siendo buena e incluso algo mejor de lo esperado. Intento ir lento para ponerlo fácil a quien nunca haya trabajado con este tipo de lenguajes, pero a la vez intento ir rápido para satisfacer a quien esté intentando seguirlo según lo subo (aunque casi sería mejor esperar un par de meses antes de verlo del tirón…)

Uno de los vídeos que subí ya habla sobre los átomos. Es un tipo de datos interesante para representar valores constantes que equivalen a su propio nombre. Al principio puede sonar raro. Al menos a mí me lo sonaba cuando vi por primera vez el concepto en Racket durante la universidad. En Racket, se les llama quotes, y se utiliza la tilde en vez de los dos puntos. Por ejemplo, 'banana, pero el principio es el mismo.

Una cosa que para no hacer un vídeo de nivel introductorio tan complejo no cuento, es que en la máquina virtual de Erlang, cada vez que se declara un átomo, se registra en una tabla de átomos (o Atom Table), que se comporta como un diccionario de átomos conocidos por la máquina virtual.

Si las operaciones que trabajan comparando átomos son rápidas (por ejemplo, x == :ok), lo es porque una vez que todos los átomos están indizados, a nivel interno la máquina virtual de Erlang no trata a un átomo como su valor, sino como su posición en la tabla, así que al final los átomos se gestionan también como números que representan posiciones, y sólo en el momento de comunicar un átomo al exterior es que vemos su representación alfanumérica.

Hablo siempre de alfanumérico porque un átomo contiene letras y caracteres del alfabeto, pero es importante distinguir que los identificadores en Elixir entienden de Unicode, y que por lo tanto, otros alfabetos diferentes también pueden ser codificados en átomos (:Βόρειος, mismamente).

Otra particularidad interesante es que el recolector de basura de Erlang nunca va a recolectar átomos que hayan caído en desuso. De modo que con el tiempo, la máquina virtual de Erlang va a tender a absorber todos aquellos átomos que hayan sido empleados. Dado que en Erlang ciertas construcciones como los propios nombres de los módulos o las listas de argumentos también se codifican con átomos, estas construcciones también van a tomar espacio.

Además, la tabla no es infinita. Los límites declarados por la máquina de Erlang avisan que, salvo que se modifique como parámetro al iniciar la máquina, como mucho se podrán declarar 1.048.576 átomos en la tabla. ¿Qué pasará cuando se alcance ese límite? Que la máquina fallará, como podemos probar rápidamente con este pequeño script:

for x <- 1..1048577, do: x |> Integer.to_string |> String.to_atom

Es una forma un poco fea y barata de generar 1.048.577 átomos a partir de cadenas de caracteres que generamos a su vez a partir de los números de un rango. Cuando ejecuto esto en mi máquina, la máquina de Erlang falla:

$ elixir foo.exs 
no more index entries in atom_tab (max=1048576)
Crash dump is being written to: erl_crash.dump…done

Homebrew Cask sin avisos de seguridad

Minientrada

Seguramente esto sea contrario a la política de seguridad de macOS, pero hoy no me ha quedado otra que instalar con Homebrew Cask una aplicación GUI que no está firmada y que por lo tanto no pasa la política de seguridad de macOS. Educadamente, macOS me invita a tirar el instalador a la papelera pero hace fallar a Cask, que no se espera esto.

Si hubiese descargado a mano el instalador, podría seguir las instrucciones habituales para abrir aplicaciones no firmadas: click derecho – Abrir, y olvidarme por hoy de este asunto. Pero, ¿click derecho en Homebrew? ¿Eh?

Bueno, mirando la página de ayuda del comando brew cask install, la opción que busco es --no-quarantine. Homebrew respeta las opciones de seguridad del sistema operativo y por defecto pone en cuarentena las descargas, igual que hacen los navegadores web, para que salte el sistema de seguridad de macOS al intentar usar el archivo y rechazarlo si no se puede identificar el origen de la aplicación.

% brew cask install foo --no-quarantine

Recomendaría usar con cautela esta opción, de todos modos, no sea que se instalen sorpresas en el ordenador por accidente.

Móviles, cajas, cargadores, auriculares

Minientrada

Mi segundo teléfono inteligente de la era moderna fue el Moto G1 en 2014. Un teléfono de la Motorola de 2013, cuya división de móviles era propiedad de Google. Fue un experimento para crear un móvil a precio de gama baja con prestaciones de una gama superior, antes de que otras marcas como Xiaomi o OnePlus lo hicieran. Antes de envejecer fatal, fue un buen teléfono para costar menos de 200 euros.

Para ahorrar costes, la caja del Moto G1 no traía ni auriculares ni cargador. He ido a consultar vídeos de unboxings de la época para comprobar que este dato es correcto. En su momento recuerdo comentarios en redes del tipo «no los vas a necesitar, seguro que ya tienes auriculares y cargadores por casa o que puedes comprar uno».

Mi tercer teléfono inteligente fue el Moto G4+ en 2016. Seguía sin traer auriculares, pero ya me daba igual, porque empezaba a tener mejores auriculares que usar. Traía cargador de pared compatible con Turbo Power. La notificación «Turbo Power conectado» sólo aparecía cuando se ponía a cargar con ese cargador concreto. En otros cargadores, tardaba horas en hacer una carga completa.

Me pregunto si el Moto G4+ hubiese traído cargador si los objetivos de la Motorola de Lenovo hubiesen sido otros. El mercado de móviles de precio bajo ya tenía nuevos competidores. La cuarta generación no buscaba ser un móvil barato, como generaciones anteriores. Además, sin un cargador no se podría presumir de la carga rápida, que empezaba a despegar por entonces.

Me hacen mucha gracia los memes al respecto de la ausencia de cargador y auriculares en el nuevo iPhone 12. Sin embargo, no es un concepto nuevo. Lo he estado viviendo en mis propias carnes en años anteriores. No quiero disculparles por esta decisión. Preveo que otras marcas que ahora ridiculizan esta decisión se subirán al carro dentro de un tiempo. Cuando se cargaron el jack de auriculares analógicos, el resto de marcas se burlaron de esta decisión también, pero a día de hoy muchísimos móviles Android se fabrican sin jack de auriculares. Hoy día esa decisión me duele menos, porque uso auriculares Bluetooth el 99% del tiempo. Pero de vez en cuando me encuentro con el caso en el que poder enchufar unos auriculares analógicos estándar a mi móvil me vendría bien, pero al ser un iPhone 11, eso me es imposible.

Sobre el naming peculiar del Apple Pencil

Estoy empezando a ver reviews del nuevo iPad de 8ª generación (el que presentaron el mes pasado) colándose por mis aplicaciones de noticias, y por supuesto les estoy echando un vistazo.

Es un poco pronto para cambiar de iPad. Mi iPad de 6ª generación funciona como el primer día, pero ahora que estoy adoptando un estilo de vida digital “iPad primero, PC después”, considero que es importante estar al día sobre los modelos que tiene a la venta (el normal, el Air y el Pro), para que cuando llegue el momento de hacer un cambio, sepa cuál tiene los casos de uso más aproximados a mi forma de usarlos.

Una de las cosas que más me llama la atención es que el nuevo iPad utiliza un Apple Pencil de 1ª generación, pese a que desde hace bastante tiempo, los modelos de iPad Pro usan un Apple Pencil de 2ª generación.

El Apple Pencil de 1ª generación es completamente cilíndrico, así que si lo sueltas sobre la mesa lo más probable es que ruede. Se carga por Lightning, enchufándolo directamente al puerto Lightning de la tablet. El Apple Pencil de 2ª generación tiene carga inalámbrica y se carga simplemente pegándolo magnéticamente al borde del iPad.

Sin embargo, tampoco entiendo esta estrategia de naming. Llamar 1ª generación y 2ª generación a unos dispositivos que tienen unos ciclos de vida paralelos resulta raro. Así de primeras suena como si el Pencil de 1ª generación estuviese obsoleto, cuando realmente es un dispositivo actualizado y necesario para poder utilizar un Pencil con una tablet más reciente que algunas de las que ya usan un Pencil de 2ª. No sé por qué se han inclinado por esta nomenclatura en vez de llamarlos de otra forma. Apple Pencil A y Apple Pencil B, o Apple Pencil y Apple Pencil Pro. A Apple le gusta mucho jugar con este tipo de naming, estoy convencido que hubiesen sacado algo similar.

Apple Pencil enchufado al puerto Lightning
Una manera de cargarlo un poco peculiar, pero por suerte esta abominación sólo tiene que ser presenciada los 30 minutos que tarda en estar cargado.

Sea como sea, me encanta mi Pencil de 1ª generación. Al principio dudaba sobre si sería una inversión rentable o tirar el dinero en un stylus muy caro, pero esto no es un stylus, es algo más. No sé como funciona y cómo la pantalla sabe cuándo la toco con el dedo o con el lápiz, incluso si lo hago a la vez, pero hace una magia que me gusta mucho.

La edad dorada del modding

Esta semana ha sido noticia la filtración del código fuente de Windows XP (y de otros productos de Microsoft) en internet. Multitud de interesados y periodistas se han metido a mirar en las tripas en busca de tesoros y, por supuesto, los trofeos han tardado poco en salir.

Entre carpetas, han hallado un tema visual para Windows XP basado en el viejo diseño que tenía el primitivo MacOS X de Apple. Este tema es inédito porque nunca vio la luz (se trataría de una versión interna y primitiva, e imagino que el departamento legal ni querría saber nada de él), ya que lo que el resto asociamos a Windows XP es su famoso diseño y colores, Luna.

Captura de pantalla de Windows XP
Luna. (Wikimedia Commons)

Todo esto me hizo recordar los buenos tiempos que nos dejó la década pasada hace tres lustros la personalización. Recuerdo haber tenido que reinstalar mi sistema operativo en multitud de ocasiones después de haber sobado tanto algunas de las DLLs del sistema que ni el propio Windows las reconocía como suyas.

Que Microsoft tuviese su propia versión interna de un tema tipo Aqua es llamativo, porque también es uno de los primeros riceos que recuerdo de mi máquina, tanto en Windows como en Linux, donde las opciones eran aún más grandes. Pero, evidentemente, también recuerdo el Vista Transformation Pack, para aparentar que «no es tan vieja mi máquina, puede parecer moderna». Y, años después y paradojas de la vida, la Clasic Shell para hacer que mi máquina no pareciese tan moderna en los días de Windows 7.

El modding de sistemas operativos y la personalización radical del sistema realmente es una idea tan vieja como los propios sistemas operativos. El Winamp Skin Museum, que apareció en foros hace ahora un par de semanas, es un buen testimonio de las posibilidades de personalización de finales de los 90 a principios de los 2000. O sea, no es una cosa reciente.

Sin embargo, el modding de la década de los 2000s llega en un punto interesante en el que internet se ha expandido lo suficiente como para crear nuevas comunidades en el contexto de las primeras redes sociales. Conexiones a internet más rápidas y más y mejores herramientas de diseño gráfico que lo que había antes. Y a la vez, en esa época los sistemas operativos todavía permitían cierto grado de personalización debido a la falta de restricciones y medidas de seguridad como las que traen hoy en día. En Twitter y Mastodon, la cuenta @osxthemes publica capturas de pantalla con temas para MacOS X, donde también hubo una época en la que esto también era posible.

Hoy en día, la personalización sigue estando ahí, pero cada vez está más arrinconada. Aún hoy, como en los viejos tiempos, siguen existiendo versiones de UXTheme para Windows 10. Sin embargo, tanto Windows como macOS tienen medidas de seguridad mucho más estrictas para impedir que se hagan modificaciones no autorizadas al sistema operativo. Siempre en nombre de la seguridad y de evitar malware, aunque sea a costa de impedirte como administrador de tu ordenador tocar dentro de ciertas carpetas privilegiadas.

Supuestamente, el mundo GNU/Linux sigue siendo más liberal con la modificación, pero la última vez que usé GNOME seguía teniendo que dar demasiados clics para poder escapar de la influencia de Adwaita (a pesar de que haya mejorado muchísimo estéticamente respecto a las primeras versiones). Otros entornos de escritorio opinionados, como Pantheon, también son igual de reservados a la hora de permitir hacer cambios a su interfaz.

Por supuesto, hoy día mis intereses han cambiado y ya no le doy tanta importancia a esto. Cuando tengo que sentarme a trabajar con un ordenador, lo único que quiero es completar mis tareas en la menor cantidad de tiempo. No le presto atención ni al tema que esté usando, ni siquiera a los temas de colores o las tipografías con las que escribo en mis entornos de programación. Sin embargo, no puedo evitar pensar en que he tenido suerte creciendo en una época en la que sí se dieron las condiciones para que, de verme interesado por lo de modificar el aspecto de mi máquina, haya tenido las herramientas y el permiso por parte de mi propia máquina para poder llevar esa creatividad al límite, aunque el precio a pagar fuese tener que formatear el sistema después de casi romperlo.