Case-sensitivity y HFS+ (macOS)

Un archivo TypeScript con el siguiente código fuente compila en mi ordenador:

import Member from "../../Member";

Sin embargo, mi código de CI de GitHub Actions falló con el siguiente mensaje de error:

Error: src/lib/http/middlewares/member.ts(6,20): error TS2307: Cannot find module '../../Member' or its corresponding type declarations.

Después de darle un par de vueltas, el veredicto es que, como por defecto el sistema de archivos de macOS no diferencia entre mayúsculas y minúsculas, en macOS, import Member from "../../member" e import Member from "../../Member" son equivalentes. GitHub Actions por defecto utiliza GNU/Linux, donde sí se diferencia por defecto entre mayúsculas y minúsculas, así que no lo tiene tan claro.

Ugh. Lo peor es que hay software para macOS que espera que el sistema operativo no sea case-sensitive y que puede dar problemas si el disco duro en el que se instala macOS se configura para sí diferenciar mayúsculas de minúsculas.

Títulos

Mi problema no es escribir en un blog. Me gustaría contar cualquier chorrada que de otro modo tendría que contar en una red social; ocupe tres párrafos o tres líneas. El problema está en que lo primero que me va a pedir la interfaz de edición es el título que le quiero dar a mi publicación. Soy malísimo escogiendo títulos, y con razón: ¿cómo debo seleccionar un título para una reflexión de tres frases?

Y no, no es un problema de WordPress porque tus generadores de blog estáticos también están orientados a entradas de blog con título. Tenemos trampas: podemos esconderlos. Pero son solo eso: trampas.

Twitch y product placement

Últimamente consumo más contenido en streaming por Twitch. Rellena acústicamente mientras trabajo o hago otras cosas. No necesito prestarle atención, solo necesito que esté ahí.

Pero no puedo evitar advertir que Twitch tiene algunas carencias graves en algunos aspectos, y uno de ellos es el de declarar el product placement.

Hace unas semanas, Tom Scott publicaba un vídeo que roza la obra maestra donde se cuestiona por qué se han fabricado leyes adhoc a plataformas como Instagram o YouTube, en las que se exige a influencers que declaren en la descripción o en el vídeo que su contenido tiene contenido promocional. Estas leyes no afectan a televisión, cine y música.

En Twitch, bastantes canales de gaming tienen logos en pantalla de marcas que se van alternando, de fabricantes de componentes de ordenadores, tarjetas gráficas, bebidas energéticas… A veces alguna referencia a alguno de estos patrocinadores… y aunque a título personal a mi me da igual, y en el fondo estoy de acuerdo con Tom en que es absurdo legislar exclusivamente el área online mientras se hace la vista gorda con otros sectores que también mueven dinero, pero me pregunto cuánto tardarán en legislar Twitch también.

Downgradeando a macOS Mojave

Después de hacer una balanza de beneficios vs incompatibilidades, estoy haciendo rollback a mi ordenador portátil para dejar de usar macOS Big Sur. En vez de volver a macOS Catalina, que sería la versión inmediatamente anterior a la Big Sur, voy a volver a macOS Mojave. En el fondo Catalina nunca funcionó bien, mientras que macOS Mojave sí funcionaba bien.

Algunos de los problemas que me encuentro usando macOS Big Sur en mi MacBook Pro de 2014; viejo pero que intenta dar todavía:

  • Lentitud general de toda la interfaz de usuario y de las aplicaciones principales del sistema operativo. También al levantar la tapa y sacarlo del modo sueño tarda bastante en pedirme la contraseña.
  • Entiendo que en nombre de la seguridad me pida algunas confirmaciones o me intente impedir que haga ciertas cosas avanzadas de vez en cuando. Sin embargo, cuando el sistema de seguridad pone la zancadilla cada dos por tres y cuando ya estás acostumbrado a hacer clic derecho + Abrir en vez de doble clic para abrir aplicaciones y lo haces mecánicamente, igual es que algo no va bien.
  • El proceso kernel_task escribe en disco una cantidad absurda de bytes, y temo que esté haciendo daño a mi SSD. Aquí una captura de pantalla teniendo un uptime del sistema de 20 minutos.
Monitor de actividad.

La interfaz de usuario es cuca, debo admitirlo. Normalmente soy muy crítico con los cambios hechos en las interfaces de usuario y suelo tratar estos cambios como regresiones, pero el diseño estético de macOS Big Sur me gusta. Una pena que lo haga a cambio de comprometer el rendimiento del sistema. Funciones como «Tintar las ventanas con el color del fondo de escritorio» noto que hacen que vaya todo aún más lento de lo que debería.

