Aug. 11, 2025

Willemstagram

Un panel de fotos 3D que revela historias

La semana pasada estuve con un cliente mirando la nueva página de inicio de willem.com, donde utilizo una narrativa para contar las cosas que hago. Este cliente es uno de los mejores pensadores creativos y visionarios, pero mi texto no pareció conectar con él. Pensando en esto, recordé una importante lección de psicología de la Universidad: necesitaba algo diferente, algo no lineal. ¡Este post trata sobre dar un golpe de efecto visual!

Pensamiento del hemisferio izquierdo frente al derecho

Una de las cosas geniales de mi formación en la Universidad de Ámsterdam fue que recibimos clases de diferentes facultades, formando una interesante mezcla de ciencia interdisciplinaria. Un libro clásico que discutimos fue "Mintzberg on Management", en el que el autor explica por qué diferentes personas prefieren diferentes cosas, la clásica dicotomía a menudo simplificada como pensadores del hemisferio izquierdo frente al derecho:

Mi nueva página de inicio de willem.com funcionaba bien para los pensadores lineales como yo, la narrativa basada en texto se adapta al cerebro izquierdo. Pero, mi diseño se quedaba corto para las personas que se desenvuelven mejor con impresiones no lineales y llenas de ambiente. Necesitaba algo que expusiera los muchos elementos visuales de una manera rica y dinámica, viva y con una buena dosis de diversión interactiva.

Tablero Solari

Hace muchas lunas conocí a mi esposa en la Estación Central de Utrecht, justo debajo del gigantesco panel de información de salidas. El icónico panel de información azul de 7x4,20 metros, que pesaba alrededor de 3000 kilos, contaba con paneles mecánicos que giraban produciendo un sonido reconocible que se oía cada minuto aproximadamente en el vestíbulo central de la estación. Este tipo de pantalla de señalización se suele llamar "Tablero Solari", en honor a Solari di Udine, la empresa italiana que produjo estos iconos. Hoy en día, la estación de Utrecht cuenta con pantallas de información digitales, pero si quieres, todavía puedes verlo en Het Spoorwegmuseum.

El gran panel de información de salidas mecánico y azul de Utrecht Centraal (foto: cc/maurits90)
El gran panel de información de salidas mecánico y azul de Utrecht Centraal (foto: cc/maurits90)

Como aficionado a las metáforas (consejo de libro: Metaphors we live by), pensé que el Tablero Solari, con su "giro y cambio", sería una forma encantadora de permitir a los visitantes de willem.com "partir" hacia varios "destinos" (las historias) en el sitio. En lugar de usar texto, elegí deliberadamente usar las fotos y los elementos visuales de las entradas del blog como puertas de entrada a la sección de reflexiones. Al revelar aleatoriamente nuevos destinos, esto es perfectamente no lineal y, al hacerlo interactivo (se puede hacer clic y tocar), es más atractivo que el texto plano. Cada destino abre un "billete" que explica un poco lo que estás viendo. Si te gusta lo que ves, puedes pulsar el botón grande para abrir la historia justo en la posición de la imagen, que podría estar a mitad de una entrada de blog. Las historias se abren en nuevas ventanas del navegador, lo que te permite volver a la "estación" para encontrar un nuevo destino.

Boceto conceptual del Diario Visual: imágenes que giran y enlazan a páginas de willem.com como un Tablero Solari mecánico
Boceto conceptual del Diario Visual: imágenes que giran y enlazan a páginas de willem.com como un Tablero Solari mecánico

Implementación: ThreeJS y una API de imágenes personalizada

Anteriormente experimenté con el motor gráfico 3D ThreeJS para visualizar datos de entrenamiento. Es una biblioteca que utiliza el elemento estándar de HTML5 canvas para generar gráficos mediante computación espacial, una forma elegante de decir que te permite dibujar cosas en tres dimensiones (x, y, z) en lugar de dos, de ahí su nombre. Proporciona controles de cámara, luz y niebla y está diseñado para permitir animaciones basadas en la posición y rotación simuladas. Es bastante genial para jugar y muy capaz. Mira estas dos entradas anteriores sobre mis experimentos con ThreeJS:

Codificación Vibe

Codificación Vibe

Sobre el poder y el peligro de programar con IA

Facturando más de $48 mil al mes, el juego de simulador de vuelo de Pieter Levels impulsó una oleada de innovación. Sin un conocimiento detallado de la tecnología de motores de juegos 3D, él 'codificó por vibra' su juego usando IA. Los críticos de su trabajo señalaron problemas de seguridad y escalabilidad, mientras que los defensores elogiaron el asombroso resultado. ¿Qué podemos aprender de esto?

Datos de entrenamiento en 3D

Datos de entrenamiento en 3D

