wtorek, 16 maja 2017

Dzień 39., 40. i 41.

    Ponownie kila dni w jednym wpisie, bo ostatnio nie ma dla mnie zbytnio zadań, więc się douczam. Przez 2 dni uczyłem się o serwisach w Symfony2. Znalazłem jakiś krótki kurs po polsku, a później zrobiłem przykłady z dokumentacji Sf2. Wiem już co to jest service container, jak się tworzy własne i pobiera gotowe serwisy oraz że kontroler też może być serwisem, ale o tym ostatnim czytałem jakieś artykuły, że to może być zło. Senior kazał mi też poczytać o serwisach tagowanych oraz zrozumieć, ale z tym ostatnim to nie jest tak do końca pewien, póki nie trafię na zastosowanie praktyczne. Serwisy niby też zrozumiałem i zrobiłem jakieś własne, ale jak ponownie sięgnąłem do projektu, w którym miałem zmienić serwis, to dalej nie wiem jak to zrobić, bo ten kod jest zbyt zagmatwany.

    Gdzieś w trakcie tych trzech dni, zdarzyły mi się zadania programistyczne. Jedno na godzinę, które nawet nie pamiętam, ale dwa pozostałe już ciekawsze. Projekt Manager szukał dla mnie jakichś zadań i coś tam odgrzebał, albo mu po drodze zgłoszono. Zacząłem więc dzielnie szukać błędu, który widziałem naocznie u dziewczyn z zaprzyjaźnionej firmy, z którą dzielimy biuro. Siadam do błędu, grzebię, kod wygląda znajomo, bo już coś w nim robiłem na samym początku pracy, ale i tak schodzą mi 4 godzinę na analizę, co się w tym projekcie dzieje i czemu pewne pola są różnie opisane, chociaż spełniają tę samą role, a także nie mają relacji, tylko są kopiowane. Poprawiam i działa. W międzyczasie jest mowa, że wiszą jakieś moje stare merge requesty w tym projekcie, bo PM coś tam przegląda. No to i ja przejrzę czemu to jeszcze wisi. Przeglądam, przeglądam a tam znajomy kod. Okazuje się, że już raz ten problem rozwiązałem, tylko nikt go nie wypchnął, a ja w tym projekcie poruszałem się wtedy jak dziecko we mgle, więc zupełnie tego nie kojarzyłem. Ale przynajmniej dwa raz tak samo napisałem kawałek kodu, więc pewnie jest dobrze. ;) A próby zrzucania odpowiedzialności na mnie (powiedziałem PM-owi, że już raz to zrobiłem, tylko nie zostało zaakceptowane) są po prostu śmieszne, bo nie mam obowiązku pamiętania wszystkiego co robiłem, zwłaszcza w czasach, gdy nie do końca ogarniałem co się dzieje.

   Trafiła mi się też ciekawostka, w której sam jestem sobie winny i jest w sumie śmieszna. Dostałem zadanie o braku aktualizacji wyświetlanych danych po zastosowaniu filtrów. Jedna z poprawek dotyczyła front-endu, bo korzystał nie z tych danych, które przekazywała back-end, a druga była w back-endzie i moje wersja jest taka, że zostało zrobione to źle, ale kolegi, który to pisał jest taka, że nie zostało to właściwie zaimplementowane. Ot, wyświetlanie sumy wpłat dla wszystkich użytkowników zamiast dla przefiltrowanych, to niewłaściwa implementacja. Koniec końców, napisałem własną implementację, wzorując się na kawałku kodu, który zliczał liczbę wpłat. Przepisałem zapytanie DQL zmieniając co trzeba i oglądam wyniki. Pierwszy działa, więc sprawdzam w innych kategoriach. Też działa, ale że kwoty były duże, to sprawdziłem na 3 wynikach. I tu się prawie zgadzało, gdyby nie to, że po przecinku powinno być 40 gr, a u mnie było zero. Sprawdzam gdzie indziej i to samo. No to mamy problem... Sprawdzam front-end, bo tam widziałem jakieś zaokrąglanie, ale console.log z tymi liczbami wyświetla dobry wynik. Zabieram się więc do czystego SQL-a, ale tam również jest dobrze i nie spodziewałem się, żeby było inaczej. Przeglądam kod i nagle olśnienie! Jeśli zwraca się wynik zapytania rzutowany na (int) zamiast na (float), to się nie ma co dziwić, że wyświetlają się liczby całkowite. :)


wtorek, 2 maja 2017

