Easy Breathe
Javna merenja polena u Srbiji, svedena na ona koja su važna jednom korisniku.
- Godina
- Kontekst
- Domen
Kako prolazi jedan zahtev
- Ulaz: Pet endpointa otvorenih podataka
- Orkestracija: Seedovanje po rasporedu - NestJS
- Paralelno
- Mesečno - Alergeni, tipovi, lokacije
- Svakog sata, od 9 do 12 - Poleni, koncentracije
- Izlaz: Jedna baza, bez duplikata - Svedena na radijus, dan i vaše alergene - MongoDB
Pregled
Javni podaci postoje i dobri su: Agencija za zaštitu životne sredine svakog dana objavljuje merenja polena sa mernih stanica širom Srbije, kao otvoreni API bez ključa i bez ograničenja. Ali čoveku alergičnom na ambroziju ne kažu da li je danas loš dan tamo gde se nalazi. Aplikacija postoji da bi to rešila.
Zato je posao podeljen na dva dela. API po rasporedu kopira otvorene podatke u svoju bazu, jer telefon ne treba da prolazi kroz stotine hiljada merenja iz cele zemlje da bi odgovorio na lokalno pitanje. Aplikacija zatim nad tom kopijom postavlja jedno pitanje - šta od onoga na šta sam alergičan ima u vazduhu oko mene - i odgovara na mapi, u četiri nivoa i notifikacijom.
Arhitektura
Podaci se preuzimaju u dva ritma
Pet endpointa se ne menja istom brzinom, pa se ni ne preuzimaju istom brzinom. Alergeni, tipovi alergena i lokacije preuzimaju se prvog u mesecu u devet časova. Poleni i koncentracije, koji se stvarno menjaju, preuzimaju se svakog sata od devet do podne, kada se objavljuju dnevna merenja.
Seedovanje može bezbedno da se ponovi
Svaki seeder prvo proveri koje id-jeve već ima i ubaci samo nove. Tako satni job koji ne nađe ništa novo ne upiše ništa, isto pokretanje može da se ponovi bez dupliranja merenja, a period koji se traži ide nedelju dana unazad, pa se uhvate i merenja objavljena nekoliko dana nakon što su izmerena.
Od lokacije i radijusa do liste stanica
Koordinate korisnika i izabrani radijus u kilometrima idu u MongoDB geoprostorni upit, a radijus se prvo deli poluprečnikom Zemlje, jer ga upit očekuje u radijanima. Rezultat su sve merne stanice dovoljno blizu korisnika.
Od stanica i datuma do relevantnih merenja
Id-jevi tih stanica i današnji datum izdvajaju dnevne zapise o polenu, a svaki zapis sadrži id-jeve koncentracija izmerenih uz njega. Te koncentracije se zatim učitaju i filtriraju po alergenima koje je korisnik izabrao, pa odgovor sadrži samo merenja koja su i blizu i relevantna.
Svako merenje dobija nivo i mesto
Sam broj ne govori mnogo, pa se svaka koncentracija poredi sa objavljenim granicama za taj alergen i dobija nivo Low, Normal, High ili Very high. Uz merenje se zatim dodaju alergen i stanica, i to se prikazuje na markeru na mapi i u detaljnom prikazu.
Šta radi
Izaberite svoje alergene
Objavljeno ih je tridesetak, a na profilu se biraju iz liste sa višestrukim izborom. Sve ostalo - mapa, nivoi, notifikacije - prati taj izbor.
Vaš radijus, vaš interval
Radijus pretrage u kilometrima i na koliko sati se proverava, oba se podešavaju na profilu. Kraći interval znači svežija upozorenja, a duži štedi bateriju.
Pregledna mapa
Markeri na mernim stanicama u blizini, obojeni po nivou. Klik na marker prikazuje koji su vaši alergeni tu izmereni i koliki je nivo svakog.
Četiri nivoa, sa brojevima
Low, Normal, High i Very high, svaki sa brojem alergena u blizini na tom nivou. Klik na nivo otvara listu, a klik na stavku prikazuje stanicu, opis i izmerenu vrednost.
Notifikacija kada poraste
Push notifikacija i poruka u aplikaciji kada neki od izabranih alergena dostigne visoku koncentraciju u blizini, pa aplikacija radi svoj posao i kada nije otvorena.
Jednostavni nalozi
Registracija i prijava mejlom, a profil čuva alergene, radijus i interval, pa podešavanja idu uz nalog, a ne uz telefon.
Šta sam naučio
Glavna lekcija je da otvoreni podaci nisu isto što i upotrebljivi podaci. Pet endpointa koji se povezuju preko id-jeva, podaci za celu zemlju i nikakva mogućnost geografskog upita znače da je sva vrednost u kopiranju i spajanju podataka. Najviše inženjerskog posla je bilo u odlukama šta kopirati, koliko često i kako da dvostruko kopiranje ništa ne pokvari.
Druga lekcija je da odgovor mora da stigne sam. Čovek sa alergijom ne otvara aplikaciju da proveri - želi da bude obavešten, u radijusu i intervalu koje jednom podesi. Push notifikacije i backend koji radi po rasporedu pretvaraju javne podatke u upozorenje koje stigne baš onog dana kada je potrebno.