Analisi tecnica · la consegna come problema di progettazione

Progettare

Software per chi non apre il terminale

L'algoritmo era la parte facile. A tenere in piedi la consegna hanno pensato SmartScreen, una casella in fondo a una schermata di installazione e una libreria da compilare: tutto ciò che sta fra il doppio click e il primo file ridotto.

Subject

Uno strumento desktop per ridurre le nuvole di punti prodotte dagli scanner laser 3D: file E57 che arrivano alle decine di gigabyte, destinato a professionisti del rilievo che usano bene i software di settore ma non apriranno mai un terminale.

Method

Un solo punto d'ingresso: un launcher che al primo doppio click cerca Python, installa le dipendenze in un ambiente confinato nella cartella del programma e apre la interfaccia grafica, senza passaggi manuali. Parametri tecnici tradotti in scelte di dominio; gli avvisi di Windows documentati come parte del percorso d'uso.

Structure

La parte che non si vede · Il sistema operativo non ti conosce · La casella a metà schermo · Tradurre i parametri in domande · Il terminale che non si vede · Cosa resta aperto

Anonymisation

Non c'è nulla da anonimizzare: lo strumento nasce come progetto personale, senza committenti. Nessun nome è stato omesso perché nessun nome compare nelle fonti; i prodotti terzi citati (scanner e software di visualizzazione) sono quelli che la documentazione originale indica come compatibili.

What this document covers

  1. 01

    La parte che non si vede

    Fra il software che funziona e quello che si usa c'è un intero territorio

  2. 02

    Il sistema operativo non ti conosce

    SmartScreen, antivirus, permessi: il primo incontro è un avviso

  3. 03

    La casella a metà schermo

    Installare Python è il muro più alto del percorso

  4. 04

    Tradurre i parametri in domande

    Il voxel diventa «rilievo architettonico»

  5. 05

    Il terminale che non si vede

    Nascosto quando tutto va bene, riaperto coi log quando va male

  6. 06

    Cosa resta aperto

    I compromessi dichiarati della strada scelta

How to read this

Per decidere

Dove finisce il software e comincia la consegna: avvisi di sistema, dipendenze da installare, parametri da tradurre.

Per valutare

Le scelte concrete: un launcher che fa tutto, livelli nominati dal risultato, errori resi leggibili.

Gli attriti raccontati sono quelli documentati nella guida dello strumento: ogni voce del troubleshooting corrisponde a un punto in cui il percorso verso il primo risultato può fermarsi.

The constraint

Sulla macchina di chi ha scritto il programma funzionava già tutto. Sul computer dell'utente non c'era né Python né il suo PATH, il sistema operativo trattava il launcher come una minaccia, e ogni errore reale arrivava in una lingua che il destinatario non parla.

Context

Chi fa rilievo laser lavora ogni giorno con nuvole di punti pesanti, da aprire in CloudCompare, QGIS o ReCap: altissima competenza di dominio, competenza di sistema irrilevante per il mestiere. Fra il download e il primo risultato il programma deve attraversare un territorio che non si controlla: installer, antivirus, permessi, dipendenze da compilare.

In brief

Perimetro
Tutto ciò che sta fra il download e la prima elaborazione riuscita L'algoritmo di riduzione era la parte facile
Punto d'ingresso
Un unico file: il launcher aperto con un doppio click Trova Python, installa le dipendenze, avvia l'interfaccia
Interfaccia
Quattro livelli di dettaglio descritti dal risultato nel dominio del rilievo Dettagli fini · edifici · misure generali · volumetrie
Sicurezza percepita
Avvisi di Windows documentati uno per uno, con il modo di verificare il contenuto dello script
Fuori scope
Firma digitale del launcher, installer nativo, versioni per altri sistemi operativi
G1 · Il primo incontro col programma
L'avvio
Prima Una schermata blu che dice che Windows ha protetto il PC
Dopo L'avviso c'è ancora, ma la documentazione lo precede invece di inseguirlo
Le dipendenze
Prima Una casella in fondo a una schermata di installazione, che nessuno spunta
Dopo Se ne occupa il launcher, e quando non ce la fa lo dice in italiano
Le opzioni di elaborazione
Prima Parametri numerici, da capire prima di poter scegliere
Dopo Quattro livelli descritti dal risultato: modanature, sezioni misurabili, ingombri
La finestra nera
Prima Resta aperta sotto il programma per tutto il tempo
Dopo Non compare, e riappare solo quando c'è un errore da leggere
il riassunto in quattro righe

Nessuna delle quattro righe riguarda l'algoritmo, che era la parte già finita quando è cominciato il lavoro raccontato qui.

What was done

  • Un solo punto d'ingresso: il launcher cerca Python in tre modi diversi, crea l'ambiente virtuale dentro la cartella del programma, installa le dipendenze e apre l'interfaccia
  • Avvio senza finestra di terminale, con fallback che riapre il programma mostrando l'errore e resta aperto finché non viene letto
  • Parametri della riga di comando tradotti in quattro livelli di dettaglio descritti da ciò che producono nelle sezioni del rilievo
  • Stima della dimensione dell'output prima dell'elaborazione, barra di avanzamento e log leggibile durante
  • Documentazione dedicata agli attriti reali del primo avvio: SmartScreen, UAC, antivirus, casella PATH, strumenti di compilazione mancanti

