Anks @ Pilot Bootcamp – day 6

O ile przy samochodach było prosto (bo jedyne paramsy przekazywane przy tworzeniu to model i numer rejestracyjny, a dane ownera są brane z aktualnego usera), to już w przypadku parkingów czy place rentów zrobiło się skomplikowanie. W place rentach jest tak, że znajdują się one w routesach parkingowych (a więc jest coś takiego jak: /parkings/1/place_rents/new), co robi dodatkową magię w formularzach i samych kontrolerach, co do tej pory jest dla mnie trudne do ogarnięcia.

I to jedyna rzecz, którą sprawia mi dużo problemów. Będę musiała poczytać więcej.

Dzisiaj zaczęłam w końcu testy integracyjne, ale żeby nie było zbyt prosto, to nie ma Rspeca, tylko defaultowy Minitest, nie ma faktorek tylko seedy w bazie i reseedowanie bazy po każdym teście (czyli to, co będę robić po powrocie z urlopu :D). Napisanie tego to pikuś, największy problem przysporzył mi niespodziewanie js i fakt, że testy lecą w losowej kolejności. I tak, jeśli test z usuwaniem obiektu z bazy poleci pierwsze, to później miałam problem z pokazywaniem widoku konkretnego parkingu. A wszystko dlatego, że przeszkadzało mi, że w headlessowym teście na usuwanie obiektu, nie pojawia się popup z potwierdzeniem usunięcia. Z godzina na to zeszła, ale już jest git. Teraz ciąg dalszy nadrabiania, żeby być tylko jeden dzień w plecy 🙂

A, i moją appkę można już oglądać tutaj: bootcamp8-matisnape.herokuapp.com

Anks @ Pilot Bootcamp – day 5

Piątek to dzień walki z widokami dla poszczególnych akcji – tworzenia, edytowania i usuwania oraz wyświetlania wszystkich obiektów klasy dla konkretnego usera i pojedynczych. Najwięcej zachodu było z partialami dla błędów i komunikatów związanych z udaną lub nieudaną akcją oraz błędami walidacji. Najprostsze w sumie było stworzenie seedów. Ale to były dopiero zadania z czwartku.

Piątkowy hardkor to kontrolery do poszczególnych klas. Dowiedziałam się tutaj o zagnieżdżaniu paramsów oraz o zabezpieczaniu paramsów przed manipulacjami w requestach.

 

 

Anks @ Pilot Bootcamp – day 4

Większość dzisiejszego dnia zajęło mi pisanie kolejnych testów do walidacji modeli oraz pisanie migracji.

Migracje przysporzyły mi trochę mindfucka – a konkretnie relacja 1 do 1 pomiędzy adresami a parkingami i utworzenie odpowiednich kluczy. Problem polegał na tym, że się zamotałam, gdzie powinien być klucz obcy i w pewnym momencie miałam klucze linkujące do siebie nawzajem w obu modelach będących ze sobą w relacji. Dwójka mentorów stwierdziła, że nie powinno to przeszkadzać, ale przyszedł senior i rzekł, że jednak robi bubu. Po usunięciu nadmiarowego klucza stała się magia : )

Dalsze testy to już pikuś – najtrudniejszy z nich dotyczył walidacji kodu pocztowego. Musiałam do walidacji tegoż stworzyć regexpa, ale to już umiem po edX i dzięki Rubularowi : )

W końcu, koło 15 zabrałam się za kolejne zadania – wchodzimy już w kontrolery i widoki, coś, co dla mnie zawsze było czarną magią. Ale z pomocą guidesów i materiałów z internalowych warsztatów w netguru – udało się stworzyć stronę startową z wszystkimi parkingami (tutaj zapoznałam się z zagadnieniem n+1 zapytań), potem stronę konkretnego parkingu. Żeby łatwiej mi się tam wszystko oglądało, stworzyłam sobie nawet seedy : )

Zabawa zaczęła się przy formularzu do tworzenia nowych parkingów. Trochę wyskoczyłam naprzód (bo nie doczytałam zadania do końca :trollface: ) i stworzyłam formularz z wszystkimi polami – bo przy tworzeniu parkingu trzeba by tworzyć także obiekt klasy adresu i jeszcze ownera, a tu z kolei pojawia się problem nested attributes i strong parameters. To więc zostawiłam sobie już na później, natomiast chciałam chociaż ogarnąć do końca to jedno zadanie i napisać wyświetlanie błędów walidacji przy próbie wysłania formularza.

Po kilku godzinach (dopiero koło 22 się poddałam) poległam i zadowoliłam się wyświetlaniem listy wszystkich błędów bez żadnego formatowania na samej górze formularza (zdefiniowane w kontrolerze ;/). Według guidesów zaś powinnam móc stworzyć sobie taką listę z ładnym formatowaniem przez zdefiniowanie w widoku + jeszcze wyświetlać błędy przy odpowiednich polach, ale za cholerę nie chciało się, no ;/ Próbowałam nawet jakiegoś gema helpera ze starszych guidesów, ale też dupa. Nawet patrzyłam w inne projekty, ale tam właściwie w ogóle nie widziałam żadnych definicji błędów 😀

