NOTE: Questo Task mi aiuta a tracciare un bug nel dataset del MiSE sui prezzi delle stazioni di rifornimento italiane. Qui ulteriori informazioni.
== Premessa (perché ho trovato questo problema) ==
Nel 2015 ho sviluppato un altro comparatore di pompe di benzina italiane durante un hackaton di 24H promosso da una nota compagnia assicurativa italiana. Ecco il progetto: https://fuel.reyboz.it/. È fatto con colla e spaghetti e con poche ore di sonno ma ha funzionato bene e abbiamo vinto. Ma questo non è il punto.
Quel progetto è stato basato su un dataset fornito dal [[ https://en.wikipedia.org/wiki/Ministry_of_Economic_Development_(Italia) | MiSE - Ministero dello Sviluppo Economico ]]. Bene, quel dataset era corrotto dal 2015 ma ora (~~2021~~ 2022) è in qualche modo //ancora// più corrotto.
In breve, sono sicuro che in un mondo migliore il MiSE dovrebbe sistemare il suo dataset. Il problema è che non sono stato in grado di contattare il MISE in nessun modo. Ho provato dal sito ufficiale e ho provato via social, e ho provato via telefono, ma i bug nel loro dataset sono ancora lì.
Altre FAQ:
* No, non ho violato nessun sistema di sicurezza
* No, non ho manipolato un settore di memoria protetto
* No, non ho distrutto o danneggiato alcun sistema
* È solo un dataset corrotto e chiunque nel mondo può vedere che NON è colpa mia se è così
* Chi ha la capacità di riparare? Il MISE.
== Passi per riprodurre il problema ==
1. Scaricare il file [[ https://www.mise.gov.it/images/exportCSV/anagrafica_impianti_attivi.csv | anagrafica_impianti_attivi.csv ]] da https://www.mise.gov.it/index.php/it/open-data/elenco-dataset/2032336-carburanti-prezzi-praticati-e-anagrafica-degli-impianti
2. Aprire con LibreOffice (impostare il separatore sul punto e virgola - Sì, lo so, CSV significa letteralmente valori separati da //comma// (virgola) e invece loro usano usano il punto e virgola. Per favore non litigate per questo. Questo non è il nostro problema principale.
3. Notate che il dataset è corrotto almeno sull'ID `46593` (linea 29) su una riga relativa a `MEGA SERVICE S.A.S.`
Panoramica rapida (scorrere fino alla riga 29):
{P17, lines=40, highlight=29}
IMPORTANT: Notare che alla riga 29 è stato aperto un apice doppio `"` e mai chiuso. Questo crea problemi in qualsiasi libreria di lettura dei CSV che rispetti gli standard (rispetti [[ https://datatracker.ietf.org/doc/html/rfc4180 | RFC 4180 ]]).
== Problema n. 1 ==
Il MiSE chiaramente non sta usando una libreria adatta per generare un CSV e questo causa un dataset malformato.
Soluzione:
Si prega di adottare un //vero// standard CSV. Per esempio, non usare un punto e virgola come collante per i tuoi dati grezzi.
Riferimento:
* https://en.wikipedia.org/wiki/Comma-separated_values su Wikipedia
* https://www.php.net/manual/en/function.fputcsv.php per PHP
* https://pythonspot.com/files-spreadsheets-csv/ per Python
* http://commons.apache.org/proper/commons-csv/ per Java
* ...
== Problema n. 2 ==
Il MiSE non sta ripulendo correttamente l'input dell'utente.
Per favore ripulite i valori dell'utente rimuovendo i doppi spazi. Rimuovendo le tabulazioni. Rimuovendo i newline. Rimuovendo tutto lo schifo dell'utente.
Esempio: evitate qualcuno chiamato "`Mario Rossi `" (notare gli spazi all'inizio e alla fine e nel mezzo). Di questi esempi il dataset è intasato. E non possiamo correggerlo noi perché viene sovrascritto ogni mattino e non si capisce come contribuire.
== Problema n. 3 - entità HTML che non dovrebbero essere presenti ==
Ogni tanto sono presenti entità HTML. Questo è un doppio problema, intanto perchè cose come `'` non dovrebbero esserci (cosa meno grave), in secondo luogo perchè queste entità terminano con punto e virgola e si rompe il formato di quella riga (problema più grave). Esempio:
```
50833;IP;Api-Ip;Stradale;IP;STRADA STAT. SS 16 KM 283+630, LOCALITA' MARINA SNC 60018, MONTEMARCIANO (AN) 60018;MONTEMARCIANO;AN;43.65660808741167;13.332945954167167
```
Notare `'` che dovrebbe rappresentare un apice ma è stata scritta come un'entità HTML e questo non dovrebbe capitare in un dataset.
== Problema n. 4 ==
"CSV" significa "//comma//-separated values" ma MiSE genera //semicolon//-separated values.
Soluzione proposta: wontfix. È troppo tardi per cambiarlo ora.
Anche se è troppo tardi per risolvere la cosa, non è troppo tardi per informare la gente: per favore ricordate che la `C` in `CSV` significa `COMMA` e non `SEMICOLON`.
== Soluzione proposta per tutti questi 34 problemi ==
AdottaInnanzitutto si propone di chiarire qualsiasi libreria CSVi sono le fonti dei dati, invece di usare semplicemente ";" come collaaffinchè sia possibile proporre una soluzione a monte tra qualsiasi valore grezzo(cosa altrimenti impossibile).
Questo risolverà un approccio di programmazione non ideale che sta effettivamente compromettendo il dataset del MiSE ogni giornoIn generale, è necessario adottare una qualsiasi libreria CSV, almeno dal 2015invece di usare semplicemente ";" come collante tra qualsiasi valore grezzo.
Inoltre, sarebbe carino spiegare alle persone come viene creato questo dataset e come segnalare un problema o come poterlo correggereQuesto risolverà un approccio di programmazione non ideale che sta effettivamente compromettendo il dataset del MiSE ogni giorno da almeno il 2015.
== Nel frattempo ==
Qualcuno dovrebbe contattare la pompa di benzina `MEGA SERVICE S.A.S. DI TERMINI MICHELE &C 123 di Licata, Km. 15+500, LICATA 92023 AG` chiedendo loro di togliere gentilmente il `"` dal loro nome, dato che il MiSE non può gestire quel caso senza rompere tutto il dataset per annireparto tecnico del MiSE al momento non può gestire quel caso.