Ostatnie wpisy dotyczyły głównie organizacji projektu i technologii użytej w projekcie SmogBota, dzisiaj pora na małe podsumowanie tego co wydarzyło się w projekcie w ciągu ostatnich kilkunastu dni, zapraszam :)
Zobaczmy, które założenia projektowe udało mi się już teraz zrealizować:
Musi integrować się z przynajmniej jednym źródłem danych o zanieczyszczeniu powietrza
Zrealizowane, obecnie korzystam z informacji z Głównego Inspektoratu Ochrony Środowiska. Na potrzeby pobierania tych danych stworzyłem bibliotekę kliencką, dostępna jest na GitHubie oraz NuGetcie.
Wnioski na tę chwilę: GIOS ma spore opóźnienie w aktualizacji danych ze stacji wojewódzkich i powiatowych, planuję w przyszłości dodać np. PIOŚ w Krakowie, aby dane były szybciej dostępne dla bota a co za tym idzie – aby mógł szybciej powiadamiać użytkowników o zmianach poziomów zanieczyszczeń. Konieczna będzie tutaj przebudowa bazy o uwzględnianie kilku źródeł – na razie nie komplikowałem sprawy i zrobiłem to najprościej jak się da.
Musi umożliwiać użytkownikowi sprawdzenie ostatnich przekroczeń norm zanieczyszczeń dla danego miasta
Zrealizowane, użytkownik na żądanie może zapytać bota o bieżący stan przekroczeń norm. Wygląda to tak (w Skype):
Tutaj wymagane są jeszcze szlify graficzne, np. prezentowanie obrazków dla danych stacji w zależności od tego jak bardzo złe jest powietrze w danej chwili.
Powinien zapamiętywać określone przez użytkownika miasto jako jego domyślne, aby przy następnych sprawdzeniach nie trzeba było go określać
Zrealizowane, w tym momencie przy pierwszym sprawdzeniu bot pyta o miasto i zapisuje je w usłudze stanu BotFramework (widok z emulatora):
Tutaj zmiany będzie wymagać miejsce przechowywania informacji o wybranym mieście – obecnie jest to usługa stanu oferowana przez BotFramework, docelowo będzie to baza danych SmogBota, zmiana ta jest konieczna w związku z wysyłaniem notyfikacji oraz ostrzeżeń – inne komponenty muszą znać wybrane przez użytkownika miasto, a tworzenie zależności tych komponentów od usługi stanu BotFramework jest niepotrzebną komplikacją.
Powinien oferować możliwość rozpoznawania nazw miast podanych w przypadkach innych niż mianownik
Tutaj miałem dość dużą zagwozdkę jak to zrobić. Oczywiście można wytoczyć działa w postaci full text search lub zintegrować się z jakimś api geolokalizacyjnym, natomiast – aby nie komplikować projektu na tym etapie zaimplementowałem „poor man’s fuzzy logic” – rozpoznawanie najdłuższych prefiksów nazw miast oraz pytania doprecyzowujące, jeśli dopasowań prefiksów jest kilka:
Działa to całkiem sprawnie, zwłaszcza, jeśli z zapytania oraz nazw miast pozbędziemy się polskich znaków, więc na tę chwilę nie planuję tego mechanizmu ulepszać.
Może oferować kilka wariantów szablonów odpowiedzi.
Zrealizowane, zaimplementowałem wygodne helpery, które pozwalają w osobnych klasach definiować zestawy odpowiedzi dla danej sytuacji.
Problem, jaki tutaj napotkałem to odmiana nazw miast w języku polskim. Otóż nie znalazłem żadnej biblioteki, która pomagałaby odmieniać nazwy miast w języku polskim, stąd wszystkie odpowiedzi zawierające nazwy miast trzeba pisać tak, aby w sposób naturalny wkomponowywały nazwę miasta w mianowniku do odpowiedzi.
Powinien być zaprojektowany jako rozwiązanie cloud native, powinien być zrealizowany w architekturze serverless
Tutaj niestety tylko częściowy sukces, gdyż samego BotFrameworka (a konkretnie BotBuildera) nie udało mi się uruchomić w ramach Azure Bot Service. Tym samym bot jest wykonany jako standardowa aplikacja ASP.NET MVC, hostowana w Azure Web App.
Dodatkowe usługi związane z botem (usługa pobierania danych o zanieczyszczeniu powietrza, usługa powiadomień użytkowników) zostały natomiast z sukcesem zrealizowane jako Azure Functions typu timer, a więc dla nich mamy spełnione założenie architektury typu serverless.
Co dalej?
Jadę na wakacje, nie będzie mnie do końca przyszłego tygodnia :P
A jeśli chodzi o projekt to pracuję obecnie nad uruchomieniem powiadomień o zadanych godzinach. Następne w planach są ostrzeżenia o przekroczeniu norm zanieczyszczenia, gdy tylko takowe zostaną zanotowane. W międzyczasie postaram się także zintegrować drugie źródło danych o zanieczyszczeniu.
Po ukończeniu powyższych podrasuję UX bota i udostępnię wersję testową dla Was do poklikania:)
Dodaj komentarz