Robert.Torna al playground

02 / 10

Playground · Stop Watch

Per imparare il tempo, ho costruito un cronometro che non lo misurava benissimo.

Il mio secondo progetto: quattro contatori, tre pulsanti e il primo vero tentativo di controllare un processo che continua anche quando l’utente non fa nulla.

Cronometro verde con quattro contatori e pulsanti play, pausa e reset
Ore, minuti, secondi e una personale interpretazione dei millisecondi.

01 · Il secondo passo

Dopo aver trasformato un numero, volevo imparare a controllare qualcosa che continuava a cambiare.

Un cronometro sembrava un esercizio semplice. Poi sono arrivati avvio, pausa, reset, contatori che si propagano e la necessità di impedire che più timer partissero contemporaneamente.

Play
Avvia il conteggio.Il pulsante viene disabilitato per evitare di moltiplicare gli intervalli.
Pause
Ferma il tempo senza cancellarlo.La parte più delicata: interrompere timeout e intervalli conservando i valori raggiunti.
Reset
Riporta tutto a zero.Ore, minuti, secondi e millisecondi tornano nello stato iniziale.

Come immaginavo il tempo

Quattro variabili. Una cascata di condizioni. E il tempo che passava più o meno davvero.

Ogni aggiornamento incrementava il valore più piccolo. Raggiunta una soglia aumentavano i secondi, poi i minuti e infine le ore.

0Ore
0Minuti
5Secondi
1Decimi circa
  1. Incrementa il contatore più piccolo.
  2. Quando raggiunge 11, aggiungi un secondo.
  3. A 60 secondi, aggiungi un minuto.
  4. A 60 minuti, finalmente un’ora.

La vera difficoltà

Far partire il tempo era facile. Fermarlo e farlo ripartire dallo stesso punto molto meno.

Il progetto mi ha costretto a distinguere il valore del cronometro dal processo che lo aggiornava. Pausa e play dovevano interrompere e ricreare quel processo senza perdere lo stato.

PlayAvvia il ciclo e impedisce un secondo avvio contemporaneo.
PauseInterrompe entrambi i meccanismi che stavano aggiornando il tempo.
ResetFerma il ciclo e azzera tutte le variabili visualizzate.
  1. 01Salva ore, minuti, secondi e millisecondi.State
  2. 02Avvia un timeout e anche un intervallo.Run
  3. 03In pausa, cancellali entrambi.Stop
  4. 04Al nuovo play, riparti dai valori rimasti.Resume

Tecnicamente il cronometro non misurava il tempo con grande precisione. Didatticamente, però, mi stava insegnando stato, cicli e controllo del flusso.

Grafica fatta in CSS

Quattro grandi quadranti e tre comandi. Tutto quello che serviva, con parecchie ombre.

La versione conservata usa una palette verde molto più essenziale: i componenti dell’interfaccia sono costruiti principalmente con CSS, senza una libreria grafica.

Cronometro fermo sul valore zero
Visivo
Numeri grandi, contrasto morbido e controlli immediatamente riconoscibili.
Tecnico
Nessun framework e nessun componente pronto.
Stato
Un esercizio concluso una volta raggiunti play, pausa e reset.
Eredità
La prima volta in cui interrompere un processo è stato più importante che avviarlo.

Oggi

Misurerei il tempo in modo completamente diverso. Ma terrei intatta l’ostinazione con cui provavo a fermarlo.

Oggi userei un’unica sorgente temporale affidabile e deriverei da lì ogni valore. Nel 2021, invece, ho imparato tentando di coordinare contatori, timeout e intervalli finché play e pausa non hanno finalmente smesso di litigare.