Incompatibilidades que me voy a encontrar al bajar a Mojave:

  • Recordatorios para iCloud no funcionará, ya que cambió el formato con el que se sincronizan en macOS Catalina. Como uso Recordatorios vía CalDAV a través de Fastmail, no será un problema.
  • Probablemente Pages, Keynote y Numbers funcionen raro, ya que las últimas versiones de ese software requieren mínimo Catalina. Como prácticamente mi portátil se ha convertido en una máquina de grabación y edición de vídeo y a veces de programación, no espero notarlo demasiado. Donde hoy en día uso Keynote, Pages y Numbers es en mi iPad de todos modos.
  • iTunes. Sigue funcionando, porque en Windows también existe iTunes todavía, pero probablemente Apple Music no funcione para siempre.

Sorprendentemente, aunque macOS Mojave ha desaparecido del buscador de la AppStore y de la lista de aplicaciones compradas, se puede encontrar el enlace en el sitio web de Apple, ya que tienen un artículo dedicado a descargar versiones viejas de macOS y MacOS X. 🤔

Una vez se descarga a través del sistema de actualizaciones, te avisa de que no puede ejecutar automáticamente lo que ha descargado porque los downgrades no están soportados oficialmente, pero en la carpeta Aplicaciones queda la descarga igualmente.

Para crear un pendrive booteable, se pueden seguir las instrucciones que también están en el sitio web de Apple. Esencialmente pasa por formatear un pendrive de tal modo que se pueda montar desde el sistema operativo (la guía pide formatealo como HFS+, MacOS Extended, pero yo lo he formateado como MS-DOS), y luego desde la terminal ejecutar:

sudo /Applications/Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume

Cambiando /Volumes/MyVolume por el nombre del volumen, como podría ser /Volumes/Dani o /Volumes/TDK.

Por supuesto hay que hacer backup antes de los archivos, cosa que en mi caso es fácil gracias a que tengo pocos archivos en el sistema de todos modos. No he utilizado mucho este ordenador portátil para cacharrear desde que instale Big Sur en noviembre, de todos modos y el resto está en la nube, por lo que mi backup local se limita a mis claves SSH, la carpeta con mis repos, y hacer git push de mis dotfiles y de mi vimrc.

Con el pendrive grabado, se reinicia el ordenador manteniendo pulsada la tecla ALT para que salte el cargador de arranque extendido y en el menú se elige la unidad USB conectada. A partir de ahí, a instalar.

¿Alguna vez dejamos de estar en guerra con el Excel?

Piénsalo. En muchas ocasiones, tu trabajo como desarrollador consiste en crear software que resuelva problemas mejor que lo que puede hacerlo una hoja llena de fórmulas en Microsoft Excel.

(Corolario: un sistema informático nunca está completo hasta que no tiene un botón para descargar una snapshot de los datos cargados en él como CSV.)

Organizar los e-mails de GitHub

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

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.

Mis recuerdos de Endomondo

Vengo de solicitar en la web de Endomondo un ZIP con todos mis entrenamientos cargados en la plataforma.

Endomondo dejó de estar disponible el 31 de diciembre de 2020 y los usuarios que tuviesen entrenamientos cargados tienen 3 meses para solicitar un ZIP con sus datos antes de que se eliminen permantentemente el 31 de marzo de 2021.

En la época de las aplicaciones de seguimiento de carrera por el GPS del móvil, Endomondo fue la primera satisfactoria que probé y con la que empecé a despegar. La empecé a usar cuando le pillé los ritmos a correr después de estar usando un par de semanas Adidas MiCoach, cuando más que centrarme en distancias y tiempos me centraba en entender ritmos (más deprisa, más despacio…)

Eventualmente, Endomondo empezó a funcionar mal, a la vez que Runtastic se empezó a poner de moda debido a la integración con Facebook y el poder mostrar mapas, y poco más se pudo hacer. El cambio fue inevitable. Que UnderArmour comprase Endomondo para integrarla en su portafolio de apps y luego empezar a hacer experimentos raros no ayudó a mejorarla.

Pantallazo de Endomondo
Pantallazo de Endomondo en Google Play. Probablemente en algún backup tenga mis propias capturas de pantalla de Endomondo, pero tendría que buscarlo.

