31 maj 2017

28 maj 2017

Automat do pobierania kursów funduszy - 12 tydzień konkursu Daj Się Poznać

Witajcie! W tym tygodniu znowu publikuję tylko jednego posta i to dopiero w niedzielę. Na szczęście tym razem mogę napisać, że powstało sporo nowego kodu. Udało mi się dokończyć i uruchomić automatyczne pobieranie kursów funduszy Nationale-Nederlanden oraz ich zapis w bazie - oczywiście za pośrednictwem API. Zatem dziś krótko o tym rozwiązaniu.

20 maj 2017

InfoShare 2017 - moje przemyślenia i wnioski

Konferencja InfoShare jest stałym punktem na mojej corocznej mapie wydarzeń - nie mogło mnie więc tam zabraknąć również w tym roku. Za każdym razem wynoszę wiele cennej wiedzy z prezentacji, w których mam okazję tam uczestniczyć. Dziś chciałbym podzielić się kilkoma tematami które rezonują w mojej głowie po tegorocznej edycji.

16 maj 2017

Portfel Emerytalny - 11 tydzień konkursu Daj Się Poznać

Przyszedł czas na kolejny update co dzieje się z prowadzonym przeze mnie projektem. Niestety podobnie jak w ubiegłym tygodniu nie powstało za wiele kodu. Stali czytelnicy pewnie zauważyli też, że w ubiegły czwartek/piątek nie pojawił się drugi z cotygodniowych postów. To wszystko dlatego, że zrobiłem sobie mały urlop i nie miałem za wiele okazji do kodowania.

Nie znaczy to jednak, że nie wydarzyło się zupełnie nic. Najważniejszą nowością jest nowy adres pod którym jest dostępna aplikacja: planujemeryture.pl. Od teraz będzie to podstawowy adres aplikacji, jednak na razie utrzymuję ją również w tej samej wersji pod adresem thorin87.github.io

Równolegle wystartował również fanpage na FB: www.facebook.com/planujemeryture. Na razie jest tam bardzo ubogo i nie ma nawet żadnego polubienia. Będę tam wrzucał aktualizacje co dzieje się z aplikacją, być może też co nieco o oszczędzaniu na emeryturę - jeśli temat jest dla Ciebie interesujący to zapraszam do "lajkowania".

Blog też przeszedł drobne zmiany. Po prawej pojawiły się odnośniki do aplikacji Portfela Emerytalnego oraz do profili w mediach społecznościowych. Poza tym dodałem brakujące tłumaczenia elementów szablonu i kilka innych kosmetycznych poprawek.

W samej aplikacji natomiast udało się popracować tylko nad automatem do pobierania danych, ale na razie bez efektów (jeszcze nie działa). Fundusze w bazie zyskały nowe pole ExternalId pod jakim są identyfikowane na stronach TFI, ale ze względu na małą ilość pozostałego do końca konkursu czasu na razie te Id zostaną wpisane na sztywno w kodzie automatu.

8 maj 2017

Portfel Emerytalny - 10 tydzień konkursu Daj Się Poznać

Cześć! Zapraszam na cotygodniowe podsumowanie tego, co dzieje się z moim projektem konkursowym.

W tym tygodniu nie udało się napisać zbyt wiele kodu, ale przemyślałem jak zoptymalizować zapytanie do bazy, które zwraca dane potrzebne do wyświetlenia wykresu. Będzie sporo przetwarzania wyników z bazy po stronie backendu, ale jednocześnie zapewnię możliwość wyboru, które fundusze są prezentowane na wykresie. Zacząłem już nawet zapisywać co wymyśliłem, ale na razie skończyło się na zakomentowaniu wszystkiego. Zapytanie które jest teraz zwraca dokładnie czego potrzebuję, więc jego optymalizacją zajmę się w przyszłości.

