Uma constelação que cresce à medida que falas
A 22 de maio, o ecrã inicial do XNeuronal deixou de mostrar uma esfera de demonstração, idêntica para toda a gente, e passou a desenhar a memória real da pessoa que fala: um ponto por memória, uma forma por categoria, uma cor por área da vida, desde a primeira memória. No mesmo dia, as fichas aprenderam a mostrar a sua formatação em vez dos símbolos, e «o que tenho na próxima semana?» passou de oito consultas a uma só.
À noite, a Marta conta o seu dia
A Marta ganhou um hábito. À noite, com a loiça lavada, encosta o telemóvel à chávena, carrega no botão e conta. «Almocei com o Rui, ele muda de emprego em setembro. Quinta-feira, inspeção às oito, tenho de me lembrar do documento do carro. E a minha mãe ligou por causa do aniversário do pai, é dia 14.» Não classifica, não arruma. Fala com alguém que ouve, que responde e que se vai lembrar.
Até 22 de maio, enquanto ela falava, o centro do ecrã mostrava uma esfera. Uma esfera bonita, catorze iterações para encontrar o seu ponto de equilíbrio, que pulsava devagar em repouso e se agitava um pouco à escuta. Mas era a mesma esfera para a Marta e para alguém que tinha acabado de instalar a aplicação sem ter dito nada ainda. Não sabia nada do Rui, nem da inspeção, nem do dia 14. Era uma demonstração: o aspeto de uma aplicação que ouve, em geral.
A memória dela, a verdadeira, vivia noutro sítio. Nas definições, uma página «Constelação» desenhava cada memória como um ponto e cada ligação como um fio, e podia-se arrastar, beliscar para ampliar, tocar num ponto para abrir a sua ficha. Foi aí que, uma semana antes, cada ponto tinha recebido uma forma segundo a sua categoria. Um mapa cuidado, a três ecrãs de profundidade, que ninguém abria à noite a contar o seu dia.
Tirar o mapa das definições
A meio do dia 22 de maio, esse mapa subiu ao ecrã inicial. Não uma cópia simplificada: o mesmo componente da página das definições, num quadrado que ocupa toda a largura, centrado um pouco acima do meio para deixar espaço ao fio da conversa.
Duas diferenças em relação à versão das definições. A primeira: não reage a nenhum gesto. Nem arrastar, nem beliscar, nem tocar num ponto. No ecrã inicial, a constelação é um fundo, não um mapa para percorrer; o único gesto desse ecrã continua a ser o botão para falar. A segunda: mexe-se, e voltaremos a isso.
Uma decisão acompanhava a subida: a constelação só substituía a esfera a partir de vinte memórias ativas. O raciocínio parecia são: três pontos isolados ficariam pobres para quem começa, enquanto a esfera é bonita logo à partida. Para não mostrar a esfera durante os duzentos milissegundos em que a aplicação ainda não sabe quantas memórias tem, guardava-se uma marca no telemóvel na primeira vez que o limiar era ultrapassado, e os arranques seguintes iam direitos à constelação, mesmo que as eliminações voltassem a descer abaixo de vinte.
Esse limiar não passou da noite. Mas antes de dizer porquê, é preciso dizer o que se vê.
Um mapa que respira
A página das definições desenhava uma constelação imóvel. No ecrã inicial, a imobilidade pareceria uma planta de interior. Por isso, o dia 22 de maio escreveu um modo animado, com cada parâmetro escolhido para que viva sem distrair.
Cada ponto deriva. Não um tremor: uma curva lenta e aberta, obtida dando a cada ponto duas frequências ligeiramente diferentes, uma horizontal e outra vertical, entre cinco e doze segundos por ciclo. Dois pontos nunca seguem o mesmo caminho, e nenhum volta exatamente ao ponto de partida. A amplitude é suficiente para o olho perceber o movimento e pequena o bastante para duas memórias nunca se sobreporem.
Cada halo respira, dezoito por cento à volta do seu valor, a um ritmo próprio de cada ponto, entre dois e quatro segundos. Os ritmos são dispersos de propósito: se todos os halos respirassem em conjunto, a constelação teria um batimento visível, e um batimento prende o olhar.
E cada memória acende-se, de vez em quando. A cada dez a vinte e cinco segundos, conforme o ponto, um sopro de um quarto a mais de opacidade e oito por cento a mais de tamanho, subida e descida suaves durante um décimo do ciclo. Nunca um clarão: um pensamento que se ilumina por um instante, não um estroboscópio. Os fios entre os pontos foram redesenhados como dois traços sobrepostos, um largo e translúcido atrás, um fino e nítido à frente, para terem a espessura de um fio e não de um cabelo. E o conjunto inspira e expira dois e meio por cento a cada três segundos, como a esfera fazia.
Um pormenor conta mais do que os outros: tudo é determinado pelo identificador de cada memória, nada é tirado à sorte. A trajetória do Rui, o ritmo da sua respiração, o instante em que se acende, são os mesmos de um dia para o outro. A constelação nunca volta a baralhar as cartas.
Quando a Marta carrega no botão, ondas de escuta juntam-se à volta do mapa. Quando as bolhas da conversa ocupam o ecrã, a constelação esbate-se para um quarto, para que se leiam as bolhas. Vinte e quatro imagens por segundo, um ritmo escolhido para se manter fluido com algumas centenas de pontos redesenhados a cada imagem.
Onde fica cada memória, e porquê
A disposição não é decorativa. Diz algo sobre a memória.
Dois anéis. Por dentro, o que conta agora: as memórias que estão no nível de trabalho da memória, as de importância alta e as que são encruzilhadas, ligadas a muitas outras. Por fora, o resto. Cada ponto tem um ângulo fixo, com uma ligeira folga para que o anel não pareça o mostrador de um relógio. O raio do conjunto cresce com a raiz quadrada do número de memórias: uma memória de cem não é dez vezes mais larga do que uma de dez, é mais densa.
O tamanho de um ponto cresce com o número de vezes que se falou dele, com a sua importância e com o seu papel de encruzilhada. Uma memória repetida, reconhecida como a mesma e reforçada em vez de recriada, engorda. Uma memória dita uma vez fica pequena.
A cor do halo diz a área da vida. Âmbar para a família, azul para o trabalho, vermelho para a saúde, verde para os amigos, amarelo para o dinheiro, laranja para a casa, ciano para o que se aprende, violeta para si próprio. Cinzento quando a aplicação não sabe. A forma do núcleo diz a categoria: um círculo cheio para um facto, um círculo contornado a branco para uma pessoa, um losango para um evento, um hexágono para uma nota, um triângulo para uma tarefa, um pequeno losango vazio para um lembrete, uma estrela para um tema. E os fios, os que a memória escrevia desde o início, ligam o que pertence ao mesmo assunto: azul-claro para a maioria, vermelho quando uma memória corrige outra, laranja tracejado quando uma substitui a outra.
Cresce enquanto falas
O essencial cabe numa linha de código, mas é a linha que muda o que a Marta vê.
A constelação do ecrã inicial recarrega-se em dois momentos precisos: assim que a resposta do assistente é colocada no fio, antes mesmo de a voz ter acabado de a ler, e de novo quando a voz se cala. É o mesmo gatilho que já faz mexer o contador de memórias no topo do ecrã no momento da bolha, e não seis segundos depois. Também se recarrega quando se volta à aplicação, e uma memória eliminada desaparece do mapa no instante.
Assim, a noite da Marta muda de natureza. Diz Rui, e aparece um círculo contornado a branco, verde, no anel exterior. Diz a inspeção de quinta-feira, e pousa-se um losango, com um triângulo ao lado para o documento do carro, e um fio entre os dois. Diz o dia 14, e acende-se um losango âmbar. Enquanto conta, a sua memória desenha-se à frente dela, e na noite seguinte os pontos da véspera continuam lá, no seu lugar, com o seu ritmo.
O ecrã inicial já não é a imagem de uma aplicação que ouve. É a imagem do que a Marta lhe contou.
A tarde: uma falha ao arrancar, depois o fim do limiar
Duas horas e meia depois da subida da constelação, a aplicação fechava-se ao arrancar para todos os que a tinham. A causa está no motor de desenho, que exige que um componente declare o mesmo número de pequenos estados internos em cada renderização. O cálculo das animações tinha sido colocado depois da linha que diz «se não houver pontos, não desenhes nada». Na primeira renderização, a memória ainda não estava carregada: saída antecipada, cálculo nunca declarado. Na renderização seguinte, os pontos lá estavam, o cálculo era declarado, e o motor contava um estado a mais do que antes. Recusou, e a aplicação morreu no ecrã de arranque. A correção foram umas linhas mudadas de sítio; é o tipo de defeito que não dá nenhum erro ao escrever e impede a aplicação de abrir.
Às dezoito horas, o limiar de vinte memórias foi retirado, juntamente com a marca que o memorizava e a própria esfera de demonstração. Três razões. A marca, pensada para evitar uma cintilação ao arrancar, produzia outra: a frio, a aplicação mostrava por vezes a coisa errada enquanto a relia, e se o limiar tivesse sido ultrapassado noutra sessão, o ecrã ficava preso na demonstração muito tempo depois. Depois, a esfera estática já não se desenhava corretamente, e a pessoa que usa a aplicação pediu que a tirassem. Por fim, a razão que tinha justificado o limiar virou-se do avesso: três pontos dispersos num ecrã calmo não ficam pobres. Dizem «a tua memória está a ganhar forma», que é exatamente o que se quer dizer a quem começa.
Desde então, a constelação mostra-se desde a primeira memória. Antes dela, o espaço fica vazio e calmo, e enche-se quando a memória se enche. A esfera não desapareceu da aplicação: fica, pequena, no fundo do ecrã enquanto o assistente fala, como alvo a tocar para o interromper. Mas no centro do ecrã inicial já não há nada que seja igual para toda a gente.
Estrelas à volta das palavras
Na mesma tarde, resolveu-se um incómodo mais antigo. Quando o assistente redige uma ficha, escreve com uma formatação leve: títulos, negrito, marcas de lista. Um pequeno leitor caseiro sabia mostrá-la, mas só em dois sítios, a ficha do tipo nota e o resultado de uma pesquisa. Em todo o resto, o detalhe de uma ficha, as listas de lembretes, tarefas e notas, a caixa de entrada, a lista da memória, o texto aparecia em bruto. A Marta abria a ficha do Rui e lia asteriscos à volta de «setembro».
Foram traçados dois caminhos. O corpo da ficha, ao abri-la, passa agora pelo leitor: os títulos são títulos, o negrito é negrito. As linhas de lista, cortadas a duas ou três linhas, não podem receber formatação; passam por um limpador que retira os símbolos e os prefixos de bloco, cardinais, travessões, números, e conserva as palavras. O mesmo limpador serve as etiquetas lidas pelo leitor de ecrã e a caixa de confirmação que cita a memória antes de a eliminar: já não cita os asteriscos.
De passagem, o leitor ganhou três estilos em linha: o itálico, o código em linha sobre uma pequena pastilha cinzenta, útil para um nome de ficheiro ou um comando, e o realce, sobre um marcador âmbar suave, como um marcador fluorescente no papel. Continua deliberadamente limitado ao que o assistente produz; não é um leitor completo e não pretende vir a sê-lo.
«O que tenho na próxima semana?»
O dia tinha começado, de manhã, com uma pergunta da Marta que correu mal: o seu plano da semana. A resposta tinha demorado mais de dois minutos. Os registos mostravam porquê: para uma só pergunta, o assistente tinha lançado oito pesquisas em paralelo pela memória.
Não era um capricho do modelo, era uma ferramenta mal exposta. O serviço que consulta a memória sabia há muito filtrar por janela de datas, e a base tinha um índice dedicado, ordenado por vencimento, que torna essa consulta quase instantânea. Mas esses dois filtros nunca tinham sido declarados na descrição da ferramenta que o modelo vê: do seu ponto de vista, não existiam. Restavam-lhe duas más escolhas, ir buscar tudo e filtrar sozinho, ou procurar pelo sentido, o que compara a pergunta com quinhentos candidatos e não percebe nada de «a próxima semana». Segundo defeito: mesmo com uma janela de datas, os resultados voltavam ordenados pela última menção. O índice entregava-os por ordem cronológica; uma ordenação explícita sobrepunha-se, e o modelo tinha de voltar a pôr os dias em ordem de cabeça, com o risco de se enganar.
A manhã declarou os dois extremos da janela na ferramenta, com a instrução de a calcular com precisão: «esta semana» vai de hoje até domingo à meia-noite; «este fim de semana», de sábado a domingo; «este mês», do primeiro ao último dia. Quando se pede uma janela, os resultados voltam por ordem de datas. E o servidor escreve agora um aviso nos seus registos assim que um mesmo turno dispara mais de três pesquisas, para apanhar uma regressão antes de custar dois minutos a alguém.
Três minutos depois, uma segunda correção, porque o próprio assistente tinha explicado o que fizera: várias consultas sobre a janela da semana, uma para os eventos, uma para as tarefas, uma para cada tipo de lembrete, e depois um resumo reconstruído dia a dia. Também aí era estrutural. A ferramenta só aceitava uma categoria de cada vez; até o pedido mais disciplinado tinha de disparar quatro consultas para ficar completo. Desde então, a categoria aceita uma lista, e um plano é uma única consulta: eventos, tarefas e lembretes, por ordem, de uma vez.
A instrução dada ao assistente foi reescrita no mesmo sentido. A via preferida para um plano é a apresentação direta, em que o servidor faz ele próprio a consulta e mostra a lista do momento, aquela que, desde o mesmo dia, deixa uma vinheta por baixo da resposta e se abre ficha a ficha. A janela continua estrita: nada de transbordar para os dias vizinhos, mesmo que o assistente saiba coisas interessantes sobre eles. Se achar que falta contexto, propõe-no no fim da resposta, «queres que te liste também a semana seguinte?», e nunca vai lá por conta própria.
O que fica em aberto
A constelação do ecrã inicial não se toca. Para abrir a ficha do Rui a partir de um ponto, ainda é preciso passar pela página das definições. É uma escolha por agora, não um limite técnico.
Vinte e quatro imagens por segundo com algumas centenas de pontos é o teto pretendido. Uma memória de vários milhares ainda não foi desenhada num telemóvel modesto. As amplitudes, as frequências, os limiares que colocam um ponto por dentro ou por fora são afinações a olho, não medidas, e serão revistas ao ver memórias reais a viver.
O aviso sobre as pesquisas múltiplas é um sinal nos registos, não uma barreira: avisa, não impede nada. E o leitor de formatação continuará pequeno, enquanto o assistente só escrever o que sabe ler.
Para a Marta, o que o dia 22 de maio mudou vê-se sem ser preciso explicar. Conta o seu dia a alguém que ouve, que responde e que se lembra; e enquanto fala, o ecrã já não lhe mostra uma demonstração. Mostra-lhe o que ela lhe confiou, a ganhar forma.