Dzień 37. i 38.

    Znów połączyłem 2 dni w jeden wpis, bo szkoda elektronów. Dzień 37. spędziłem na reinstalacji laptopa dla naszego Office Managera i tak zeszło z 6 h. System systemem, ale później aktualizacje, jakieś pakiety biurowe i inne takie i trochę na tym schodzi, żeby doprowadzić do użytku.
    Poza tym, dostałem jedną drobną poprawkę wycenioną na ... 5 minut. Wszystko fajnie, bo to jedna zmiana warunku true na false, ale z zegarkiem (Toggl) w ręce zmierzyłem, że zajęło mi to 7,5 minuty i to też nie całości pracy. Żeby zrobić taką poprawkę trzeba: otworzyć projekt, znaleźć odpowiedni plik (dobrze, że ja pisałem tę funkcjonalność to wiedziałem gdzie szukać), dokonać zmiany, przetestować, a wcześniej dobrze by było zrobić nowego brancha (chociaż po fakcie z developa też nie będzie tak źle), skomitować zmiany, zrobić pusha, otworzyć merge requesta, poustawiać tam co trzeba i opisać, a na koniec napisać w GitLabie, że się zrobiło. Także takie magiczne 5 minut się wydłuża do 10 co najmniej. Resztę czasu spędziłem oglądając do końca filmik o PHPStormie, który oglądałem z przerwami podczas instalacji Windowsów.

   Dzień następny, czyli dla niektórych długi weekend, spędziłem w pracy wraz z pięcioma kolegami, bo reszta wzięła urlopy. Nie było dla mnie żadnych zadań, ale przed przerwą ustaliłem z PM-em, że wyślę do niego i seniora plan czego chciałbym się pouczyć. Plan przesłałem i senior dzisiaj stwierdził, że fajnie, ale żebym głównie zajął się nauką Symfony, a nie resztą drobiazgów. Zabrałem się więc dzielnie do nauki serwisów, bo już raz robiłem podejście i wydawało mi się, że to proste i wszystko rozumiem, ale jak przyszło co do czego i większego serwisu, to już się gubiłem.
    Obejrzałem jakiś tutorial, napisałem prosty serwis na jego podstawie, ale to mi nie wystarczało, więc zabrałem się za dokumentację od Symfony. Czytam, czytam i przestaję rozumieć. Dochodzę do dependency injection i zaczyna się kłopot, bo tego już też raz nie zrozumiałem. Zacząłem więc czytać o DI. Czytam, czytam, przeglądam przykłady i nagle jakiś trybik w głowie przeskakuje. No kurde, przecież ja tego cały czas używam w kodzie, ale totalnie nieświadomie, dlatego że patrzę jak inni piszą kod i kopiuję rozwiązania. Żeby się upewnić czy rozumiem, wracam do filmiku o DI, który kiedyś oglądałem, ale totalnie nic nie zrozumiałem, bo brakowało w nim jakiejkolwiek teorii, tylko był przykład na kodzie. Teraz nagle wszystko stało się jasne. Ucieszony wstałem od biurka i pochwaliłem się swoim sukcesem seniorowi. Jak zwykle komentarz był ironiczny, ale muszę przywyknąć i zacząć olewać. Wolałbym coś bardziej motywującego, ale cóż... Generalnie postanowiłem po przerwie opowiedzieć o swoich odkryciach gumowej kaczuszce*, aby sprawdzić czy na pewno rozumiem, tylko jakoś nikogo nie widziałem w tej roli, więc zajrzałem do kodu napi... przepisanego serwisu z tutoriala i opowiadać o nim wyimaginowanej kaczuszce w myślach. Wyglądała na zadowoloną, więc teraz chętnie opowiedziałbym o tym żywemu człowiekowi. Zajrzałem też do kodu, który pisałem ostatnio - eksportera do Excela, gdzie oparty był na serwisach i też jakoś lepiej go rozumiałem. Jak będzie następna wolna chwila, to wrócę do projektu, gdzie nie potrafiłem zmienić korzystania z jednego serwisu na inny i zobaczymy, czy mój aktualny stan umysłowy to ogarnie. :)

* - Metoda gumowej kaczuszki

środa, 26 kwietnia 2017