Un año federando en Mastodon

Se cumple un año desde que configuré toot.danirod.es y lancé mi primer toot. ¿Alguna conclusión que sacar este año?

Evidentemente, cuando decidí probar Mastodon, quise configurar mi propio nodo. Podría haberme dado de alta en mastodon.social o en algún nodo popular, pero consideré que si el propósito de Mastodon era participar en una red federada, no tenía mucho sentido entonces unirse a un nodo centralizado y ya de por sí con un exceso de población.

¿Configuración técnica? Un dolor de muelas. Mastodon es un software que requiere correr varios microservicios. La aplicación web principal, el servicio de streaming, y el Redis que alimenta ese servicio de streaming. Por supuesto, la única opción oficial es Docker. Probar Mastodon prácticamente requirió cambiar la arquitectura de mi servidor web, un Debian en el que todo estaba instalado sobre la propia máquina raíz, para dockerizar toda la infraestructura. Tuvo sus cosas buenas, como que una vez dockerizado todo, la migración de Debian 8 a Debian 10 se hizo en un suspiro -a costa de un cierto overhead en el consumo de recursos de mi máquina que me sigue molestando a día de hoy, y algún contenedor reiniciándose o fallando cada poco tiempo.

Otro dolor, el almacenamiento. Si vas a participar en la red federada tienes que tener en cuenta que los toots que recibas de otras instancias se van a guardar en tu propio sistema de almacenamiento. Tu base de datos debe estar preparada para guardar toots, y en función de cómo de grande sea tu red, habrá más o menos toots. Y si esos toots tienen adjuntos, también se va a guardar una copia en tu sistema de almacenamiento, local o S3. Así que mejor contar con sitio.

¿Ha intentado mi máquina acceder a contenido ilegal? Por el momento, tampoco me consta; aunque tiene trampa porque no estoy participando en relés ni nada por el estilo. Para mi nodo de Mastodon, si no tootea una cuenta que siga, o no lo retootea una cuenta que siga, no existe. Considero que este punto es esencial, porque es uno de los puntos que más me preocupa, debido a que no siempre se puede controlar el origen de los toots, y debido al anonimato que a veces entregan las instancias, te pueden comprometer con contenido cuestionable o directamente ilegal.

Para que mi instancia descargue una copia de un toot, lo tiene que publicar una cuenta que siga. Las cuentas que sigo pueden hacer retoot y eso implica que también se descargan toots que compartan. El único riesgo está en las respuestas que reciban los toots de las personas que sigo (o yo mismo), ya que eso provoca que Mastodon se descargue información sobre esa cuenta, y si tiene toots fijados, también sus toots fijados.

Seguridad. ¿He sido hackeado? Hasta el momento no. Es un nodo pequeño con el registro desaprobado en el que sólo existe mi cuenta y las de algunos de mis proyectos. Me ocupo de tener mi docker-compose actualizado, así que no voy muchas versiones por detrás.

¿Estoy contento con Mastodon? Sí y no. Resulta curioso e innovador poder participar en una red descentralizada en la que sé que los datos están bajo mi control. Si acaso, mis únicos problemas en este año con Mastodon son:

  • El descubrimiento. Seguramente sea peor porque no participo en relés, pero es dificil descubrir cuentas nuevas. Alguna vez he cotilleado los feeds públicos de otros servidores como Fosstodon, BSD Network o Functional Café, en busca de contenido interesante, pero no siempre es fácil encontrarlo. Esto puede ser visto como una ventaja o una desventaja en una red federada.
  • La carga. Mastodon pone a mil mi pobre servidor. He tenido que alquilar más almacenamiento para no tener el disco siempre lleno. Y sin embargo el uso que hago de él es residual. Pleroma es una alternativa que consue muchísimos menos recursos, y aunque ambos proyectos hablan ActivityPub y hay sobre el papel un camino de transición para cambiar Mastodon por Pleroma sin que nadie note la diferencia ni pierda seguidores o seguidos, es complicado debido a que son esquemas de datos diferentes y hay que ir con cuidado.
  • La utilidad de los mensajes. Instancias como Mastodon.social son mucho más políticas, pero es un tipo de politiqueo que no encaja con mi manera de pensar ahora mismo. Como digo, las redes en las que más bicheo son Fosstodon, BSD Network y Functional Café. Se ha convertido en una red en la que enterarme de cosas y datos interesantes sobre computación y programación.

Emitir en Twitch vs Emitir en YouTube

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.