Blog (2)
Komentarze (87)
Recenzje (0)

Moja asystentka Andra

@IcyMatMoja asystentka Andra28.03.2018 22:21

W poprzednim wpisie opisywałem, jak w mojej głowie zrodziła się idea stworzenia swojej własnej mobilnej asystentki. Natomiast dzisiaj chciałbym przybliżyć jej działanie i opisać jak wyglądała ewolucja projektu oraz rozwinąć trochę wątek historii projektu.

Trudne początki

Jak już wspominałem, Andra rodziła się w bólach, a jej API było już raz przepisywane ze względu na przyjęcie złych założeń na etapie planowania projektu. Jednak nie wspomniałem, co było dodatkowym powodem tego, że zdecydowałem się na pisanie swojej asystentki od podstaw.

W czasie, kiedy projekt zaczynał raczkować, byłem posiadaczem urządzeń z różnymi systemami operacyjnymi: na komputerze stacjonarnym przełączałem się między Linuxem a Windowsem, "sekcja mobilna" działała w oparciu o Androida i Windows Phone (co ciekawe, przez pewien czas rozwijałem aplikację mobilną dla tej ostatniej platformy). Ja jednak potrzebowałem mieć wszystko w jednym miejscu, zsynchronizowane ze wszystkimi urządzeniami, a nie rozsiane po kilku platformach i kontach. Dlatego zapadła decyzja o napisaniu swojego rozwiązania. Dzisiaj mógłbym próbować używać Cortany, ale nie mam ochoty i czasu na migrację na kolejną platformę.

Koncepcja graficzna i jej ewolucja

Pierwszym problemem, z którym zetknąłem się na początku projektu, był brak spójnej koncepcji dotyczącej graficznej oprawy mojej nowej "koleżanki". Bądź co bądź miała to być aplikacja, której będę używał codziennie, więc ważnym aspektem była kwestia interfejsu użytkownika. Ostatecznie stanęło na tym, że moja asystentka w pierwotnej formie układem bardzo przypominała pierwsze wersje Cortany. Nawet była przypięta w tym samym miejscu na pasku narzędzi systemu Windows. Na zrzucie ekranu, zamieszczonym poniżej, widać Andrę w jej pierwszej wersji. Logo, które wtedy towarzyszyło projektowi, rozświetlało się podczas przetwarzania poleceń.

Przez trzy lata trwania projektu powstawały liczne modyfikacje graficzne, które dodatkowo komplikowały implementacje wszystkiego na każdej obsługiwanej platformie. Pierwsza wersja Andry wspierała aż 4 motywy kolorystyczne. Wymuszało to generowanie po stronie API wielu obrazów, które różniły się tylko kolorem, bowiem Andra przedstawia część informacji w formie graficznej (np. prognozę pogody). Kiedy jednak zdecydowałem się na stworzenie nowego API powoli zacząłem odchodzić od wspierania motywów kolorystycznych. Wielka zmiana w temacie oprawy graficznej zaszła w 2016 roku.

Światowe Dni Młodzieży mają wpływ na programistów

Jako, że mieszkam w Krakowie nie ominęły mnie w 2016 roku odbywające się tutaj Światowe Dni Młodzieży. Całe szczęście mieszkam na peryferiach miasta i mogłem zabarykadować się na tydzień w mieszkaniu, a to zaowocowało sporą ilością wolnego czasu.

Postanowiłem, oprócz wykonywania mojej pracy zawodowej, skupić się na ujednoliceniu osobistej komunikacji wizualnej oraz elementów komunikacji wizualnej moich projektów. W tym czasie skonkretyzowały się dokładne wytyczne dotyczące mojego osobistego logo oraz projektów, które powstawały. Zmiany dotknęły też Andrę.

Głównym założeniem nowej komunikacji wizualnej było użycie prostych figur geometrycznych w logo projektów oraz rezygnacja z cieni i gradientów. Jak pewnie zauważyliście, pierwsze logo zupełnie nie wpisywało się w te wytyczne. Z tego powodu, któregoś wieczoru powstała nowa komunikacja wizualna dla Andry.

Rewolucja 2018

Końcem 2017 roku postanowiłem rozdzielić identyfikację wizualną projektów od identyfikacji osobistej ze względu na to, że dokument opisujący wszystkie wytyczne wraz ze stroną internetową stawały się coraz bardziej obszerne. Skutkiem tego było rozpoczęcie prac nad nowym projektem, mającym na celu opisanie i stworzenie uniwersalnych zaleceń, dotyczących tworzenia interfejsów użytkownika dla moich projektów. Po trzech miesiącach prac przygotowawczych rozpocząłem wdrażanie nowych wytycznych w moim sztandarowym projekcie. Przy tej okazji postanowiłem delikatnie zmodyfikować logo, aby w możliwie łatwy sposób zastosować w aplikacji założenia dotyczące animacji. W styczniu 2018 roku nowa wersja została w pełni wdrożona.