Dzień 35. i 36.

    Po przyjściu do pracy, zajrzałem do maili i dostałem jakąś poprawkę we front-endzie. Przyjrzałem się temu i trzeba było ostylować widgety w twigu. Ostylowałem jeden i działał. Wtem nagle podchodzi PM (który mi to zadanie zlecił) i spytał co robię. Powiedziałem więc, że to co dostałem od niego, a on na to, żebym to zostawił, bo przejmie kolega. Mówię, że już zacząłem i to jest góra 15 minut roboty, ale i tak miałem zostawić i zająć się czymś nowym. Zostawiłem, ale z pół godziny zeszło.

    Nowy projekt, który dostałem jest elementem projektu, przy którym już pracowałem, tyle że połączonym biznesowo a nie kodowo, bo tam był to CRM dla tej firmy, a tutaj jest CMS i coś się ponoć nie wyświetla na stronie po edycji po stronie admina. Instalacja projektu wydawała się prosta, bo już to robiłem parę razy, więc nawet nie muszę sięgać do notatek. I wszystko byłoby dobrze, gdyby życie było proste. Dojście do tego, że nie mam nowej bazy i .htaccess blokuje mi część projektu oraz że Firefox zapamiętał sobie przekierowanie i za cholerę nie chce korzystać ze zmian, zajęło mi chyba z 1,5 h, zanim udało się ten projekt uruchomić lokalnie. Wcześniej parę razy słyszałem, że "jak coś Ci nie działa to sprawdzaj na devie albo na teście", a tym razem się okazało, że tam dawno nic nie było aktualizowane i nie mam co sprawdzać...

    Projekt w końcu uruchomiłem. Pierwsza poprawka przy której zacząłem grzebać przeszła na później, a zająłem się prostszą, czyli zmianami związanymi z zamówieniami w związku ze zbliżającą się majówka. Dostałem wskazanie na kawałek kody, gdzie było to już robione, więc po prostu musiałem dopisać swoje ify i else'y. Dopisałem, zablokowałem 1 maja w kalendarzu we froncie i byłem zadowolony. Dzień później okazało się, że miałem zaćmienie mózgu i trochę w moich ifach brakowało warunków...

   Następnym zadaniem był brak aktualizacji z CMS-a. Tutaj już nie było tak wesoło. Trochę pomógł profiler z Symfony, ale bardziej pomógł kolega, który coś już przy tym robił. W profilerze znaleźliśmy błąd walidacji formularza, więc zaczęło się szukanie co jest nie tak. Kombinacje ze zmianą assertów w encjach i wyświetlaniu odpowiednich pól trochę pomagały, ale problem i tak przeciągnął się do dnia następnego. Dzień później rozgrzebałem to dalej, pousuwałem pewne pola, które i tak się nie pojawiały we froncie i ustaliłem z architektem, że to słuszna poprawka, więc wywalamy z klasy to pole na stałe. Teraz przeklikałem edycję i wszystko się walidowało i wyświetlało jak należy.

    Wysłałem merge request do seniora, ale później się okazało, że nie zauważył i czekał aż mu powiem, że skończyłem. Z drugiej strony z PM-em mam ciągle tak, że do mnie przychodzi spytać o postępy i ciągle ma coś nowego, więc pomyślałem, że pewnie nic dla mnie nie mają, to sobie coś sam porobię. Poczytałem sobie i potestowałem jak się używa serwisu Toggl.com do mierzenia czasu pracy. Później zabrałem się za poprawki w htaccessie, przez który miałem problem z tym projektem i poprawiłem jeden warunek, żeby nie przepisywał nagłówków, jeżeli jest uruchamiany na localhoście. Następnie pomyślałem, że skoro baza w projekcie jest nieaktualna i skrypt do budowania projektu nie bardzo działa jak trzeba, to pogrzebię w tym. Zrobiłem więc nowego dumpa i musiałem przepisać kawałek skryptu build.sh, bo nie wyrabiał się z rozmiarem nowego dumpa. Wyciągnąłem aktualny konfig MySQL-a z parameters.yml i dzięki temu mogłem mieć hasła, żeby wczytywać dumpy ze skryptu bez pytania o nie, przy każdym uruchomieniu skryptu. Od teraz, w razie popsucia czegoś w bazie, wystarczy odpalić skrypt budujący i wczyta nam od nowa bazę, wykona migracje i zbuduje CMS.

    Zbierając się do domu, senior zapytał czy skończyłem, więc powiedziałem, że tak i już dawno, a w tym czasie porobiłem to i tamto. Okazało się, że miał dla mnie jakieś zadanie, tylko czekał aż powiem, że już skończyłem a nie tylko zmiana opisu w GitLabie. No ale to kwestia tego, że z każdym się inaczej pracowało, a PM mi ciągle stał nad głową. Generalnie i tak to następne zadanie jest "nieprojektowe", czyli... reinstalacja jakiegoś laptopa, żebym czasem nie zapomniał jak to cudownie pracować w supporcie. ;)


