In questi giorni sto scrivendo un po’ di codice per alcune cose che vogliamo automatizzare in Sketchin.
Alla fine ho deciso di cogliere l’occasione per imparare un po’ di cose nuove. Nessuno dei task che vogliamo automatizzare è urgente o “business critical” per cui posso metterci tutto il tempo che ritengo necessario e non corro il rischio di creare casini mentre ci lavoro sopra.
Alla fine mi sono deciso ad utilizzare Python come linguaggio, Postgres come database, Bootstrap e Javascript per il frontend.
La mia applicazione è fatta di due segmenti principali. Uno scheduler che programma e controlla l’esecuzione dei task ed una dashboard che mi permette di controllare in tempo reale il lavoro dello scheduler. La dashboard parla con lo scheduler per mezzo di un insieme di REST API. Tutto molto semplice e lineare.
Python ha a disposizione una quantità di librerie praticamente infinite e trovare quella adatta alle tue necessità è spesso complesso e porta via una quantità infinita di tempo.
Alla fine ho deciso di scegliere questi come base per il mio lavoro:
- APSCheduler come libreria base su cui implementare lo scheduler. Vero è che esistono sitemi come Airflow o Luigi ma sono un overkill rispetto alle necessità che ho.
- Flask come framework sia per le API dello scheduler che per il frontend della dashboard. Per lo scheduler avrei potuto andare verso FastAPI ma poi avrei dovuto comunque usare un altro framework per la dashboard. Tanto vale dato il numero di utenti e la complessità con cui ho a che fare.
- SQLAlchemy come interfaccia per il database.
- Pandas, Numpy e Matplotlib per alcune elaborazioni che devo fare su insiemi diversi di dati.
Prima di cominciare non conoscevo nessuno di questi framework e avevo poca conoscenza di Python.
Ho guardato qualche tutorial su Internet ma ho abbandonato quasi subito questo tipo di percorso. Dato che non sono totalmente digiuno di informatica e sistemi complessi mi sono subito reso conto della limitazione che i tutorial hanno.
Se da un lato hanno il grosso vantaggio di illustrare una tecnologia in maniera semplice e veloce, dall’altro non sono affatto rappresentativi della complessità di una applicazione che possa appartenere al mondo reale.
Faccio un esempio banale. La mia dashboard deve visualizzare delle tabelle di dati e non avevo alcuna intenzione di mettermi a scriverle a manina. Mi sono limitato a scegliere un framework JavaScript per farlo. Ho scelto quello fornito da DataTables.net perché mi è sembrato adatto.
Prima di scegliere mi sono guardato un paio di tutorial su YouTube e poi ho scelto. Il tutorial rendeva possibile creare una tabella in una pagina web in meno di cinque minuti. Realmente banale.
Peccato che la tabella usa come fonte dati una stringa in formato JSON e non un vero database. La tabella viene costruita in tempo reale ed i dati vengono mantenuti tutti i memoria. Per un tutorial va bene ma nel mondo reale non accade mai.
La tabella viene alimentata Server Side e quindi devi implementare una corretta paginazione sul database. Javascript deve intercettare gli eventi dell’utente e comunicarli al backend perché reagisca di conseguenza. C’è latenza, il server potrebbe non rispondere e via dicendo. C’è molta più complessità di quanto un tutorial possa fare trasparire.
Per questo l’unico modo è studiare la documentazione e capire.
Non ci sono scorciatoie.
Shameless self promotion ahead…
Nel caso non ve ne foste accorti qui in giro c’è anche un podcast con il quale potrete intrattenervi.
Quello di seguito è l’ultimo episodio.
Qui, invece tutti gli episodi pubblicati sino ad ora: Parole Sparse – Il Podcast