Los formularios en PDF son una mala práctica

Esta es una opinión subjetiva pero me voy a agarrar a ella y pienso morir defendiéndola: los PDF son un formato terrible para representar formularios interactivos. La administración pública parece que se ha agarrado a ellos como una lapa, y es algo que resulta entendible. Si el PDF ya representa de facto un documento digital, un PDF con formularios es visto como el equivalente digital a una hoja de papel que hay que rellenar, pero bajo mi punto de vista esto es un error.

Sigue leyendo

Mi experiencia con el Mac Mini M2 Pro

He cambiado mi ordenador del trabajo por un Mac Mini M2 Pro. Ahora más que nunca, es importante que separe el uso que hago de mi ordenador cuando es para trabajar, del uso que hago de mi ordenador cuando no es para trabajar. Estos meses no me ha quedado otra que trabajar desde el ordenador de jugar, porque he descubierto que mi viejo MacBook ya no es definitivamente lo que era, pero no se podía caer en la tentación de simplemente reemplazarlo en frío sabiendo que eventualmente Apple acabaría actualizando su Mac Mini.

Sigue leyendo

Mi experiencia con Vaultwarden

En abril del año pasado, migré mi gestor de contraseñas desde KeePassXC a Vaultwarden. Mi objetivo en esta entrada de blog es hablar de mi experiencia con este software y cómo me he adaptado a él en los últimos meses, desventajas y también ventajas de haber migrado a Vaultwarden.

Bitwarden es una solución cloud para guardar contraseñas en línea. Siempre he sido escéptico ante este tipo de herramientas cloud, debido al riesgo que podría suponer colocar las llaves que protegen toda tu vida digital en una máquina que no controlas. Incluso aunque Bitwarden sea abierto y hable de las formas que tienen de cifrar la información, me resulta un poco incómoda la idea de que los datos se guarden fuera de mi control.

Vaultwarden es una reimplementación alternativa de toda la API de Bitwarden en Rust. Bitwarden dispone de varias aplicaciones oficiales para PC, móvil, tablet y navegador que interactúan con la nube de Bitwarden usando distintas APIs, y Vaultwarden se ocupa de volver a implementar toda esa capa de servicios. De este modo, si configuramos un cliente o extensión de Bitwarden para que, en vez de hablar con el servidor central, hable con nuestro servidor alternativo, todo funcionará, porque el cliente no sabrá que está hablando con un Vaultwarden en vez de con un Bitwarden normal. Además, es mucho más ligera en consumo de recursos que una instalación on-premises de Bitwarden.

Sigue leyendo

Mi opinión después de probar Miniflux (RSS)

El mes pasado, durante mis vacaciones, reemplacé mi instancia local de TinyTinyRSS por una instancia de Miniflux. Ambas son aplicaciones cloud que actúan como lector RSS. Ya hablé la semana pasada sobre las razones por las cuales prefiero mantener mi cliente RSS en un servidor, pero se resume en que la falta de sincronización entre dispositivos que tienen Mozilla Thunderbird o QuiteRSS los hace inaceptables si unas veces leo cosas con mi PC y otras con mi móvil.

TinyTinyRSS es un pepino de software. No tiene otro calificativo. Es un software que voy a seguir recomendando y del que voy a seguir hablando bien. Es flexible, potente y tiene una interfaz de usuario web avanzada que recuerda a la de otros clientes RSS mayores y llenos de funciones. Tiene filtros con los que se pueden marcar como leídas o borrar entradas que cumplan unas condiciones (ideal para filtrar ruido), y también tiene un sistema de plugins extensible para agregarle nuevas funciones.

Sin embargo, no todo es bonito. TinyTinyRSS también es desafortunadamente un software que tiene bugs. En particular, dos veces se me ha corrompido la instalación y he tenido que tirar de copia de seguridad para rescatar mi lista de feeds y vaciar la base de datos, perdiendo el historial, las entradas marcadas como favoritas, y también parte de mi tiempo. 2 veces en 4 años tampoco es demasiado desde el punto de vista estadístico, pero sí es cierto que es una molestia que preferiría evitar.

Existen otras razones por las cuales he acabado cansándome del comportamiento de este software. Fundamentalmente tiene que ver con el proceso de instalación, especialmente ahora que está basado en Docker. Iba a contarlas aquí, pero son muchas y por otra parte se supone que quiero hablar de Miniflux hoy, así que corto y pego en otro borrador y ya lo dejo para otro día.


