← Diario
Técnica·12 may 2026

La ficha que se puede corregir a mano

Una ficha de receta escrita a mano sobre una encimera de cocina, un lápiz tachando una línea, una casilla marcada al borde de la página, luz de cocina a media mañana

Una ficha dictada siempre tiene algo mal, y hasta el 12 de mayo la única corrección posible era volver a decirlo todo. Ese día cada palabra de la ficha pasó a tocarse y reescribirse, los pasos de una receta se marcan, y la ficha se borra desde ella misma. Hubo que redibujar una casilla que Android no mostraba, y rescatar tres veces la última frase que el botón «Listo» se tragaba.

Una ficha que solo se podía volver a dictar

El día anterior, la ficha había aprendido a rellenarse en campos declarados: un título, insignias, secciones de ingredientes, pasos. Se mostraba limpia. Tenía un defecto que nadie veía hasta usarla de verdad: era de solo lectura.

Y una ficha dictada nunca sale del todo bien. «Ochocientos gramos» se convierte en «ocho gramos». Un paso se cuela en el sitio equivocado. La insignia de preparación dice treinta minutos cuando la masa necesita una hora con el reposo. Son errores de un segundo, y la única respuesta disponible era volver a hablar y repetirlo todo, esperando que el segundo dictado no fallara en otro sitio.

Es el tipo de defecto que decide el uso real de un objeto. Una ficha que no se puede corregir es una ficha que al final dejas de abrir, porque ya no te fías de lo que dice.

La mañana: una receta que se cocina de verdad

El día empezó por el caso de uso más concreto: cocinar con la ficha abierta.

Los ingredientes ya tenían sus casillas. Los pasos, en cambio, eran solo una lista numerada. Los hicimos tocables: un dedo sobre un paso, y su número pasa de azul a gris, el texto se tacha y se atenúa. Los pasos que quedan conservan su número azul, así que el ojo encuentra solo lo siguiente que hay que hacer. Los dos contadores están separados a propósito: lo que has sacado de la nevera y lo que ya has hecho no se mezclan.

Un detalle pidió más reflexión de lo que parece. Una segunda barra de progreso, para los pasos, solo aparece en el momento en que marcas el primero. Mientras no hayas empezado a cocinar, la ficha se queda tranquila, con una sola barra para los ingredientes. Una ficha que muestra dos indicadores vacíos al abrirse parece un cuadro de mandos, y nadie quiere un cuadro de mandos en su cocina.

Siguieron dos ajustes. La ficha se apoya ahora sobre un fondo ligeramente crema mientras sus tarjetas de ingredientes se quedan de un blanco puro, para que las tarjetas floten en vez de fundirse con la página. Y la memoria recibió una consigna estricta para sus recetas: los ingredientes se agrupan por familia, carne, pescado, verduras, féculas, lácteos, especias, acabado, nunca en una sola lista plana. Una lista plana de dieciocho ingredientes se lee mal en el supermercado. Siete listas cortas se leen pasillo a pasillo.

La casilla que no existía en Android

El primer tropiezo del día fue visual, y fue instructivo.

La casilla marcada debía mostrar un pequeño degradado, de cian a azul, con una marca blanca dentro. Estaba dibujada con una biblioteca de gráficos vectoriales, metida en un marco que recortaba lo que sobresalía de sus esquinas redondeadas, y apoyada sobre una sombra suave. En iPhone, perfecto. En Android, la casilla marcada mostraba su halo azul y nada dentro: ni degradado, ni marca. Un cuadrado vacío con sombra.

La causa es una combinación conocida por quienes hacen aplicaciones Android y desconocida para todos los demás. En Android, una sombra la calcula el sistema a partir de una elevación, y esa elevación se lleva mal con un marco que recorta su contenido. El dibujo vectorial de dentro sencillamente nunca se renderizaba. Nada fallaba, nada avisaba.

