IRO UTSUSHI
Un’app che non ti chiede mai di dare un nome a ciò che provi. Lascia cadere il colore sull’acqua, mescolalo con il dito, e il movimento della tua mano resta lì, diventato un’immagine.
Disponibile sull’App StoreCosa puoi fare
- Far cadere il colore e mescolarlo … Lascia cadere sull’acqua fino a cinque colori scelti da una tavolozza di sei e mescolali con il dito fino a farne un’unica immagine. Le due tavolozze, «colori calmi» e «colori vivaci», restano intercambiabili anche dopo aver versato il colore.
- Niente parole, niente categorie … Non c’è nessun elenco di stati d’animo tra cui scegliere, né un’etichetta da aggiungere in seguito. Ciò che resta è solo la traccia del colore e del movimento del dito.
- Fino a 60 secondi per registrazione … La fine che si avvicina viene annunciata da increspature, un bagliore e un suono. Mai da una vibrazione che metta fretta.
- Quattro misure del movimento … Velocità (la mediana della velocità istantanea), ampiezza (distanza media dal baricentro), variazione (con quale frequenza cambi direzione, più la dispersione della velocità) e dinamica. Sono nascoste per impostazione predefinita nella schermata dei risultati: un’app che si rifiuta di classificare non dovrebbe cominciare mostrando un punteggio.
- Riprodurre in seguito … L’acqua viene ricostruita a partire dalla sequenza di tocchi salvata e riprodotta a 1× o 2×, con avanzamento e riavvolgimento. Il percorso del dito e i punti toccati possono essere disegnati sopra l’acqua.
- Esportare e condividere … Esporta in MP4 a 30 fps con audio, oppure in PNG. La cronologia si sfoglia con uno scorrimento verso l’alto o verso il basso, e più registrazioni possono essere eliminate insieme.
- Il suono è creato dentro l’app … Il punto toccato diventa una nota di una scala pentatonica; la velocità del movimento diventa volume e luminosità degli armonici. Sono disponibili cinque timbri: tastiera morbida, kalimba, arpa, pad d’archi e armonica di vetro.
- Accessibilità e dieci lingue … Pensata soprattutto per le persone ipovedenti, con supporto per Dynamic Type, VoiceOver, «Aumenta contrasto», «Riduci trasparenza» e «Riduci movimento». Disponibile in giapponese, inglese, spagnolo, francese, coreano, cinese tradizionale, portoghese brasiliano, tedesco, italiano e vietnamita.
Com’è fatta
| App | Swift + SwiftUI, scritta come App Package di Swift Playgrounds, senza alcuna dipendenza da pacchetti esterni. |
|---|---|
| Acqua | Una simulazione di fluidi scritta in Metal. Campo di velocità, proiezione della pressione, avvezione, rinforzo della vorticità e miscelazione dei pigmenti girano tutti sulla GPU. |
| Pigmento | Mantenuto come particelle lagrangiane e sovrapposto con miscelazione sottrattiva secondo la legge di Beer–Lambert. Essendo particelle, non si sfumano per diffusione col passare del tempo. |
| Resa visiva | Rifrazione e riflessi speculari ricavati da normali calcolate analiticamente dal campo di altezza dell’acqua, con un rumore granuloso e un dithering che evita le bande di colore. |
| Input | Preso dagli eventi grezzi di UIKit, passando al fluido tutti i tocchi raggruppati (coalesced) di un fotogramma. Fino a cinque tocchi simultanei vengono registrati, riprodotti e misurati come tratti indipendenti, uno per dito. |
| Archiviazione | L’elenco della cronologia conserva in JSON solo informazioni leggere; l’immagine è un unico PNG; la sequenza di tocchi è un binario a larghezza fissa compresso con LZFSE, in una cartella propria per ogni registrazione. |
| Riproduzione ed esportazione | L’acqua viene ricostruita rieseguendo la simulazione dai passi salvati. L’MP4 non è una registrazione dello schermo: i fotogrammi vengono ricomposti a partire da quei passi e scritti a 30 fps. |
| Audio | Sintetizzato dentro l’app, su scala pentatonica e fino a 16 voci. Nessun file audio. |
| Autoverifiche | Poiché l’ambiente non può ospitare XCTest, al suo posto viene eseguito all’avvio in debug un insieme di controlli scritti appositamente (SelfChecks.swift). |
| Crittografia | Nessuna; la risposta di export compliance è inclusa con l’app. |
Le parti tecnicamente interessanti
La scia continua ad arricciarsi dopo il passaggio del dito
L’avvezione porta una correzione MacCormack, che preserva i vortici sottili che un’avvezione semi-lagrangiana semplice cancellerebbe. Il dito non spinge l’acqua: lascia cadere una coppia di vortici controrotanti lungo la direzione del trascinamento, così l’acqua continua ad arricciarsi per un po’ dopo che il dito è passato. Tutti i coefficienti di smorzamento e di inseguimento sono espressi al secondo, quindi il movimento è identico su un dispositivo a 60 Hz e su uno a 120 Hz.
Separare l’onda che si vede dall’onda che sposta
L’intensità visibile di un’onda e il suo effetto sul pigmento sono parametri distinti. E l’onda sposta direttamente la posizione del pigmento, non la sua velocità. La velocità del pigmento viene riportata ogni fotogramma verso quella dell’acqua — con una costante di tempo di circa 0,36 secondi nelle zone dense — e un’onda vive meno di così: la misurazione ha mostrato che sommare velocità spostava a malapena il pigmento. Regolare l’aspetto e regolare la sensazione hanno smesso di rovinarsi a vicenda.
La scelta di non far attrarre il pigmento a sé stesso
In passato esisteva una forza di coesione che raccoglieva il pigmento, ma l’unico stato in cui poteva depositarsi era una macchia rotonda: col tempo l’acqua si riempiva di cerchi opachi che non si scioglievano mai più. Ora il bordo scuro dell’acquerello viene riprodotto senza spostare alcun pigmento. Il campo di densità resta com’è, e il bordo viene disegnato a partire da esso, come un’ombreggiatura sul percorso della superficie dell’acqua, così nulla nell’immagine si solidifica.
La stessa registrazione dà sempre la stessa immagine
La simulazione è fissata a 60 passi al secondo, e ogni registrazione salva i numeri di passo effettivi in cui l’input di UIKit è stato consumato, il numero di passi di avvio, e un file collaterale con timestamp Float32 e coordinate UInt16.
La riproduzione si fida di questi passi salvati più che dell’orologio di sistema. La velocità è misurata in base a UITouch.timestamp, perché i movimenti all’interno dello stesso fotogramma non si possono distinguere con l’orologio di sistema.
I tocchi previsti servono solo a stimare la velocità; non influenzano mai dove cade il pigmento.
Inoltre, SimulationEngineRegistry instrada esplicitamente ogni simulationVersion salvata verso il motore che le corrisponde.
La versione 6 è congelata fino alle sue costanti, al suo orologio e al suo tasso di trasferimento dell’inchiostro, e una versione futura sconosciuta non viene mai passata silenziosamente alla simulazione più recente.
L’idea è che l’immagine di una vecchia registrazione non venga ricostruita in qualcos’altro a causa di un aggiornamento dell’app.
Non mostrare subito il punteggio
Le quattro misure non vengono troncate a un tetto: seguono una curva che si avvicina asintoticamente a 100, quindi un solo movimento rapido non dà il punteggio massimo. Anche così, restano nascoste per impostazione predefinita nella schermata dei risultati. Se un’app che si rifiuta di ordinare le emozioni in parole comincia mostrando numeri, quei numeri diventano semplicemente la nuova etichetta.
Privacy e contatti
IRO UTSUSHI conserva le tue registrazioni solo sul tuo dispositivo. Non prevede registrazione di un account, pubblicità, analisi di utilizzo, né alcuna funzione che tracci gli utenti. Per i dettagli, vedi l’Informativa sulla privacy di IRO UTSUSHI.
Per commenti e segnalazioni di problemi, puoi anche scriverci tramite la pagina di contatto di Sizu dev.