Doszłam więc do wniosku, że dzisiaj już nic nie wymyślę (chociaż spać mi się nie chce, bo nie daje mi to spokoju : |) i zajmę się tym jutro.

Trzeba przyznać, że dzisiaj poziom ekscytacji znacznie mi skoczył – cieszę się jak dziecko, jak w końcu coś mi się pokaże i nie wywali mi błędu – magia : D

Anks @ Pilot Bootcamp – day 3

Dzisiaj wiele do dodania nie będę miała, gdyż większość dnia rozkminiałam pozostałe zadania z dnia poprzedniego, czyli testy :B Strasznie próbowałam ogarnąć, dlaczego coś działa tak, a nie inaczej. Udało mi się za to chyba mniej więcej debugować lepiej w konsoli, że czasami trzeba zrobić dodatkowe warunki typu require. Oraz najważniejsze, po którym mi się nieco źle zrobiło – mianowicie nie miałam na jednym parametrze settera, w związku z czym nie mogłam nadpisywać tego parametru w teście – w celu obejścia tego poznałam hacka, metodę instance_variable_set. A dlaczego źle? Bo zamiast dodać settera w klasie (którego nie mogłabym, bo inaczej nie pasowałoby do klucza testów :P), musiałam tak napisać test, żeby się zgadzało 😛

Pod koniec dnia dopiero zajęłam się tematem dzisiejszym, czy generowaniem nowej appki railsowej, modeli i migracji. Zrozumiałam migracje i cieszę się, że można je generować, a nie pisać totalnie od zera.

Dzień zakończyłam na pisaniu asocjacji między modelami – jutro będę je testować. Powinno pójść gładko, zważywszy, że używam tego w konsoli na stagingach przy sprawdzaniu testów. Z drugiej strony, testy do metod też miały pójść gładko, a jednak zajęły mi wuchtę czasu 😀

Anks @ Pilot Bootcamp – day 2

Dzisiaj już nieco luźniej, chociaż znowu perypetie z jedzonkiem – tym razem przyjechało bezpośrednio do biura. Może tak nawet będzie lepiej.

Dalszy ciąg kodzenia boli trochę mniej, aczkolwiek dzisiaj rano miałam lekki opad entuzjazmu – podskoczył ponownie, gdy doszło pisanie unit testów ;D Na początku jednakowoż znowu zaliczyłam mindfuck w stylu “Yyyyy, od czego tu mam zacząć?”, ale parę zapytań do google i odwołanie do prezki uczucie to zniwelowało.

Ale najpierw trzeba było dokończyć  albo fixować zadanka z dnia poprzedniego – czyli znowu sortowanie Arrayów i refaktorowanie. Fun fact: napisałam źle metodę i okazało się, że mimo to testy przechodzą – bo nie było testu sprawdzającego tę konkretną metodę xD

Poza tym jeszcze wyszło, że hook do rzucania błędem, jeśli spróbuję puścić commita bez numeru issue, nie działa w przypadku commitowania za pomocą appki Githuba. Spodziewałam się 😛

Przez commitowanie tym sposobem zepsułam sobie też merge’a brancha do mastera – trzeba było poprawiać commit message, żeby ładnie się pod issue podpięło. Dzięki temu przy okazji dowiedziałam się, w jaki sposób wygenerować sobie tymczasowe hasło na GH, jeśli mam aktywne 2-Factor-Authorization oraz umiem już wychodzić z Vima xD

Testy w Miniteście opanowane względnie. Znalazłam nawet fajny artykuł, który pozwala na upodobnienie składni testów do Rspeca dzięki Minitestowemu DSLowi – może się pobawię przy okazji, jak zostanie mi czas. Teraz jak na to patrzę to sobie tak myślę, że faktorki w projekcie nie są aż takie niezbędne – mogę przecież stworzyć nową instancję klasy.
Dowiedziałam się też, jak sobie dobrze debugować metody za pomocą irb oraz jak użyć binding.pry, jeśli nie ma gema pry (bo nie ma gemfile’a). Z pewnością muszę się natomiast przyjrzeć metodom do klas Dir i File – ciągle są dla mnie nieco nieoczywiste.

Z moich sukcesów testowych: udało mi się napisać test do metody bez użycia tej metody xD Na usprawiedliwienie powiem, że było to już po 10h kodzenia ;]

I to tyle na dziś: jutro (po skończeniu zadań dzisiejszych) – zaczynamy railsy!

Anks @ Pilot Bootcamp – day 1

Pół nocy nie spałam z ekscytacji przed Bootcampem i nerwów, czy aby nie zaśpię i czy będę miała co jeść. Ale wstałam, zjadłam i pojechałam.
Pod Pilotem wylądowałam przed 9, bo zbiórka rowerzystów. Postałam sobie pod biurem w oczekiwaniu, aż pojawi się drugi rowerzysta bootcampowicz, ale jak się okazało, stwierdził, że jednak ma za blisko 😛 W efekcie, byłam spóźniona i trochę speszona, bo nie bardzo ogarniałam, co się dzieje.