Miniflux es otro lector RSS cloud que puedes ejecutar en un servidor y ponerle a cargo de revisar periódicamente si los sitios que sigues tienen novedades, dejándolas en una base de datos para que las puedas leer cuando puedas.

Su interfaz web es excesivamente minimalista, pero a cambio esto le permite ser compatible con teléfonos móviles y otro tipo de pantallas táctiles, e incluso se puede instalar como PWA para un acceso más conveniente en la pantalla de iOS o Android. Tiene las funciones que se pueden esperar de este tipo de programas, e incluso tiene un sistema que permite ajustar dinámicamente la frecuencia con la que mira si una web tiene novedades según la cantidad de posts que publica a la semana (para sitios de noticias diarias cambia la frecuencia a 1 hora como mucho, y para sitios personales no suele mirar más allá de una vez cada pocos días).

Además, se puede desplegar en un único binario de Go. En mi caso, lo corro desde Docker y consume bastante menos recursos que lo que consumía TT-RSS, lo que permite aliviar la carga del servidor y lo que espero que en algún momento me ayude a ahorrar recursos y tal vez hacer downgrade a una máquina más pequeña si veo que no me hace falta tener una máquina tan potente.

También tiene APIs que me permiten usar Miniflux como un backend cuya interfaz web apenas reviso, sino que me conecto desde mi propio cliente de escritorio o de móvil como quien lee el correo. En este caso, Miniflux implementa la GReader API. Es una API mucho más flexible y potente y que me permite hacer cosas que antes no podía hacer, como suscribirme rápidamente a una fuente desde mi móvil o cancelar una suscripción si deja de interesarme un sitio web. Antes, tenía que entrar al panel de control web para poder hacer esto.

Al haber pasado a usar la GReader API, ahora puedo usar más clientes de escritorio, por lo que también he cambiado los programas que uso para leer mis noticias. En Mac y en iOS/iPad, me he pasado a NetNewsWire, que es un cliente libre y gratuito. NewsFlash también es compatible con la GReader API, de modo que en GNU/Linux he podido seguir usando NewsFlash cambiando únicamente una cuenta online por otra.

Sigo pensando que para meterse en el mundo del RSS existen opciones mucho más accesibles, como Feedly, y como he dicho varias veces, es mi opción recomendada. No obstante, para alguien que quiera ensuciarse las manos y ocuparse de instalar servicios autoalojados en su VPS o en su nube propia, Miniflux es fácil de instalar y depende únicamente de si mismo y de una base de datos PostgreSQL en la que volcar el estado de la aplicación, y que aunque tiene una interfaz web que no a todo el mundo le va a gustar, tiene más formas de ser accesible desde otras aplicaciones para no sufrirla tanto.

¿Por qué no uso Feedly pese a que lo sigo recomendando?

Fui usuario de Google Reader hasta prácticamente su fecha de cierre. El cierre de Google Reader es curiosamente uno de esos eventos traumáticos donde pese a que ya han pasado prácticamente 10 años desde su cierre, para quienes lo usábamos sigue siendo algo que incluir en la tarjeta de presentación. «Hola, me llamo Dani y fui usuario de Google Reader».

¿Qué fue Google Reader?, se preguntará tal vez alguien que se perdió esa época del internet mágico. Era un lector de RSS. Por ponerlo en contexto de forma breve, RSS es un protocolo que permite que una página web comunique de forma automatizada de sus novedades, por ejemplo, las últimas noticias publicadas en un periódico o los últimos posts publicados en un blog.

Un lector RSS es un programa con el que podemos «suscribirnos» a varios sitios web, y se ocupará cada pocos minutos u horas de consultar mediante protocolo RSS si la web tiene algo nuevo que no hayamos visto todavía, y que lo mostrará en pantalla como si se tratase de un cliente de correo.

La mayoría de clientes RSS hacen un buen trabajo al detectar novedades duplicadas y así saber qué hemos visto ya y qué no, y tiene memoria suficiente como para guardar docenas de artículos que podemos leer vorazmente cada día, o dejar un tiempo esperando en una cola de lectura que finalmente podemos marcar como leída de golpe y sin compasión.


Tras su desaparición, estuve un par de años utilizando Feedly. Feedly es uno de esos servicios que suelo recomendar a cualquier persona que quiera probar el mundo del RSS. Es un servicio en el que puedes tirar un par de páginas web que quieras tener al día, y que cada vez que una de esas páginas publique algo interesante te lo mostrará al abrir la aplicación.