En vez de buscar la combinación de ajustes que contente a las dos plataformas, la casilla se redibujó de una pieza con un motor gráfico que pinta directamente en pantalla: el rectángulo redondeado, el degradado y el trazo de la marca se dibujan en un solo lienzo, en una sola pasada nativa. El marco que recortaba desapareció, la sombra se quedó en la vista exterior, donde Android la espera. La marca es una curva trazada a mano, tres puntos unidos por un trazo redondeado, en vez de un carácter de fuente cuyo aspecto cambia según el teléfono.

La lección es sencilla: cuando dos capas de una interfaz se disputan el mismo píxel, mejor que solo una lo pinte.

Tocar una palabra para cambiarla

Luego llegó el editor, que es el corazón del día.

Un pequeño menú arriba a la derecha de la ficha ofrece dos cosas: modificar, borrar. «Modificar» no abre un formulario. La ficha sigue exactamente igual, salvo que todo lo que se puede cambiar queda subrayado con un punteado discreto: el título, la cita original, la nota de memoria, cada insignia, cada título de sección, cada nombre de ingrediente y su cantidad, cada título de paso, su texto, su duración. Tocas una palabra, se convierte en un campo de texto con el cursor dentro. Escribes, sales del campo, y queda guardado.

Que solo haya un campo activo a la vez no es una elección únicamente estética. Un campo de texto cuesta mucho más de mostrar que un texto simple, sobre todo en Android y sobre todo si admite varias líneas. Una ficha de receta con cuarenta campos activos a la vez empieza a ir a tirones al desplazarse, y el teclado salta en cuanto lo rozas. Un solo campo a la vez es una ficha que sigue siendo una ficha hasta el momento preciso en que quieres escribir en ella.

Alrededor de ese gesto básico, algunos añadidos: una insignia más, una cruz para quitar una, un ingrediente o un paso más en cualquier sección, una sección entera menos, una lista o una serie de pasos nueva al pie de la ficha. Y una pastilla «Listo» arriba a la izquierda para salir del modo edición.

Cada modificación sale de inmediato hacia el servidor. La ruta que hasta entonces solo aceptaba un cambio de estado de un recuerdo, activo, archivado, silenciado, acepta ahora también su contenido, sus metadatos y sus temas, con la misma regla de antes: solo se modifica lo que te pertenece, y el servidor lo comprueba por su cuenta. La transformación profunda de un recuerdo, la que conserva su historia en la memoria neuronal, sigue pasando por la conversación. Esta ruta es para retoques, no para revisiones.

Borrar, por último, pide confirmación y luego elimina la ficha para siempre y cierra el panel. Es la única operación realmente destructiva de todo el día, y la única que hace una pregunta antes de actuar.

El título que volvía atrás

El segundo tropiezo era más taimado, porque parecía una avería cuando todo funcionaba.

Tocas el título, lo corriges, sales del campo: reaparece el título antiguo. Cierras la ficha, la vuelves a abrir: el título nuevo está ahí. La modificación se había guardado, solo se negaba a mostrarse en el acto.

La explicación está en quién posee el dato en pantalla. La ficha guardaba una copia local de su contenido para mostrar la corrección sin esperar al servidor, y se realineaba con lo que le pasaba su elemento padre cada vez que este cambiaba. Pero el padre se redibuja por mil razones que no tienen nada que ver con el contenido, y cada vez le tendía a la ficha un objeto técnicamente nuevo, de contenido idéntico. La ficha tomaba ese objeto nuevo por una actualización real y machacaba su corrección recién hecha con la versión anterior. La corrección solo volvía al reabrir, cuando el padre por fin había recargado el dato real.

La solución no es un parche, es una mudanza. La copia local dejó la ficha y subió un piso, al panel que la muestra: es él quien aplica la corrección en pantalla primero, envía el guardado después, y solo se resincroniza cuando se cambia de verdad a otro recuerdo. La ficha volvió a ser lo que siempre debió ser, una pura pantalla de lo que se le da.