/Dygresja: w garażu mają fajne, zamykane na kod, rowerownie, ale ze śmiesznymi wieszakami na rowery – mój rower jest na nie za mały i odwraca się do góry nogami xD W końcu przyczepiłam bokiem, bo inaczej się nie dało/

Zaczęliśmy od prezki, z której jednak wiele nie widziałam, bo była bardzo drobna, a ja ślepa jak kura jestem. Ale zaczęły się zadanka!

Najpierw Try Ruby, a potem Try Git – myślę sobie, spoko. Ale potem już rzut na głęboką wodę 🙂 Zadania niezbyt precyzyjnie opisane (jak na moje QA-we oko), ale dalim radę. Ogólnie konstrukcja zagadnień bardzo podobna do tego, co robiłam na edX jakiś czas temu – mam wgrane testy do zadań i muszę je rozwiązywać aż testy będą przechodzić. A potem jeszcze mogę dostać rejecta, jeśli da się coś ładnie zrefaktorować.

Nie da się ukryć, że mój skromny background w postaci paru kursów plus oglądanie kodu na co dzień się przydaje – z tego, co obserwowałam, nie byłam w ogonie, ale jeden kolega miał niejaki problem bez wstępu merytorycznego. Z drugiej strony, Rails Girls Warsaw też polegają na hands-on coding i bez wstępów merytorycznych laski dają sobie radę, choć może tam jest to bardziej łopatologiczne.

Niemniej, jaram się – przez ponad 9h z wypiekami na twarzy googlałam możliwe rozwiązania jak nigdy 😉 Nie udało mi się co prawda zrobić wszystkiego, bo jestem za połową, ale i tak jest zajebiście!

Anks @ Pilot Bootcamp – day 0

Od wczoraj jestem we Wrocławiu i spędzę tutaj najbliższe 2 tygodnie na kodzeniu. To pierwszy mój wyjazd szkoleniowy na tak długo, także logistyka wymagała nieco zachodu.

Po pierwsze, przyjechałam z Błażejem, w związku z czym trochę kosztowo się zrobiło lżej – wynajmowanie jedynki w hostelu to jednak nie jest tania sprawa 🙂

Po drugie, przyjechaliśmy z rowerami 😀 Ja głównie z myślą o dojeżdżaniu na warsztaty, Błażej chce obskoczyć okoliczne lasy w poszukiwaniu górek. Być może uda się w weekend wyskoczyć do legendarnej Sobótki, o ile nie będzie padać.
Rowery trochę mnie stresowały, bo:
– trzeba dojechać na nich na dworzec, a potem z dworca na miejsce z dużymi plecakami (oj, bałam się jechać z wielkim plecakiem na malutkiej szosce, ale grunt, że bez sprzętu foto, który waży tonę)
– trzeba kupić bilety na rower w kasie, bo przez internet nie można (a właściwie nie można było, bo od paru dni już jest to możliwe :)) i modlić się, żeby wieszaki rowerowe nie były na drugim końcu pociągu i jeszcze dało się do nich przypiąć rowery sensownie, żeby ich nikt nie zajumał (udało się, uff)
– załatwić, żeby w hostelu można było trzymać rowery w pokoju (pani właścicielka straszyła, że nie będzie miejsca, ale jest spoko)
– załatwić przechowanie na czas warsztatów (jest rowerownia, jest impreza)

Po trzecie, żarcie. Jako że jestem na diecie oraz jestem turbo leniwa, doszłam do wniosku, że zamówienie cateringu dietetycznego (czyli pudełka) będzie świetnym pomysłem. Cenowo wychodzi porównywalnie (a nawet taniej) od jedzenia na mieście, a nie trzeba marnować czasu na jego upolowanie – profit!
Niestety, tu się zrobiło problematycznie, bo żaden catering wrocławski z tych znalezionych przeze mnie nie oferuje dowozu wieczornego, a rano mam raptem 45 minutowy przedział czasowy na dostawę – między otwartą (dzięki uprzejmości właścicielki) od 7:30 recepcją, a moim wyjściem o 8:15 (w sumie to wychodzę o 8:30, ale kiedyś muszę zjeść). Specjalnie pytałam po profilach fejsbukowych, jak tam z gwarantowaniem czasu dowozu i Bodychief odpisał, że “no tak jak pani sobie określi w zamówieniu”. No to żem wzięła. No i dzień przed dowozem kurier napisał, czy może przywieźć o 6:30, na co ja, że no kurczę, nie po to wybieram godziny, żeby wstawać w środku nocy ;/ No ale dobra, niech będzie, przeżyję. Po czym jakąś godzinę później dostałam kolejnego smsa, że da radę. Dzisiaj się dowiedziałam, że dzwonił do hostelu i się pytał, jak z tą recepcją, a pani właścicielka powiedziała, że nie ma opcji 😉 Polecam serdecznie Pokoje Gościnne STOP.
Anyway, still mega props za fakt, że kurier się odzywa wcześniej(!!), i to smsowo (!!), a nie telefonicznie. Na pewno im dam w feedbacku 🙂

No i tak to – tyle rzeczy mogło nie wyjść, na razie wyszło wszystko 🙂