What was left behind

  • Un programma che si installa con un doppio click, senza passaggi manuali, e si rimuove cancellando una cartella: fuori dalla propria cartella non tocca nulla
  • Un'interfaccia che parla la lingua del rilievo, stima il risultato prima di partire e dichiara ad alta voce che il file originale non viene mai modificato
  • Una documentazione che tratta gli attriti del primo avvio come parte del prodotto: ogni avviso ha la sua spiegazione e la sua via d'uscita

The decisions, and the rule behind them

G2 · Decision tree

Fork

Come scegliere il dettaglio

Chosen Quattro livelli descritti dal risultato: modanature, sezioni misurabili, ingombri Quattro livelli con un nome comprensibile coprono il caso normale; il parametro numerico resta disponibile in una modalità a parte per chi sa cosa chiedere.
Rejected Esporre solo il parametro tecnico, voxel in metri, come nella riga di comando Era già pronto, preciso, e per chi ha scritto il programma è il linguaggio naturale.

Fork

Il terminale

Chosen Nascosto nell'avvio normale, riaperto con i log quando qualcosa fallisce La finestra nera non aggiunge nulla a un avvio riuscito, e diventa l'unica cosa leggibile quando l'avvio fallisce.
Rejected Console sempre visibile, davanti all'utente Debug immediato e sensazione di trasparenza, per chi ha passato la vita nel terminale.

Fork

Gli avvisi di Windows

Chosen Documentarli uno per uno e insegnare a verificare il contenuto dello script L'utente non li eviterà comunque: l'unica variabile è se sa cosa sta succedendo.
Rejected Evitarli alla fonte, firmando digitalmente il launcher Nessuna schermata blu, nessuna spiegazione da scrivere.

Il filo che tiene insieme i tre bivi è lo stesso: ogni scelta sposta conoscenza dal lato dell'utente a quello del prodotto: prima che l'attrite arrivi, non mentre lo sta attraversando.

La parte che non si vede

Il programma in sé non è complicato. Legge un file E57: la nuvola di punti che esce da uno scanner laser, a volte decine di gigabyte. Divide lo spazio in cubetti di pochi millimetri e tiene un punto per cubetto. Poi scrive un file più leggero, nello stesso formato o in LAS/LAZ, senza toccare l’originale. La logica sta in un modulo, e la tecnica è descritta ovunque.

Il resto del progetto è tutto ciò che sta prima e dopo quella funzione: far sì che il programma arrivi sul computer di chi fa rilievi per mestiere e produca un risultato al primo tentativo. Su una macchina dove Python non c’è, il PATH è una parola senza significato, e il sistema operativo stesso tratta il launcher come una possibile minaccia.

Chi usa questo strumento passa la giornata fra CloudCompare, QGIS e i software del proprio mestiere: sa riconoscere una sezione sbagliata a colpo d’occhio, non sa (e non deve sapere) cosa significa «aggiungere Python al PATH». La differenza fra il software che funziona e quello che si usa abita tutta lì.

Il sistema operativo non ti conosce

Il primo incontro con il programma è una schermata blu di SmartScreen che dice che Windows ha protetto il PC. Poi magari un antivirus che blocca il download delle librerie. Poi la richiesta dei permessi di amministratore.

Nessuno di questi avvisi si toglie con la buona volontà: il launcher è un file .bat scaricato da internet, senza firma digitale, ed è trattato di conseguenza. La scelta è stata dichiarare il problema dentro il prodotto: la documentazione dedica una sezione a ogni avviso, dice che sono normali, mostra cosa cliccare, e offre qualcosa di più raro, un modo per verificare da soli che non c’è niente di losco. Il launcher è un file di testo: tasto destro, Modifica, e si legge tutto quello che fa. Le librerie che scarica sono open source, pubblicate su PyPI, usate da migliaia di professionisti del settore.

È l’unica strada rimasta quando non hai un marchio che risponde per te.

La casella a metà schermo

Poi c’è l’installazione di Python, che nella testa di chi scrive software è un dettaglio e nella pratica è il muro più alto del percorso.

L’installer ufficiale ha una casella, in basso: «Add Python to PATH». Se resta vuota (e resta vuota, sta in basso e nessuno te lo dice) il programma non troverà mai l’interprete. La guida non si fida: mette la casella in grassetto, spiega cosa succede se la salti, e arriva a dire di disinstallare e reinstallare se l’hai già fatta senza. Chiede anche di riavviare il computer, e dice perché.

Il launcher intanto fa la sua parte: cerca python, poi python3, poi i percorsi tipici delle installazioni Windows, versione dopo versione. Solo quando non trova nulla si arrende, e invece di un messaggio d’errore mostra le istruzioni numerate per installarlo.