Kolejną rzeczą którą poprawiłem jest format JSON zwracany jako odpowiedź na zapytania do API. Wcześniej każdy wiersz wyniku był zwracany jako tablica, a teraz jest to obiekt z nazwami kolumn z zapytania. Czyli było tak:
{
  "data": [
    [
      1, 
      "IKE", 
      "IKE Plus", 
      "NN Investment Partners TFI S.A.", 
      "Towarzystwo funduszy inwestycyjnych"
    ], 
    [
      2, 
      "IKZE", 
      "Dobrowolny Fundusz Emerytalny PZU", 
      "PTE PZU SA", 
      "Powszechne towarzystwo emerytalne"
    ]
  ]
}
a teraz jest tak:
{
  "data": [
    {
      "Id": 1, 
      "Name": "IKE", 
      "Owner": "NN Investment Partners TFI S.A.", 
      "OwnerType": "Towarzystwo funduszy inwestycyjnych", 
      "ProductName": "IKE Plus"
    }, 
    {
      "Id": 2, 
      "Name": "IKZE", 
      "Owner": "PTE PZU SA", 
      "OwnerType": "Powszechne towarzystwo emerytalne", 
      "ProductName": "Dobrowolny Fundusz Emerytalny PZU"
    }
  ]
}
Po tej zmianie mogłem we frontendzie zmienić nic nie mówiące wywołania w stylu wallet[1] na opisowe wallet.Name. Dodałem też kilka klas (a konkretnie interfejsów) modelu we frontendzie, dzięki czemu do tego będzie działało jeszcze podpowiadanie składni dla tych obiektów.

To tyle jeśli chodzi o ubiegły tydzień, mam nadzieję że kolejny będzie bardziej obfity w nowy kod i funkcjonalności.

6 maj 2017

Portfel Emerytalny - podsumowanie kwietnia

Upłynął kolejny miesiąc konkursu Daj Się Poznać, pora więc na podsumowanie co się zmieniło i jaki jest teraz stan aplikacji Portfela Emerytalnego. Tym razem dużo łatwiej robić mi takie zestawienie, bo mam cotygodniowe raporty ze zmianami oraz listę celów, które wyznaczyłem sobie na kwiecień. Skonfrontuję je zatem ze sobą, poza tym zaplanuję co będę robił w maju.

Plan na kwiecień był podzielony na 3 główne obszary: aplikacja, promocja, blog. W trakcie miesiąca plan ten przeszedł drobną metamorfozę - aplikacja została zmieniona na tryb tylko do odczytu, o czym pisałem w podsumowaniu 8. tygodnia. Głównym celem w obszarze aplikacji było opublikowanie Portfela Emerytalnego online, co udało się osiągnąć - efekt można zobaczyć na https://thorin87.github.io/. Nie byłoby to jednak możliwe, gdybym chciał zrealizować wszystkie punkty z tego obszaru - stąd właśnie decyzja o rezygnacji z możliwości wprowadzania własnych danych. A co dokładnie udało się wykreślić z listy?
  • znaleźć i wdrożyć layout interfejsu użytkownika
  • zapisać w bazie kursy wszystkich funduszy których jednostki posiadam lub posiadałem (idealnie gdyby działał już automat aktualizujący dane)
  • zaimplementować operacje związane z portfelem inwestycji (kupno, sprzedaż, zamiana)
  • uzupełnić portfel o historyczne operacje które wykonywałem
  • wyświetlać listę posiadanych jednostek funduszy 
  • prezentować historię operacji
  • wyświetlać wykresy wartości posiadanych walorów (idealnie gdyby zaznaczały się na nim operacje z historii)
  • wyświetlać procentowy zysk/stratę ze wszystkich inwestycji (idealnie byłoby gdyby dało się wybrać z których)
Jak widać udało się zrealizować całkiem sporą część planu, a to czego nie udało się zrobić zostanie przeniesione na plan majowy - ale o tym za chwilę.

Zrezygnowałem też na razie z promocji na Facebooku. Uznałem, że skoro mam zakładać profil produktu, to lepiej będzie jeśli Portfel Emerytalny będzie już dostępny w sieci - przynajmniej w podstawowej wersji. Teraz już jest, więc profil na FB to kolejna rzecz która przechodzi na listę rzeczy do zrobienia w maju.

Ostatni obszar kwietniowego planu to zmiany na blogu. Ten punkt udało się wdrożyć w całości, co tydzień pojawiał się jeden post o zmianach w projekcie i jeden o tematyce bardziej ogólnej. Niestety nie udało się utrzymać regularnych publikacji w poniedziałki i czwartki, jednak ostatecznie w każdym z tygodni pojawiły się 2 posty i tego chcę się trzymać.

Plan na maj