Quizá el mayor atractivo de Feedly es el motor de descubrimiento, y la posibilidad de encontrar nuevos sitios exclusivamente a través de feeds RSS. Esta es también una de las principales razones por las que, como digo, seguiría recomendando Feedly a personas que estén entrando ahora en el mundo del RSS.

Sin embargo, pese a que lo sigo recomendando, realmente no uso Feedly. Nunca terminé de cogerle gusto. Por lo menos en este caso veo más difícil que desaparezca, debido a que aunque tiene un modo gratuito, también tiene algunas limitaciones que te invitan a pagar por él si vas a usarlo mucho. Y mientras haya gente que siga pagando por el servicio, en principio debería seguir habiendo dinero para que Feedly siga existiendo como empresa ofreciendo su producto. A estas alturas Feedly ya ha vivido más años que Google Reader, así que parece que lo están consiguiendo.

Mi principal problema con Feedly está en la cantidad de características que ofrece, y en lo confusas que son algunas de estas características. No deja de ser un software cloud, y qué software cloud hoy en día puede denominarse un «servicio» si no está constantemente reinventándose y agregando nuevas funciones o cambiando su forma de ser cada pocos años para mantenerse fresco.

Durante mis últimos tiempos con Feedly, la mayoría de funciones que me encontré, como el algoritmo de prioridades o las funciones de equipo (¿por qué activarlas para todas las cuentas en vez de preguntarme si las quiero en primer lugar?), me resultaban muy complicadas de utilizar. No quiero que un algoritmo filtre las noticias por mí; precisamente la gracia del RSS es ver, como si fuese un cliente de correo, cada uno de los artículos nuevos de los sitios que explícitamente he solicitado seguir.

En definitiva, creo que Feedly es un buen servicio, y que también es un producto que le puede gustar a la mayoría de personas que solo quieren una forma simple de consumir contenido sin complicarse con aplicaciones. Sin embargo, después de un tiempo utilizándolo, descubrí que no es para mí, y lo sustituí por otro tipo de aplicaciones que sí me eran más prácticas.

También, todo hay que ponerlo en su debido contexto. La época de Feedly y de la muerte de Google Reader es también la época del boom de las redes sociales. En esa época, como la mayoría de personas, había movido mi forma de enterarme de la actualidad a las redes sociales, fundamentalmente Twitter y Facebook, así que apenas consultaba el RSS. Sólo hace un par de años, probablemente 2018 o 2019, que volví a preocuparme por esta dieta informativa mía y decidí volver a estar más pendiente del RSS.

Mi workflow con KeePass

Minientrada

Llevo años utiliando KeePass para gestionar las contraseñas de mis sitios web. Mi base de datos tiene a estas alturas probablemente 6 o 7 años y ha sido usada a través de múltiples aplicaciones que son capaces de comprender el formato de la base de datos.

En este momento, la aplicación que utilizo en mis ordenadores para poder acceder a mi base de datos es KeePassXC. Como es multiplataforma, es muy fácil de instalar en todas partes: Windows, Linux, FreeBSD, MacOS… Por otra parte, también he usado aplicaciones para Android en el pasado, y ahora que uso iOS e iPadOS, utilizo KeePassium acceder a las contraseñas ahí.

KeePassium se vuelve mucho más directo y personal, por ejemplo, cuando se activa el desbloqueo con huella o con Face ID, para evitar tener que teclear todo el rato la contraseña. Esto también me resulta práctico si tengo que desbloquear una contraseña en algunos sitios donde no me gustaría que alguien me viese pulsar teclas en la pantalla de mi móvil, como es el transporte público. También soporta integración con el autocompletado de contraseñas nativo de iOS.

