Com'è fatto DeQua?

Il processo è il seguente: noi otteniamo la mappa di Venezia e i Punti di Interesse da OSM, gli indirizzi dal Comune di Venezia, e ci costruiamo un grafo. In questo grafo ci sono migliaia di nodi, legati tra di loro da degli archi con delle caratteristiche. Per esempio, una casa, una chiesa o un bar sono nodi. Una calle o un canale sono archi. Ora, il primo step è cercare di capire cosa l'utente sta cercando. Per quello usiamo una barra di ricerca e una libreria (fuzzysearch) per trovare la corrispondenza nel nostro database. Nel caso dovessimo creare una mappa, usiamo una libreria (networkx) e descriviamo il problema come trovare il percorso più breve tra due nodi del grafo. Avendo costruito il grafo e potendo scegliere la definizione di percorso più breve, abbiamo spazio di manovra. Per questo possiamo calcolare percorsi a piedi, percorsi con meno ponti, percorsi in barca a remi, percorsi in barca a motore, percorsi in caso di acqua alta e molto altro ancora.

Sul funzionamento basico e la barra degli indirizzi

La pagina principale di DeQua è la mappa, che viene servita da Flask - un framework che ci permette di avere il backend in python. Le ricerche sono implementate attraverso un semplice form con qualche campo extra rispetto a quelli visibili per salvare coordinate e altri valori, la cui richiesta viene gestita in maniera asincrona usando ajax per evitare di richiedere in continuazione i dati delle mappe da OSM. Usando un GET per le ricerche, i parametri vengono passati sulla barra degli indirizzi, rendendoli (1) trasparenti all'utente e (2) facili da condividere. Infatti condividendo il link completo, (ad esempio https://www.dequa.it/?partenza=fondamenta%20san%20girolamo&start_coord=&arrivo=campo%20san%20barnaba&end_coord=&walk=on per andare da fondamenta San Girolamo a campo San Barnaba), la persona che riceve il link vede la strada disegnata sulla mappa!
Come si può immaginare, partenza=? e arrivo=? sono i campi per la ricerca, start e end_coord le coordinate in termini di latitudine e longitudine e walk=on indica il percorso a piedi (se te lo stai chiedendo sì, togliendo walk=on e mettendo boat=on ottieni il percorso in barca! la prova qui)
Stiamo lavorando all'idea di creare delle API con cui chiunque possa fare delle richieste ordinate per ottenere informazioni sulle coordinate e i percorsi! Per quello serve ancora un po' di pazienza, se siete interessati, scriveteci pure.

Sulla ricerca degli indirizzi

Per riuscire a trovare tutto quello che ci serve, usiamo varie fonti e abbiamo creato una ricerca ad-hoc per cercare di capire gli utenti. Per gli indirizzi civici, i canali, le piazze, i ponti, le calli, le rive e i posti barca usiamo gli OpenData del Comune di Venezia, mentre per i punti di interesse (POI) usiamo quelli disponibili da OSM (caricati dagli utenti nella maggior parte). La ricerca viene fatta in python usando fuzzywuzzy che, a parte ad avere un nome bellissimo, ci permette di correggere typos e trovare diverse soluzioni con nomi simili. Distinguere piazza san marco dal sestiere san marco da un indirizzo nel sestiere di san marco non è facile, così come gestire 12 diverse calli del forno, ma ci stiamo provando, e con l'opzione di visualizzare risultati multipli in caso di incertezza riusciamo a farti trovare quasi tutto!

Sulla protezione dei dati

Non salviamo attivamente nessun dato personale sui server. Al momento salviamo le ricerche effettuate (il testo che l'utente ha inserito) per migliorare l'algoritmo di ricerca nel database e alcune informazioni base che vengono sempre mandate dal browser: ip, browser, sistema operativo. Tutti i dati vengono salvati lato app utilizzando il plugin Flask-Track-Usage, questo vuol dire che le informazioni non vengono mandate a nessun servizio esterno che possa analizzare il traffico e i dati degli utenti (ad esempio GoogleAnalytics). I server appartengono a PythonAnywhere (vedi sezione Strumenti). Per il funzionamento del sito, un cookie di sessione verrà salvato ogni volta che il sito viene visitato. Il cookie è visibile dall'inspector del browser nella sezione Storage e come potete vedere, non salva nulla riguardante i dati personali o di posizione. Se l'utente sceglie di usare la propria posizione, il browser usa le impostazioni di default dell'utente, e nel caso venga negata, lancia semplicemente un'errore. Se l'utente non condivide la propria posizione, non viene usata per altri scopi. Se avete domande in materia, scriveteci pure!

In che linguaggio scrivete?

Scriviamo principalmente in python. Il sito è fatto usando HTML/CSS e JavaScript, ma il cuore del progetto rimane in python.

Che strumenti utilizzate?

Proviamo ad utilizzare strumenti che seguano l'idea del codice aperto. Non siamo ancora al 100%, ma ci stiamo lavorando.
Se avete suggerimenti o critiche, entrambe sono benvenute! Fateci sapere
Al momento usiamo:

logo Atom
Atom

Un editor di testo con codice libero sviluppato da github che permettere a diverse persone di lavorare in contemporanea.

dacci un'occhiata!
logo pa
PythonAnywhere

Un servizio che permette di sviluppare un sito in python. Ultimamente stanno aggiungendo supporto per l'insegnamento! Fornisce un server con python installato, per cui non ha codice aperto, a quanto sappiamo. I server usati soddisfano i criteri europei pre la privacy, ma al momento sono in America. Stiamo lavorando per migliorare questo aspetto.

dacci un'occhiata!
logo venezia
OpenData Comune di Venezia

Il nostro comune mette a disposizione un sacco di dati di ottima qualità sulla nostra città! Grazie mille!

dacci un'occhiata!
logo OSM
OpenStreetMap

Con uno sforzo enorme per mappare tutto il mondo, OSM mette a disposizione tutte le mappe di tutto il mondo per tutti completamente gratis! Non è fantastico?

dacci un'occhiata!
logo github
Github

Uno spazio dove ospitiamo il nostro codice che usa git per il meccanismo di controllo della versione. Purtroppo, solo parzialmente a codice aperto.

dacci un'occhiata!
logo leaflet
Leaflet

Fantastica libreria JavaScript con codice aperto che fa magie disegnando tutto quello che vogliamo sopra le nostre mappe!

dacci un'occhiata!
logo bs
Bootstrap

Fantastica libreria HTML/CSS/Javascript con codice aperto per adattare il nostro sito a telefoni e computer!

dacci un'occhiata!
logo qgis
QGIS

Programma con codice aperto per la gestione di file geografici che ci permette di manipolare i file del comune e costruire le reti di strutture a Venezia!

dacci un'occhiata!