wtorek, 25 kwietnia 2017

Dzień 33. i 34.

    Połączyłem oba dni w jeden wpis, bo wydaje mi się, że pojedyncze byłby za krótkie, a oba się ze sobą łączą. Tak więc, napisałem konwerter do Excela i przyszła próba na pierwsze uruchomienie. Od razu wyskoczył "zły duch Symfony" i czytam opis błędu. Obiekt nie może być użyty jako string, czyli jesteśmy w domu. Niby, bo zupełnie nie mam pojęcia czemu miałoby się to stać. No to bezczelnie ładuje tam metodę __toSring() z nadzieją, że coś mi wyświetli, ale niestety nic z tego. Szukam dalej, coś zmieniam nie tu gdzie trzeba, więc i błąd się zmienia, ale to wciąż nie to. Mija pewnie z godzina i po małej przerwie wracam do projektu i oto jest! Klasyczna, nazwijmy to literówka, bo już mi się ten błąd zdarzał i zawsze był ciężki do odnalezienia, a jeszcze tutaj była krótka nazwa. Otóż napisałem: $this->$em = $em zamiast $this->em = $em. Jeden mały dolar a taka różnica... Kłopotów to jeszcze nie koniec, bo teraz błąd zamienił się w oczekiwanie na array a otrzymanie obiektu. Znowu grzebię, szukam, sapię. Ekran mam usiany var_dumpami, wszędzie widzę te arraye. Sprawdzam metody w repozytorium i tam też niby zwracaj arraye, więc wtf? Otóż po którymś z kolei die'u i foreachu wreszcie widzę w tych var_dumpach, że owszem mam tablicę, tyle że tablicę obiektów, a metoda oczekuje tablicy tablic. Jeszcze raz zaglądam do repozytorium i widzę swoją ślepotę. Sprawdzam w podobnym pliku konwertera, tylko dla innej kategorii obiektu i tam całość napisana metodami na obiektach, a u mnie wszystkie dane wyciągane są z tablic. Sprawdzam kolejne i znowu wszystko na obiektach, a tylko w tym jednym pliku było na tablicach. Pytam więc autora, czemu ten jeden plik jest wyjatkowy, bo na nim bazowałem swój kod. Odpowiedź jest mi już znana, ale o tym zapomniałem. W tym wyjątkowym przypadku, liczba obiektów była tak duża, że dużo szybciej było wykonywać operacje na tablicach. No to teraz jesteśmy w domu - znaczy mam pół kodu do przepisania. Mógłbym niby dodać nową metodę do repozytorium, ale stwierdziłem, że chcę mieć całość zrobioną metodami obiektowymi, a nie jakieś kawałki. Ta zmiana była w miarę szybka i pewnie po pół godzinie miałem już gotowy arkusz Excela, który wyświetlał dane.
    Dzień później poprawiłem trochę formatowanie niektórych komórek, np. żeby wyciągał tylko datę bez czasu, bo to niepotrzebne oraz wyświetlanie kwot wraz z jednostką "zł".

    I teraz zaczęła się ponownie przygoda pod tytułem na tych samych plikach pracowały 3 osoby, więc masz tu juniorze i ucz się mergowania kodu i rozwiązywania konfliktów. Tym razem poszło mi już raczej lepiej niż ostatnio, a poprawki robiłem bezpośrednio w PHPStormie, w którym i tak muszę to opanować lepiej, a już local history się przydawało. Złożyłem więc całość do kupy u siebie i zacząłem testować. Wszystko wreszcie działało, więc nie musiałem głośno przeklinać i pisać żalów do PM-a, że dostaję zjeb... kod, a jako junior męczę się z tym podwójnie, bo zawsze myślę, że to ja coś zepsułem i tracę czas na szukanie błędów gdzie ich nie ma. Na koniec przypomniałem sobie jeszcze, że kolega z front-endu zgłaszał jakiś błąd w filtrach. Sprawdziłem i działały jak trzeba poza jednym przypadkiem. Wpisanie daty typu "2005-00-00" olewało taką granicę w filtrach, ale nie doszedłem czemu się tak dzieje, chociaż trochę poczytałem. Nie chciało mi się też już mocno zagłebiać pod koniec dnia, a PM powiedział, żebym na razie olał i poszedł do domu. Wystawiłem więc merge requesta i architekt miał wyjątkowo czas, bo zabrał się za niego szybko na prośbę PM-a, także jeszcze mnie do siebie zawołał i omawialiśmy mój kod. Dowiedziałem się, że używanie empty() to zło, bo powoduje mindfucki, ale nie pamiętał czemu. Ja się broniłem, że czytałem na php.net, że to fajne, bo ma w sobie dwa testy. Może kiedyś się dowiem, co z tą funkcją jest nie tak.


