Usabilità

Riscrivere da zero le scorciatoie da tastiera (acceleratori)

GUI Usabilità

Nel mio articolo fondativo, Darktable: schiantarsi contro il muro al rallentatore, ho presentato il disastro che era il nuovo «Grande turducken MIDI». Lo scopo di questo turducken1 era riscrivere il sistema di scorciatoie da tastiera per estenderlo ai dispositivi MIDI.

Ancora oggi sono arrabbiato per questa impresa di distruzione di massa, ecco un riepilogo delle ragioni:

  1. nel 2021 ha sostituito un sistema di scorciatoie da tastiera che era piuttosto buono, completo di funzioni, ben testato, stabile e scritto in meno di 1500 righe (commenti inclusi),
  2. …per aggiungere il supporto ai dispositivi MIDI e ai gamepad PlayStation (!?!)…
  3. …ma nel mio sondaggio Darktable del 2022, un anno dopo questa nuova funzione, su oltre 1251 utenti che vi hanno partecipato:
    • l'81% degli utenti non aveva un dispositivo MIDI e non aveva intenzione di procurarsene uno,
    • il 2% non sapeva nemmeno cosa fosse un dispositivo MIDI.
    • l'8% degli utenti aveva un dispositivo MIDI ma non lo usava con Darktable,
    • il 6% stava valutando l’idea di procurarsi forse un dispositivo MIDI in futuro,
    • il 2% degli utenti aveva un dispositivo MIDI che usava davvero in Darktable,
  4. il codice era assolutamente terribile, in termini di:
    • qualità del codice: istruzioni if/switch-case illeggibili annidate su 4 livelli, nel bel mezzo di funzioni da 1000 righe (ho pubblicato esempi di frammenti nel mio articolo),
    • volume del codice:
      • 3546 righe di codice per Darktable 4.0,
      • 4397 righe di codice per Darktable 5.0,
      • l’aumento di volume è una conseguenza diretta del tentativo di correggere bug in un’architettura che non può essere corretta perché la sua complessità favorisce ulteriore complessità. Tutto ciò deriva dal design, ma risolvere problemi creati dalla complessità aggiungendo altra complessità non è una soluzione.
    • complessità del codice:
      • complessità ciclomatica :
        • 1088 per Darktable 4.0,
        • 1245 per Darktable 5.0 (dettagli ),
      • complessità cognitiva :
        • 1885 per Darktable 4.0,
        • 2098 per Darktable 5.0 (dettagli ).
      • è di gran lunga la funzione più complessa del software, anche se non opera sulle immagini. Per fare un confronto, la seconda funzione più complessa è la decodifica dei metadati EXIF, che ha una complessità cognitiva di 1348.
  5. non decodifica i modificatori dei tasti per progettazione, ma gestisce soltanto le pressioni fisiche dei tasti, il che significa che:
    • l’input «1» dal tastierino numerico viene decodificato come Keypad End,
    • l’input «1» da una tastiera francese AZERTY viene decodificato come Shift+&, o Shift+" su BÉPO,
    • devi quindi duplicare tutte le tue scorciatoie basate sui numeri per ogni modo di inserire un numero, ed essere pronto al fatto che la finestra delle impostazioni delle scorciatoie non contenga alcun numero effettivo nelle combinazioni di tasti.
  6. il design lato utente è assolutamente terribile, con troppe azioni ed emulazioni da configurare («effetti»), che dopo 4 anni non sono nemmeno completamente documentate (cos’è «ctrl-toggle»? «right-activate»?), e la configurazione delle scorciatoie usa una strana finestra divisa che non ha alcun senso,
  7. anche l’implementazione è terribile: la funzione è a conoscenza di tutta la GUI del software, e la GUI del software è a conoscenza del codice delle scorciatoie. Qui non c’è alcuna modularità, e modificare qualsiasi cosa nel codice delle scorciatoie può avere effetti inaspettati e indesiderati in qualsiasi punto del software.2 Basta guardare il grafo delle dipendenze qui sotto,
  8. diverse «scorciatoie» (o associazioni MIDI) possono essere collegate alla stessa azione, il che significa che ogni interazione dell’utente deve consultare l’intera lista delle azioni disponibili, comportando una gestione delle scorciatoie molto inefficiente, in alcuni casi rallentamenti della GUI e falsi positivi «combinazione di tasti sconosciuta» in casi particolari.
image
Tasti numerici non decodificati e strana divisione della finestra tra «azione» e «scorciatoia».
image

Il grafo delle dipendenze di src/gui/accelerators.c (Grande turducken MIDI) prima della riscrittura. Indovina perché lo chiamiamo «spaghetti code »… Questo rende evidente che esiste una dipendenza a doppio senso tra il codice degli acceleratori e il resto del codice della GUI. È un incubo da mantenere.

Search

You can also ask Chantal, the AI search engine.