Explorando los gráficos 3D basados en web para datos de fitness

Mientras corría por el pueblo, se me ocurrió que podría usar ThreeJS para crear una representación 3D dinámica de mis datos de entrenamiento. Sigue leyendo para ver lo que he creado; es un trabajo en progreso, pero sirve como una exploración emocionante del concepto.

El minimalista que hay en mí consideró brevemente usar animaciones, transformaciones y transiciones de CSS. Pero pensé que la perspectiva realista, donde los paneles más externos giran más inclinados, y la aleatoriedad en la selección de nuevas imágenes requerirían de todos modos el uso de JavaScript. Para maximizar su valor, quise integrarlo directamente en mi página de inicio. Pero, cargar un motor 3D completo no es algo que deba tomarse a la ligera. Para minimizar sus efectos en el tiempo de carga de la página de inicio, lo diseñé cuidadosamente para que se cargue de forma asíncrona y sea totalmente opcional (para personas con JS desactivado).

Diario Visual, apodado
Diario Visual, apodado "Willemstagram", en acción

Para alimentar el "Diario Visual", diseñé una API personalizada que sirve imágenes altamente optimizadas y escaladas a 400x400px. Cada imagen tiene un título localizado y un enlace profundo con un ancla de hashtag (slug), lo que permite sumergirse en las historias. Me apoyo en mi propia plataforma lemmid para que me proporcione la infraestructura necesaria para llevar esto a cabo. En segundo plano, un servicio optimizado de NodeJS genera las imágenes utilizando imagemagick, jpegoptim y pngquant. Puedes consultar la API tú mismo en https://willem.com/es/images.json, que devuelve un array JSON como este:

[
  {
    "url": "/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/i_15_An-average-fly-is-bigger-than-most-screws-inside-the-iMac_400x400px.jpg",
    "title": "An average fly is bigger than most screws inside the iMac",
    "target": "/en/2020-07-30_upgrading-a-27-inch-imac-5k-to-14-terabytes/#an-average-fly-is-bigger-than-most-screws-inside-the-imac"
  },
  {
    "url": "/en/2019-06-25_assembling-a-cargo-bike/i_11_Using-filler-plates-to-make-up-for-Chinese-Precision_400x400px.jpg",
    "title": "Using filler plates to make up for Chinese Precision",
    "target": "/en/2019-06-25_assembling-a-cargo-bike/#using-filler-plates-to-make-up-for-chinese-precision"
  },
  {
    "url": "/en/2021-01-14_abandoning-my-own-tablet-os/i_05_You-know-you-re-digital-pen-is-lacking-trust-if-you-grab-for-old-fashioned-pencil-and-paper_400x400px.jpg",
    "title": "You know you're digital pen is lacking trust if you grab for old fashioned pencil and paper...",
    "target": "/en/2021-01-14_abandoning-my-own-tablet-os/#you-know-you-re-digital-pen-is-lacking-trust-if-you-grab-for-old-fashioned-pencil-and-paper"
  },
  ...
]

Para evitar que esto sea solo un generador de enlaces aleatorios, he incluido deliberadamente una pequeña ventana emergente cuando tocas o haces clic en cualquier elemento visual. Utilizo los pies de foto que mantiene mi gestor de contenidos lemmid para revelar un poco de información que te permita decidir si crees que vale la pena abrir la historia.

La ventana emergente te permite decidir si te sumerges en la historia o continúas explorando otras imágenes
La ventana emergente te permite decidir si te sumerges en la historia o continúas explorando otras imágenes

Publicando el código fuente (AGPL)

Aunque estoy muy contento con cómo funciona el Diario Visual en mi sitio, creo firmemente en compartir. Es probable que tengas una idea aún mejor para algún panel giratorio tipo Solari. Por lo tanto, publico todo el proyecto como software libre/libre bajo la Licencia Pública General Affero de GNU (AGPL). Eso significa que puedes usarlo, modificarlo y distribuirlo tú mismo. Encuentra el código fuente, el readme y los archivos de ejemplo en https://source.willem.com/visual-journal/

Conclusión

A juzgar por cómo cautiva la curiosidad de mis hijos, estoy muy contento con el diario visual, al que en broma he apodado Willemstagram. Pero a diferencia del Instagram de Meta, este solo sirve imágenes para contar mis historias y su fuente es libre. Puedes echarle un vistazo en la página de inicio o pulsando el botón de abajo. ¿Qué destino elegirás?

Willemstagram

Esto fue escrito a mano. En una era de texto generado por IA, esta es mi forma sencilla de mostrar el pensamiento y el esfuerzo humano detrás de estas palabras. Para quienes sientan curiosidad, el manuscrito original (en inglés) está disponible para su descarga.

Manuscrito (PDF)