czwartek, 20 kwietnia 2017

Dzień 32.

  Rano spróbowałem wykorzystać nowo zmergowany widok i kontroler z front-endu z tym co napisałem, ale przyglądając sie co się tam dzieje, zwróciłem uwagę, że wywoływane są nie te ścieżki co trzeba. Poszedłem do kolegi front-endowca z pytaniem, czy ja dobrze widzę, czy coś nie tak zrobiłem. On mi pokazał, że u niego jest ok i w GitLabie również. No to wracam do siebie i kombinuję z mergem jeszcze raz. Z drugiej strony, do tej pory nie wiem jak mogło mi się coś źle zmergować z tym nowym widokiem, skoro nie miałem wcześniej tego pliku. No nic, nie miałem czasu na sprawdzanie jak do tego doszło, ważne że miałem już z czym pracować. Rozpisałem się dalej ze swoją metodą na usuwanie obiektów i ich powiązań i sprawdziłem czy działa. Raz zachowało się dość dziwnie, więc dodałem metodę persist(), ale później ją pousuwałem i też działało, więc nie mam pojęcia czemu pierwszy raz nie chciało. Może coś w cache-u  było, bo często go muszę czyścić w tym projekcie. Sprawdziłem jeszcze parę razy, czy na pewno dobrze działa mi ta funkcjonalność i wziąłem się za następną. Tym razem było to usuwanie jednego obiektu powiązanego z innymi i przypisywanie go do innego. Już to raz pisałem, więc tylko skopiowałem swój kod do poprawki. O ile wtedy mam wrażenie, że nie do końca wiedziałem co się dzieje, o tyle teraz jakoś w miarę łatwo mi to szło i poprawiłem trochę poprzedni kod. Ot chociażby dzień wcześniej nauczyłem sie poprawnie pisać phpdoca. Napisałem, potestowałem, działało.

  Następnym etapem był eksport wyświetlanych danych do arkusza Excela. Znowu sie wydawało, że można skorzystać z poprzedniej funkcjonalności, ale nie do końca. Przepisałem tylko kawałki kodu i powoli dopasowuję go do tego nad czym pracuje teraz. Jutro będę kończył i okaże się, czy w ogóle sensownie to zrobiłem, bo jak zawsze są jakieś ify do ogarnięcia. :)


Dzień 31.

  Rano, jeszcze przed pracą sprawdziłem maile i czekała mnie miła niespodzianka. Niespodzianka, bo raczej się tego nie spodziewałem (takie trochę masło maślane) i myślałem, że mój wkład w ten kurs będzie za mały według ich wymagań. No ale się udało, więc nauki ciąg dalszy:

Dear Piotr,
Congratulations!
You have been selected as a winner for a full 3-month scholarship to the Android Basics Nanodegree by Google.
Out of more than 10,000 students in the EU Scholarship - Android Development for Beginners course your work and engagement on Slack and in the forums really stood out. We’ve been impressed and we’re excited for you to continue the journey and grow even stronger as an Android app developer!

  Pewnie będzie trochę ciężej, zwłaszcza że już poprzedni etap ledwo skończyłem, bo nagle mi gdzieś znikało 10 h dziennie, no ale może dam radę. :)

  W pracy miałem skończyć poprzedni projekt i poczytać o autoryzacji w Symfony i serwisach. Poczytałem jedno i drugie, ale wciąż nie potrafiłem w tym projekcie przestawić serwisu, z którego miał korzystać kawałek kontrolera do logowania. Zrobiłem w końcu poprawkę w tym co było i obrazek captcha zaczął się wyświetlać. Poszedłem do seniora, że zrobiłem w końcu tak, bo coś nie daję rady z tym przestawieniem serwisu i usłyszałem, że to tylko jedna linijka i prosta zmiana, ale wszystkie moje jednolinijkowe zmiany spełzły na niczym. Dowiedziałem się też, że skoro mam teraz chwilę czasu, to żebym sobie postawił jakiś projekt na boku i poćwiczył serwisy. No chyba, że PM ma dla mnie jakieś nowe zadania. PM jak to usłyszał od razu miał dla mnie nowe zadania, więc na razie nici z nauki serwisów.

  Nowe zadanie polegało na dokończeniu, czegoś co zaczął pisać kolega idący na urlop. Teoretycznie skorzystanie z istniejących funkcjonalności dla nowego widoku. Problem zaczął się robić w momencie, gdy się dowiedziałem, że nowy widok robi kolega od front-endu i w zasadzie nawet nie bardzo wiem jakie dane dostanę, albo co mam zwracać z back-endu. Zacząłem sobie coś tam pisać i wklejać kawałki kodu, które mogą się przydać z założeniem, że z front dostanę tablicę z id-kami, tak jak to było w innych modułach. Kolega w końcu zrobił ten widok i miałem to sobie zmergować ze swoim branchem. To chyba drugi merge w moim życiu, więc musiałem poczytać jak to się robi. Oczywiście wyszło coś nie tak, ale pokombinowałem i jakoś mi się udało pobrać te zmiany. Coś tam jeszcze pogrzebałem i skończył się dzień.


