Na wstępie podsumuje cele z poprzedniego roku, które udało mi się zrealizować, a które nie.
Niestety Rest`owej aplikacji nie udało mi się skończyć, jedyne co udało mi się zrobić to zaprojektować bazę danych, utworzyć system rejestracji i logowanie (będzie on przerabiany na JWT) oraz skonfigurować cale środowisko (swagger, file uploader). Obecnie uczę się Redux`a, aby stworzyć frontend`ową część aplikacji, gdyż uznałem, że sam React nie wystarczy. Backend przeszedł metamorfozę z Symfony 3 do 4. Obecnie mam nadzieje, że do kolejnego podsumowania uda mi się skończyć ten projekt.
Konsole linux`ową zgłębiłem w ciągu tego roku znacznie bardziej niż przypuszczałem. Przyczyniły się do tego zajęcia na PWR dotyczącej poleceń konsolowych oraz sporo czasu spędzonego w terminalu buszując po serwerach. Dodatkową atrakcją i motywacja została linuksowa konsolka na Windows`a. Pozwala ona na stosowanie wszystkich poleceń i aplikacji które istnieją pod konkretną dystrybucję.
Co do wzorców projektowych to dalej zostaje w tyle, gdyż nie używałem ich za dużo. Znam mniej więcej teoretyczne pojęcie o obserwatorze, fabryce, ale dalej nie wiem gdzie je można zastosować w praktyce. Jedyny, jaki wykorzystywałem i dobrze znam – głównie dzięki Symfony – to builder.
Bigdata niestety ominęło mnie, nie miałem okazji zarządzać, administrować ani dotykać tak sporej bazy danych. Kiedyś pobrałem przykładową plus narzędzie do zarządzania nią, ale nie znalazłem czasu aby się tym pobawić. Mam nadzieje ze w teraźniejszej pracy uda mi się zetknąć z tym tematem.
Algorytmy …
Na tą chwilę nie planuję zmienić technologii, chyba ze na NodeJS. JavaScript jest to język uniwersalny i teraz znając tylko go możemy programować na wszystkie platformy. Co do C++ to obecnie programuje uC używając go, ale nie planuje używać go komercyjnie, chyba że nadarzy się taka okazja.
Jakie plany na teraz i co się nauczyłem w tym roku?
W tym roku w pracy pisałem duży portal związany z biegami. Backend stoi na Symfony 3, a frontend na Vue.js. Jest to aplikacja całkowicie Rest`owa i cala komunikacja odbywa się poprzez RestAPI. Dzięki temu projektowi dużo nauczyłem się o projektowaniu i planowaniu aplikacji. Pisanie scenariuszy stało się dla mnie codziennością. Bardzo mi się spodobały i na pewno będę ich używał w przyszłości.
Poza rzeczami dotyczącymi zarządzania to rozwinąłem się ogromnie na tle technologicznym. Poznałem znaczeni lepiej Doctrine i jej zaawansowane funkcje, relacje itp. Implementowałem JWT jako system logowania. Pisałem własny interfejs do uploadu plików i używałem wzorce typu buldery do tworzenia go. Ponadto napisałem bardzo wygodny w używaniu serwis do wysyłania SMS’ów integrujący się z SMSApi. Na pewno wykorzystam go jeszcze nie raz w mojej karierze. Kolejnym krokiem milowym okazało się Server-Side Rendering. Jest to rozwiązanie pozwalające botom, które wejdą na naszą stronę, po prostu zobaczenie jej, gdyż cały kontent zostanie wyrenderowany wcześniej jako statyczny HTML. W innym przypadku np. Google Bot odwiedzając naszą stronę nic by nie zobaczył, bo aplikacja JS nie zdążyła, by się wczytać.
Prywatnie udało mi się podszkolić w NodeJS, gdyż miałem okazje użyć go do napisania aplikacji na kółko naukowe (zadanie na Hackyeah 2017), która zabierała oferty Allegro i łączyła je po NIP`ie z informacjami z KRS. To wszystko trzeba było zapisać do bazy danych. Posłużyłem się ORM dla NodeJS o nazwie Sequalize.js, która ułatwiła mi ten cały proces. Aplikacja wymaga kilku poprawek na rzecz optymalizacji czasu i zużycia pamięci, ale jestem z niej bardzo zadowolony. Dodatkowo musiałem specjalnie do niej zaimplementować kolejkę, która ogranicza ilość request`ów wysyłanych do API Allegro.
Dodatkowo w te wakacje dużo czasu poświęciłem na C++ aby programować uC. Teraz zacząłem używać biblioteki Arduino, która przyspieszyła mi znacznie pracę. Napisałem nawet ciekawy artykuł o tym, jak jej używać na różne typy uC, aby nie ograniczać się tylko do Atmeg328.
Odbyłem swoją pierwsza styczność z Machine Learning’iem. Była to biblioteka napisana dla PHP, gdzie zaimplementowałem ją w projekcie do zarządzania i estymowania czasem trwania projektów. O tym projekcie pisałem już pewnie, gdyż było to moje główne zadanie w pracy w poprzednim roku. Problem polegał na tym ze ciężko było przewidzieć ile może trwać projekt w roboczogodzinach. Co prawda były jakieś statystyki, ale znacząco odbiegały od rzeczywistości. Pomysł z zaprzęgnięciem ML był taki, żeby wyuczyć algorytmy, w jaki sposób realizowane są projekty w naszej firmie na podstawie wielu czynników. Potem wyuczona sieć powinna zwracać wynik w godzinach pracy potrzebnych na ukończenie tego projektu, biorąc pod uwagę jego stopień zaawansowania itp.
Z JS tez nie stoję na bakier. Cały czas go wykorzystuję, czy to do nauki React`a, czy do prostych haków przeglądarkowych albo kodowania backend’u w NodeJS.
Cele na następny rok:
- Na pewno chciałbym w końcu dokończyć Restową aplikację. Może być to MVP (skromna na froncie i bez aplikacji mobilnej), ale żeby działała i mógłbym ją rozwijać dalej.
- Docker, openvpn, SSH. Chciałbym lepiej zgłębić te tematy, gdyż wykorzystuje je w nowej pracy na co dzień i myśle, że warto znać ich możliwości. Chciałbym potrafić stworzyć własny obraz dockera oraz skomunikować się we własnym serwerem poprzez VPN 😀
- Przerzucenie się na system Linux. Do następnego podsumowania chciałbym już w 100% programować pod systemem Ubuntu. Odnosi się to do aplikacji webowych, a jeśli starczy czasu to chciałbym też programować uC (nawet arduino) z poziomu Linuxa.
- Mimo iż zacząłem używać konsoli w większym stopniu do poprzedniego roku to chciałbym wykorzystywać ją jeszcze bardziej. Jest to zdecydowanie najlepsze rozwiązanie dla programisty, gdyż wiele programów i funkcjonalności nie ma dedykowanych aplikacji oraz GUI i trzeba używać ich poprzez konsolę. Dodatkowo robi to wrażenie na innych osobach.
- Node + Raspberry Pi, spróbować coś zaprogramować. Może własny serwer? Temat dowolny, ale ważne, by to ruszyć w jakiś sposób 😀
- Zrozumieć wreszcie architekturę Flux i nauczyć się Reduxa, aby zaprojektować cały front mojej Restowej aplikacji.
- Małymi kroczkami wdrażać się w Machine Learning i Artificial Intelligence, poznawać narzędzia związane z tymi tematami itp
- AWS (może OVH?), myślę, że w tym roku to już konieczność mieć własną chmurę i potrawić ją w minimalnym stopniu skonfigurować
Podsumowując:
Myślę, że mimo nie zrealizowania większości celów i tak jestem sporo do przodu w wiedzy i doświadczeniu. Cały czas poznaje nowe techniki i rozwiązania. Wiele celów dochodzi nowych, niektóre musza pójść do lamusa, gdyż ich priorytet spada i nie ma czasu ich zrealizować. Praca plus studia niezostawiana wiele czasu wolnego, wiec nie ma co bać się odrzucić jakiegoś celu, gdyż w innym przypadku będzie siedział cały czas nam na głowie i dekoncentrował. Jestem bardzo ciekaw jak będzie wyglądało podsumowanie za rok i ile celów uda mi się zrealizować 🙂