Równolegle do prac nad nowym interfejsem zajmowałem się "mózgiem" Andry. Kod został znacznie uproszczony, a samo API zostało w końcu udokumentowane. Przeniosłem także zarządzanie pamięcią zadań (np. zadawaniem dodatkowych pytań do tworzonego przypomnienia) na aplikacje klienckie. Wcześniej wszystko było zapamiętywane po stronie serwera, a to niesamowicie utrudniało obsługę Andry na wielu urządzeniach. Była to jedna z gorszych decyzji projektowych, podjętych na samym początku tworzenia projektu, która jednak nie była nieuzasadniona. Chciałem, żeby operacje rozpoczęte na jednym urządzeniu można było dokończyć na innym. Ostatecznie rozwiązanie nie sprawdziło się i obecnie każde urządzenie działa niezależnie od innych.

Główne funkcje

Jak już wspominałem Andra pomaga mi w organizacji mojej pracy i planowaniu mojego dnia. Obecnie dostępne są 4 główne "podprogramy", z których aktywnie korzystam oraz mniejsze funkcje wykorzystywane rzadziej.

Notatki

Notatki są jedną z najprostszych i najstarszych części Andry. Nie oferują zbyt wiele możliwości, ale takie było ich założenie. Dzięki nim w każdej chwili mam dostęp do miejsca, gdzie mogę zapisywać swoje nowe pomysły lub rzeczy, które mam kupić w sklepie. Ta ostatnia notatka jest traktowana wyjątkowo, gdyż w razie potrzeby na jej podstawie moja asystentka może wysłać mi wiadomość SMS z obecną listą zakupów. Opcja ta była niesamowicie przydatna w czasie, kiedy korzystałem z Windows Phone, w którym nie zdążyłem zaimplementować obsługi modułu notatek. Obecnie dzięki Progressive Web Apps mogę mieć wszystkie funkcje Andry na moim telefonie z Androidem, więc z opcji wysyłania listy SMS-em korzystam coraz rzadziej.

Kalendarz

W przypadku tego modułu także można byłoby pomyśleć, że jest to bardzo prosta aplikacja, ale nie do końca tak jest. Kalendarz wbudowany w moją asystentkę różni się - i to bardzo - od tego spotykanego chociażby w portfolio usług firmy Google.

Początki jego implementacji sięgają dwa lata wstecz, kiedy plan całego tygodnia miałem rozpisany na mojej tablicy suchościeralnej wiszącej na ścianie. Stosowałem metodę podziału dnia na godzinowe segmenty, a każdej godzinie odpowiadała jedna komórka tabeli, w którą wklejałem samoprzylepną karteczkę z zadaniem do wykonania o określonej porze. Jeśli zadanie miało trwać dłużej pozostawiałem kolejne komórki puste. Dlatego dzisiejszy kalendarz Andry także opiera się na tym pomyśle. Jednym z usprawnień jest to, że wydarzenia mogą mieć zapisaną większą ilość informacji oraz to, że może być ich kilka w ciągu jednej godziny – w takim przypadku komórka dzielona jest równo pomiędzy wydarzenia.

Każdy z wpisów w kalendarzu może też mieć zapisaną dokładniejszą godzinę rozpoczęcia, np. 17:30, ale nie zmienia to formy wyświetlania w panelu kalendarza. Od pewnego czasu w kalendarzu wyświetlane są także ustawione przypomnienia, które dla odróżnienia są jaśniejsze niż zwykłe wydarzenia.

Dodawanie przypomnień do kalendarza może odbywać się na dwa sposoby. Pierwszy to oczywiście możliwość "wyklikania" odpowiednich opcji, a drugi to głosowe przekazanie instrukcji do Andry. Nad implementacją drugiej metody wprowadzania danych spędziłem sporo czasu, ale opłaciło się, bo dzięki temu mogę w naturalny sposób powiedzieć np. "przypomnij mi za 10 minut, żeby zadzwonić do banku" i Andra zapisze przypomnienie w swojej bazie, a jeśli czegoś nie zrozumie to dopyta o interesujące ją szczegóły. Na obecną chwilę uprościłem nieco ten mechanizm i czas przypomnień jest zaokrąglany do 15 minut, ale nic nie stoi na przeszkodzie, żeby kiedyś wprowadzić ustawianie przypomnienia co do minuty. Ustawione przypomnienia są wysyłane SMS-em, a w przypadku niepowodzenia e-mailem. Dodatkowo przypomnienia są wyświetlane w aplikacji (wraz z głosowym powiadomieniem) oraz podawane przez mój domowy "inteligentny" głośnik oparty o rozwiązanie Google.