W chwili pisania tego posta zostały jedynie 3 pełne tygodnie maja. Jeśli plan ma być realny, to nie mogę zakładać zbyt wiele rzeczy do zrobienia. Jak już pisałem na pewno chcę założyć profil Portfela Emerytalnego na Facebooku. Jeśli zaś chodzi o samą aplikację, to poniżej prezentuję listę funkcjonalności, które chciałbym żeby pojawiły się w maju:
  • uruchomić automat aktualizujący dane dla funduszy, których jednostki posiadam (dodatkowo zrobić research którymi funduszami zająć się później)
  • dokończyć profile użytkowników oparte o tokeny
  • dodać możliwość dodania do profilu portfeli IKE i IKZE
  • zaimplementować operacje w konkretnym portfelu (kupno, sprzedaż, zamiana jednostek uczestnictwa)
  • prezentować historię operacji w portfelach
  • dodać wybór, które fundusze są prezentowane na wykresie
  • zaznaczać na wykresie operacje z historii
Do pełni założonej na początku funkcjonalności będzie brakowało jeszcze analizy kursu funduszy przez kroczący stop loss i powiadomień o jego osiągnięciu. Patrząc na dotychczasowe tempo rozwoju prawdopodobnie nie uda się osiągnąć tego w maju. Wydaje mi się jednak, że ważniejsze jest udostępnienie możliwości zakładania własnych portfeli. Kroczący stop loss będzie zatem zaimplementowany w kolejnej wersji aplikacji, bo wierzę że rozwój Portfela Emerytalnego nie skończy się razem z końcem konkursu.

2 maj 2017

Portfel Emerytalny jest już online - 9 tydzień konkursu Daj Się Poznać

Ostatni tydzień rozwoju aplikacji był poświęcony jednemu celowi - spiąć wszystkie warstwy ze sobą i wystawić je online. Co prawda z małym opóźnieniem, ale cel udało się osiągnąć. Z przyjemnością zatem informuję, że aplikacja Portfela Emerytalnego jest już dostępna online pod adresami:
https://thorin87.github.io/ oraz
https://thorin87.github.io/retirement-savings/

Główne wyzwania jakie stanęły na drodze, to wydajne zapytanie do bazy o dane na potrzeby wykresu oraz problemy ze zbudowaniem wersji produkcyjnej frontendu.
Zapytanie do bazy niestety ciągle pozostawia wiele do życzenia (czas wykonania ~3s), ale zwraca dokładnie to czego potrzebuję. Przyjdzie jeszcze czas na jego optymalizację, na razie zostaje tak jak jest. Do tego drugiego problemu szczególnie przyłożył się moduł angular2-highcharts i błąd
Error encountered resolving symbol values statically. Calling function 'ChartModule', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function
wywołany przez poniższą linię w module aplikacji
    ChartModule.forRoot(require('highcharts/highstock'))
Jak rozwiązać ten problem? Odsyłam do mojego kodu na GitHub lub do oficjalnego issue założonego dla tego problemu.

Pozostałe zmiany we frontendzie to:
  1. wyłączenie Routingu (na razie go nie potrzebuję, cała aplikacja jest single page)
  2. wydzielenie adresu API do plików konfiguracyjnych (projekt wygenerowany z angular-cli od ręki obsługuje oddzielne pliki konfiguracyjne dla środowiska deweloperskiego i produkcji)
  3. wydzielenie modułu dla kart z podsumowaniem wyświetlanych na początku strony
  4. pobieranie i wyświetlanie danych z API (karty podsumowania, wykres i portfele)
  5. sporo drobnych poprawek i usuwania niepotrzebnych fragmentów kodu
Baza również przeszła drobną zmianę, ponieważ zupełnie bez sensu było trzymanie dat operacji kupna i sprzedaży zasobu (asset) w jednym wierszu. Teraz jest jedna data OperationDate i ewentualnie ilość jest mniejsza od zera, jeśli jest to sprzedaż.

W API też sporo zmian, ale bez rewolucji. Głównie są to poprawione lub rozszerzone już istniejące zapytania do bazy. Pojawiły się też 2 nowe metody - pobieranie danych do wykresu i podsumowania - ale opierają się o ten sam schemat, czyli wywołaj zapytanie i zwróć jego wynik jako JSON bez większej obróbki.

Jeszcze w tym tygodniu pojawi się podsumowanie całego miesiąca pracy i jej efektów, a także plan na ostatni już miesiąc konkursu. Zapraszam też do śledzenia mnie na Twitterze, gdzie pojawia się info o każdym nowym wpisie na blogu.