Resta il caso peggiore: una delle librerie ha componenti in C++ che vengono compilati durante l’installazione, e se sulla macchina non ci sono gli strumenti giusti l’errore arriva in inglese e parla di compilatori. Per chi fa rilievi è rumore. La documentazione lo traduce: quel messaggio significa scaricare certi Build Tools, selezionare una voce precisa durante l’installazione, riprovare.

Tradurre i parametri in domande

La riga di comando espone il programma com’è dentro: voxel in metri, frazione di punti da mantenere, quantizzazione delle coordinate. È esattamente ciò che serve a chi l’ha scritto, ed è inutilizzabile da chi no.

L’interfaccia grafica fa la stessa domanda in un’altra lingua. Quattro opzioni, ognuna descritta dal risultato nel dominio: dettagli architettonici fini; rilievo architettonico, consigliato per edifici, con sezioni pulite e spessori misurabili; dimensioni generali; solo volumetrie e ingombri. Il millimetro c’è ancora, ma tra parentesi: la scelta si fa su quello che resterà a vedere nelle sezioni, non sull’unità di misura.

Intorno ai quattro livelli ci sono le piccole cose che tolgono paura: la stima della dimensione del risultato prima di lanciare l’elaborazione, la barra di avanzamento con un log leggibile durante, e ripetuto dovunque (fino alla nota tecnica) che il file originale non viene mai modificato né cancellato. Chi consegna una nuvola di punti consegna lavoro fatto sul campo: «non tocca l’originale» è la condizione perché il programma venga aperto.

Il terminale che non si vede

Quando tutto è installato, il launcher avvia l’interfaccia con l’eseguibile pensato per le applicazioni grafiche: nessuna finestra nera che resta aperta sotto il programma. Ma l’avvio silenzioso ha un costo noto: se qualcosa fallisce, fallisce senza dire nulla, la finestra si apre e si chiude subito, e sembra un programma rotto.

La soluzione sta nel launcher: se l’avvio silenzioso non va a buon fine, il programma riparte nella variante che mostra gli errori, e la console resta aperta finché qualcuno non ha letto. E il caso limite (capire perché non parte) ha una sezione dedicata nella guida: apri il prompt dei comandi, lancia il file a mano, leggi il messaggio prima che sparisca.

È la regola generale del progetto in miniatura: il terminale si nasconde quando non aggiunge niente, e riappare nell’unico momento in cui è l’unica cosa che conta.

G3 · Il primo avvio
Ingresso Doppio click sul launcher L'unico gesto richiesto. Il file è testo leggibile, verificabile col Blocco Note.
cerca
Ricerca ambiente Python 3.10-3.12 PATH, alias alternativo, percorsi tipici delle installazioni Windows; se non trova nulla, istruzioni numerate per installarlo.
solo la prima volta
Installazione Ambiente virtuale nella cartella Le librerie vivono dentro la cartella del programma e non toccano il resto del sistema: cancellarla disinstalla tutto.
avvia
Interfaccia GUI senza terminale Avvio silenzioso; se fallisce, il programma riparte mostrando l'errore e la finestra resta aperta finché non viene letto.
Dal doppio click alla finestra del programma, tutto ciò che l'utente non deve vedere

Cosa resta aperto

Gli attriti non eliminati restano dichiarati. Senza firma digitale, ogni nuovo computer e ogni nuovo download rivede SmartScreen: la mitigazione è una pagina di documentazione, non una soluzione. Alcuni antivirus bloccano comunque il primo avvio, e la guida suggerisce un’eccezione o una sospensione temporanea: un compromesso detto ad alta voce. Nel caso peggiore dell’installazione, l’utente incontra comunque il messaggio di Microsoft prima che la guida prenda il sopravvento. E i file più grossi chiedono macchine con tanta memoria: il programma non gira esattamente dove il problema di partenza è più grande.

Sono i costi della strada scelta, scritti accanto alla strada.

Un software è consegnato quando attraversa il computer di qualcun altro senza chiedergli di diventare tecnico, non quando funziona sulla tua macchina.


Bozza derivata dal repository dello strumento: launcher, interfaccia e guide sono la fonte di ogni dettaglio citato, e ogni voce della guida corrisponde a un punto documentato del percorso. I prodotti terzi menzionati (scanner e software di visualizzazione) compaiono come nella documentazione originale, cioè come formati e strumenti compatibili.

G4 · Gli attriti fra il download e la prima elaborazione
avviso del sistema al primo avvio blocco di alcuni antivirus interprete assente sul computer la casella del percorso non spuntata librerie da compilare durante l'installazione la finestra nera che resta aperta parametri numerici da capire prima di scegliere errori in una lingua che l'utente non parla file oltre i 30 GB
9 attriti incontrati nel percorso 3 non eliminati, e dichiarati
cosa è stato tolto, e cosa resta

I tre marcati non si risolvono con il codice: due dipendono da una firma digitale che non c'è, il terzo dalla memoria della macchina. Restano scritti accanto alla strada scelta invece che scoperti dall'utente.

What remains open

Un software è consegnato quando attraversa il computer di qualcun altro senza chiedergli di diventare tecnico, non quando funziona sulla tua macchina.

Same situation on your side?

Tell me where the system is now and what is blocking you.