Kiedyś Andra synchronizowała swój kalendarz z kalendarzem firmy Microsoft, ale niestety API, z którego korzystałem już w chwili implementacji było przestarzałe, a obecnie zostało wyłączone. Planowałem podłączenie do kalendarza Google, ale ostatecznie nie zdecydowałem się na to, dlatego że chcę się chociaż w niewielkim stopniu odciąć od usług zewnętrznych. Śledzenie tego czy kod odpowiedzialny za synchronizację jest aktualny i czy nie zaszły jakieś zmiany w zewnętrznym API niestety zabiera zbyt wiele cennego czasu.

Finanse

Moja asystentka pomaga mi także w planowaniu domowego budżetu. W aplikacji mogę ustalić miesięczny limit wydatków oraz dodać wydatki do jednej ze zdefiniowanych kategorii. Na chwilę obecną nie ma możliwości konfiguracji kategorii, ale pracuję nad uniwersalizacją tego narzędzia w związku z tym, że niektóre kategorie są już niepotrzebne.

Kontrola wagi

Najnowszym podsystemem Andry jest ten odpowiedzialny za pomoc w utrzymywaniu odpowiedniej wagi ciała użytkownika. Tutaj także nie ma zbyt odkrywczych rozwiązań. Aplikacja pozwala na zapisanie wagi rano i wieczorem oraz dodanie do konkretnego dnia komentarza, np. z informacją, że tego dnia odbyłem swój trening. Z zapisanych danych generowany jest miesięczny wykres wagi ciała.

Jedynym udziwnieniem jest możliwość zapisania wagi przy użyciu opcji rozpoznawania mowy – przydatne narzędzie od czasu kiedy zintegrowałem Andrę z Google Voice Kit.

    Co dzieje się pod maską?

    Moja asystentka to nie tylko to, co widzą użytkownicy (na chwilę obecną "aż" dwie osoby), ale także operacje wykonywane w tle. Już na początku projektu zauważyłem, że nie mogę wszystkich zadań przerzucić na API i tak powstał kolega Andry - Kłapouchy, a właściwie Eeyore. Nazwa dla systemu oczywiście zaczerpnięta jest z powieści Kubuś Puchatek, a sam "osiołek" to w pewnym sensie asystent mojej asystentki. To do tej aplikacji kierowane są zadania wymagające czasu na przetworzenie lub mające się dziać automatycznie.

    Ten specjalny podsystem w imieniu Andry wysyła powiadomienia SMS z przypomnieniami oraz np. z alarmami pogodowymi, dotyczącymi burz w okolicy (na podstawie danych z serwisu burze.dzis.net). Do zadań Eeyore należą także:

    • wysyłka codziennych raportów z informacjami na temat interesujących mnie dziedzin oraz wydarzeniami z kraju i ze świata, a także tych lokalnych (na chwilę obecną tylko z Krakowa),
    • dbanie o synchronizację danych z centralnym serwerem uwierzytelniania użytkowników (IMid),
    • pobieranie rozkładów jazdy z serwerów MPK Kraków,
    • śledzenie stron, na których mogą pojawić się ważne dla mnie informacje,
    • czuwanie nad statusem pracy moich serwerów i wysyłka w przypadku awarii SMS-a z odpowiednią informacją.

    Eeyore jest także generatorem mowy dla Andry (wykorzystywane jest do tego zewnętrzne API, ale potrzebowałem prostego mechanizmu do tworzenia cache zapytań).

    Podsumowanie

    Tak na dzień dzisiejszy wygląda moja osobista asystentka. Nie jest to twór nawet po części mogący konkurować z Siri czy Asystentem Google, ale do moich osobistych spraw nadaje się idealnie. Sam projekt dał mi bardzo dużo, sporo nauczyłem się podczas pisania kodu oraz poszukiwania rozwiązań, które akurat były mi potrzebne. Cały projekt opiera się wszędzie tam, gdzie to tylko możliwe, na darmowych rozwiązaniach, a jedynym kosztem utrzymania jest koszt serwerów i opłaty za wysyłkę SMS-ów z powiadomieniami.

    Jeśli ktoś byłby zainteresowany sprawdzeniem, jak sprawuje się Andra, to z chęcią udostępnię aplikację do testów. Proszę tylko o kontakt za pośrednictwem portalu.

    Na zakończenie tradycyjnie dziękuję za przeczytanie i zapraszam do pozostawienia komentarza. Kolejne wpisy są w przygotowaniu.

    Szanowna Użytkowniczko! Szanowny Użytkowniku!
    ×
    Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

    Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

    Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

    Kto będzie administratorem Twoich danych?

    Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

    O jakich danych mówimy?

    Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

    Dlaczego chcemy przetwarzać Twoje dane?

    Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

    Komu możemy przekazać dane?

    Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

    Jakie masz prawa w stosunku do Twoich danych?

    Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

    Jakie są podstawy prawne przetwarzania Twoich danych?

    Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.