No mucha gente sabe que una base de datos de KeePass vale para algo más que para guardar usuarios y contraseñas. Cada entrada de KeePass soporta archivos adjuntos y otro tipo de datos extra, de modo que aquí algunos trucos avanzados que uso en mis bases de datos:

  • Gracias a la función de archivos adjuntos, utilizo mi base de datos de KeePass para guardar otro tipo de cosas que no son contraseñas. Una copia de mis claves SSH, una copia de mi certificado GPG, los PKCS de la administración pública, y el keychain que hace falta para firmar APKs antes de subirlos a la Google Play Store.
  • La función de atributos también es ideal para guardar notas secretas, por ejemplo, con los códigos de un solo uso necesarios para recuperar una cuenta que tenga activo el 2FA en caso de emergencia.
  • Algunas copias de seguridad de archivos sensibles, como el archivo que uso para controlar mis finanzas personales, también lo puedo cargar como adjunto en una entrada de KeePass que no tiene contraseñas ni nada.
  • Es posible utilizar KeePassXC también como proveedor OTP, en vez de aplicaciones del móvil tipo Google Authenticator. Esto lo pongo a prueba constantemente en mi ordenador del trabajo, donde tengo otra base de datos diferente para las cuentas del trabajo, y funciona de forma excelente.
  • Es posible personalizar las carpetas y las entradas con iconos propios. KeePassXC también tiene la opción de descargar automáticamente el favicon de un sitio web para emplear como icono, lo que hace más fácil ubicar una cuenta en una tabla muy grande gracias a que se puede encontrar por el icono.
  • Aparte de crear contraseñas aleatorias y asociarlas automáticamente a nuevas entradas en la base de datos, es posible usar un generador independiente que no está conectado a nada, pero que te deja igualmente copiar la contraseña generada. Empleo esta función bastante en el trabajo para generar contraseñas aleatorias cuando me piden que registre en algunas aplicaciones de intranet cuentas de usuario de otras personas, si luego voy a tener que mandarles una contraseña inicial. Al margen de que se acuerden de cambiarla o no luego, por lo menos es más seguro que iniciarla a 123456.

Dos meses usando Apple Sillicon

Hace un par de meses, me cambiaron el ordenador del trabajo por un modelo más reciente. Cuando me lo renovaron, el modelo que me asignaron era uno de los recientes que utiliza la arquitectura Apple Sillicon y un procesador M1, como el que están usando ya en algunos iPad. Aquí cuento algunas de las cosas buenas y malas que me he encontrado en estos dos meses.

Cosas positivas

Mi opinión está posiblemente sesgada debido a que este ordenador no deja de ser un ordenador de trabajo. No es mío realmente, es prestado y no me pertenece, y tampoco tiene cargado software que no tenga que ver con mi trabajo, así que más allá de editores de textos, entornos de Node.js y otras aplicaciones que necesito para trabajar, no tiene gran cosa. No hay editores de vídeo, no hay juegos, no hay nada de lo que emplearía en un ordenador más personal.

También mis impresiones podrían estar sesgadas por el anterior modelo, que era un 2015, de modo que su procesador ya tiene unos cuantos años y eso puede hacer que algunos programas recientes no vayan tan bien. Y, sin embargo, lo poco que tengo lo veo con un rendimiento bastante bueno. Por hacer una comparación a base de lo que he visto en mi día a día:

  • En mi anterior ordenador tardaba en torno a unos 10 minutos en instalar Ruby a través de rbenv. Para instalar Ruby, rbenv compila Ruby desde el código fuente, así que el proceso de instalación incluye asegurarse de que hay compiladores de C instalados, descargar y compilar OpenSSL, y finalmente descargar y compilar todo el runtime de Ruby. En mi ordenador con Apple Sillicon y procesador M1, esto le toma 3 minutos, o sea, una tercera parte del tiempo.
  • En mi anterior ordenador, ejecutar una suite de tests completa del proyecto con el que más tiempo paso le podía llevar entre 20 y 25 minutos. En el Apple Sillicon, toma de 5 a 6 minutos.

De cara a la parte térmica, en dos meses todavía estoy esperando a escuchar alguna vez el ventilador de mi ordenador. Ni siquiera cuando estoy ejecutando tests más complejos o haciendo operaciones más intensas lo he llegado a escuchar. Alguna vez lo he notado un poco caliente, pero muy poco. Casi ni podría decir que se calienta mucho.

Y de batería, resulta impresionante como puedo estar toda la mañana trabajando con él sin enchufarlo a la red para luego encontrarme la batería al 70% o al 75%. Incluso lanzando servidores, corriendo tests, usando el navegador web, teniendo varias aplicaciones Electron en ejecución o entrando en videollamadas.

En cuanto a compatibilidad, existen varias aplicaciones que todavía son Intel, pero no lo notas, debido a que funcionan igual que una aplicación ARM, sin pérdida de rendimiento. Fundamentalmente, veo esto en aplicaciones Electron, donde usan algunos runtimes antiguos que todavía son Intel y que aún no han actualizado a Sillicon.