De paso, una cantidad algo larga, «cuatro trozos, ochocientos gramos» junto a un nombre de ingrediente también algo largo, desbordaba su línea y se salía de la tarjeta. Nombre y cantidad se apilaron en columna en vez de ir alineados lado a lado: la cantidad pasa debajo del nombre, y ya nada sobresale.

«Listo» se tragaba la última frase

El tercer tropiezo resistió tres veces, y es el más interesante del día para quien construye interfaces.

El escenario: modificas la duración de un paso, escribes «cuarenta minutos» y, sin salir del campo, tocas directamente «Listo». La ficha vuelve al modo lectura. La duración muestra el valor antiguo. Nada salió hacia el servidor.

Lo que pasaba: el campo de texto guarda su valor en el momento en que pierde el foco. Pero «Listo» desmonta el modo edición de golpe, y el campo se retira de la pantalla antes de haber perdido el foco. Los caracteres escritos vivían en un borrador, y el borrador desaparecía con el campo.

Primera respuesta: el campo vigila ahora la señal de edición de su padre. Si pasa a «lectura» mientras el campo aún tiene el foco, este guarda su borrador antes de ser retirado. Segunda respuesta, con cinturón y tirantes: el botón «Listo» empieza por bajar el teclado, lo que hace que el campo activo pierda el foco de forma natural, y solo después cambia de modo.

Bastó para el título, las insignias, los ingredientes. No para los pasos.

Los pasos tenían una particularidad: en modo lectura, cada línea de paso es un elemento tocable, para poder marcarla. En modo edición, es un simple contenedor. Dos naturalezas distintas. Al pasar de una a otra, el sistema de pantalla no actualiza la línea, la destruye y fabrica una nueva. El campo de texto de dentro se destruye con ella, antes incluso de que su vigilancia de la señal de edición haya tenido tiempo de reaccionar. La primera respuesta era correcta, llegaba demasiado tarde.

La tercera respuesta se ejecuta en el mismo instante de la destrucción del campo: si el campo tenía el foco y su borrador difiere de su valor de origen, guarda el borrador en su último aliento. Aquí cuenta un punto técnico: en ese instante, el estado capturado en la última pintura ya no es fiable, hay que leer los valores en referencias mantenidas al día de forma continua. El mismo mecanismo cubre de paso el borrado de una sección mientras escribes en ella, y cualquier otro caso en que el árbol de pantalla cambie de forma alrededor de un campo activo.

Dos migajas para terminar. Una insignia de preparación que decía «treinta minutos, más reposo» estaba bloqueada en veintiocho caracteres y rechazaba la escritura: el límite subió a sesenta. Y el servidor escribe ahora una línea en su registro por cada retoque recibido, y otra si la base de datos lo rechaza. La próxima vez que una modificación «no parezca haberse guardado», sabremos de un vistazo si la petición nunca salió o si fue rechazada al llegar. Son dos averías distintas, y hasta entonces tenían la misma cara.

Lo que el día cambió

Estos trabajos parecen chapuzas de interfaz. Se sostienen juntos por una idea.

Una ficha que la memoria rellena por ti solo vale algo si puedes volver a tomarla en tus manos. Dictar es rápido, y precisamente por eso deja errores. El día en que corregir un error cuesta menos que dejarlo, la ficha se convierte en un objeto en el que confías. El día en que una lista se marca paso a paso con las manos llenas de harina, ha salido del teléfono para entrar en la cocina.

El resto, la casilla invisible, el título que retrocedía, la frase tragada, es el coste de esa promesa. Los tres defectos tenían el mismo síntoma, «mi cambio no se aplica», y tres causas sin ninguna relación. Eso es lo que hizo largo el día: cada vez que el asunto parecía cerrado, el mismo síntoma volvía por otra puerta. Aprendimos a no fiarnos del síntoma, y a buscar la causa cada vez como si fuera la primera.

Leer a continuación
XNeuronal ya está disponible en AndroidUna memoria que deduce está por llegar