sobota, 15 kwietnia 2017

Dzień 30.

  Rano przyszedł PM spytać o postępy. Powiedziałem, że już wiem co i jak i zaraz się biorę za zmiany oraz że na pewno nie było w tym miejscu wyświetlania obrazka z captchy, ale mogę dorobić, bo widziałem gdzieś kawałek kodu, który to wyświetla. PM na to, że nie, nie, tutaj nie było obrazka i żebym nie dorabiał. Wczoraj inaczej ta rozmowa wyglądała, ale się nie zrozumieliśmy widocznie. Znaczy ja rozumiałem o co pytam. ;)
  Dodałem obsługę dodatkowych pól z odpowiedzi z API, ale stwierdziłem, że w sumie to nie wiem jak ten format docelowy ma wyglądać, bo nikt mi nie powiedział, więc muszę kogoś spytać albo znaleźć. Przyszedł senior, coś poklikał i dodał mi jakąś metodę, którą kojarzył. Mnie się coś nie podobał sposób jak się to wyświetlało (odwrotna kolejność), więc zacząłem kombinować. Godzinę później okazało się, że bez sensu kombinowałem i wróciłem do początkowego kodu.
  I teraz zaczyna się dramat. Oficjalną część zadania zrobiłem, bo teoretycznie miał działać fragment do testowania API i wyświetlać przychodzące odpowiedzi, ale ktoś niesłusznie założył, że to zadziała też w innym miejscu, bo problemem był brak wyświetlającego się obrazka podczas logowania na głównej stronie, a nie gdzieś w tle. Zabrałem się za to. Godzinę później podszedł standardowy pomagacz i narobiliśmy z 6 die'ów w kodzie, żeby sprawdzić co się dzieje. Dotarliśmy co się dzieje i gdzie, ale PM i senior zainteresował się moim rycerzem-wybawcą, że traci czas u mnie, a miał robić co innego. Senior stwierdził, że sam przyjdzie, bo przecież mój rycerz nie zna projektu. Podszedł, coś poklikaliśmy i wydawało mi się, że rozumiem co trzeba zrobić. Parę godzin później znowu tłukłem głową w mur i mina mi zrzedła. Usłyszałem, żeby poczytam o autentykacji w Symfony, bo jest "pojebana" i może wtedy zrozumiem o co chodzi. Poczytałem o serwisach ponownie, o autentykacji, ale jakoś mi się nie poprawiło. Podszedł PM przed swoim wyjściem, pogadaliśmy i powiedział do seniora, żeby do mnie przyszedł jak znajdzie czas, bo mojej minie i głosie widać, że jest mi bardzo smutno. I było, bo znowu miałem impostor syndrome i zastanawiałem się co ja tu robię. Senior w końcu i tak nie podszedł, bo nie miał czasu, a ja sobie dalej czytałem o autentykacji, bo to było jedyne co mi powiedział, gdy do niego podszedłem - miał inną robotę, przeinstalowywał system front-endowcowi. Później zaczęli nas gonić do domu, więc się zebrałem z myślą, że mam dość w Święta pewnie nie zajrzę do niczego związanego z kodowaniem i będę się odmóżdżał przy jakichś gierkach, bo nigdzie nie wyjeżdżam na święta, bo muszę je spędzić na diecie lekkostrawnej i oczyszczaniu, bo pierwszego dnia po świętach idę na badania endoskopowe. Także wesołego Alleluja tym którzy mogą jeść w święta. ;)