Para la línea de comandos también es posible usar binarios Intel si se ejecuta a través del wrapper arch, por ejemplo arch -arch x86_64 terraform para ejecutar una versión x86_64 de Terraform. He elegido Terraform como ejemplo, precisamente, porque algunos plugins que no estén actualizados puede que sólo tengan versión Intel en el registry; así que al final es más conveniente instalar todo Terraform como una aplicación Intel para no llevarse sorpresas cuando un Terraform ARM trata de invocar un plugin que no es compatible.

Cosas negativas

No obstante, no es oro todo lo que reluce, y aquí algunas de las cosas negativas que he encontrado en el M1 en estos meses:

  • Aunque es algo que en los últimos modelos ya están corrigiendo, mi ordenador es de primera generación, de modo que el número máximo de pantallas externas que puedo enchufar por lo general es… una y no más. Reportan que con docks compatibles con DisplayLink es posible usar más de una, pero con un cable USB-C ordinario o con un adaptador genérico HDMI a USB-C, aparte de la pantalla interna sólo se hace posible trabajar con una pantalla a la vez.
  • El único punto donde he encontrado conflictos en la compatibilidad con el procesador es, irónicamente, en línea de comandos. Todavía está pendiente de salir una versión de GCC que tenga soporte real para darwin-arm64, de modo que la única alternativa al clang es utilizar una versión de GCC en modo Intel. Por otra parte, algunas bibliotecas nativas de Node.js tienen problemas para compilar, por lo que al final lo más seguro que encuentro es emplear versiones Intel de Node.js a través de Rosetta. Tengo dos instalaciones de Homebrew, una Intel y otra ARM, por esta razón.
  • Como el procesador es ARM y no Intel, si se usa Docker o Podman se usará también un kernel Linux para ARM dentro del hipervisor, así que hay que tener esto en cuenta si los Dockerfiles no son compatibles o descargan directamente binarios para la arquitectura incorrecta.

Opinión final

No obstante, pese a que lo de que no acepte más de una pantalla en los primeros modelos es una cagada bastante grande, mi resumen general sobre el procesador M1 (y todos los que han venido detrás de él) es que es una tecnología revolucionaria. El M1 ha agitado bastante las bases de los procesadores para ordenadores normales. Quitando algunos modelos de la Surface que pueden tener un buen rendimiento parecido al de un iPad Pro, ARM hasta ahora ha sido visto principalmente como procesador para computación móvil o para ordenadores pequeños como la Raspberry Pi o los Pinebook (1). Sin embargo, para ordenadores normales de escritorio hasta ahora nunca ha habido nada excesivamente sorprendente. El M1 es uno de los primeros procesadores que busca llevar ordenadores con rendimiento equivalente a un Intel a las mesas de trabajo o de entretenimiento. Algunos fabricantes se han empezado a animar. Por ejemplo, Lenovo está preparando el lanzamiento del X13s para este 2022, un portátil general que utiliza Snapdragon que pretende darle algo de vidilla al ecosistema Windows ARM, el cual lleva existiendo varios años sin que esté destacando demasiado por el momento.


(1) En realidad, esta frase está ignorando procesadores ARM como el A64FX, el cual está siendo usado por algunos computadores como el que desde hace un par de años lidera el Top 500.

¿Por qué FreeBSD y no (x)BSD?

Minientrada

Por eliminación.

Elegí FreeBSD porque NVIDIA publica drivers para la ABI de FreeBSD. Lo que significa que puedo tener aceleración gráfica y tener mis pantallas con la resolución correcta en vez de usar el driver genérico xorg-vesa. No sirve de nada más porque NVENC no está disponible fuera de Windows y porque no uso FreeBSD para jugar.

Eso es todo. No soy un fanboy de FreeBSD y si mis casos de uso hubiesen sido otros tal vez hubiese ganado otro sistema operativo. Pero ganó este. Los tres sistemas son muy similares entre sí de todos modos.


Otros candidatos:

  • NetBSD: me gusta por su extremada simpleza, hecha para darle una perfecta portabilidad. El lema de NetBSD es “por supuesto que corre NetBSD”, haciendo referencia al hecho de que es posible instalarlo en muchísimas arquitecturas (incluso en Macs de principios de los años 90 o en Play Stations).
  • OpenBSD: lo admiro por su extrema seguridad, pero mis casos de uso con mi ordenador me llevan a admirarlo de lejos. OpenBSD es tan seguro que hace unos años eliminaron el soporte para Bluetooth porque es un protocolo inseguro y su driver no estaba bien mantenido.