Anks @ Pilot Bootcamp – Day 10

Dzisiejsze zajęcia rozpoczęły się 2 godziny później, o 11 – wykorzystałam to na obskoczenie paru ingressowych misji, bo do badża już niedaleko.

Nowych tasków nie było, bo mieliśmy wciąż do dokończenia sporo z poprzednich dni. Było już czuć, że jest luz, bo najgorsze za nami, a ludzie po wczoraj skacowani 😛

Pobawiłam się dalej Boostrapem, zrobiłam konwersję paru stron na hamla, dodałam I18n i translacje. Z tymi ostatnimi mocno się męczyłam, bo wywaliły mi testy, w adresach było podwójnie “en/en”, no i przestał mi działać switcher języków. Ale się udało 😉 Na sam koniec doszła jeszcze paginacja i podpięcie pod New Relica. Z dużych rzeczy została mi jeszcze autoryzacja Facebooka, wysyłanie maili po rejestracji i jeszcze wrzucanie obrazków na S3. Ale najpierw chcę doprowadzić do porządku testy (pozamieniać stringi na translacje), dokończyć tłumaczenia i przekonwertować widoki na hamla.

Aktualnie appka prezentuje się tak: http://bootcamp8-matisnape.herokuapp.com/

W tym miejscu (chociaż czyniłam to też osobiście) chciałam podziękować mentorom i organizatorom za te zajebiste 2 tygodnie roboty. Było ekstra i mam nadzieję, że w przyszłości nie zapomnę tego, czego się nauczyłam i będę mogła się odwdzięczyć mentorowaniem na kolejnych edycjach. Ale zanim to nastąpi, chcę jeszcze nauczyć się paru rzeczy, poanalizować to, co kodziłam, na spokojnie. No i chciałabym jakoś zgrabnie przejść do robienia devowych rzeczy, pokodzić jakieś swoje rzeczki.

Ogólnie super inicjatywa i świetne jest to, że była to praca indywidualna, a nie w grupach.

Z ciekawostek mojego projektu:

  • zakodziłam 433 commitów
  • najwięcej commitowałam w okolicach godz. 16
  • z 93 issues, mam zamkniętych 75 i kolejnych kilka czeka na sprawdzenie
  • 12 mentorów klonowało moje repo do sprawdzania
  • dodałam sobie hooka na Slacka i teraz przychodzą mi notyfikacje o buildach i deployach <3

Anks @ Pilot Bootcamp – Day 9

W końcu zaczęłam kumać. Po logowaniu to wszystko już proste. Napisałam praktycznie samodzielnie rejestrację użytkownika z hashowaniem hasła – po Bootcampie dodam jeszcze edytowanie konta i usuwanie.

Dodałam też redirect po zalogowaniu do poprzedniej strony (czyli tej, z której zostało logowanie wywołane).

Następna rzecz to ładne URLe dla samochodów i randomowe dla place rentów – przy tym ostatnim wjechała migracja do bazy danych – ogarnęłam z pomocą blogasków i stack overflowów. Jak już będę haxxorem, to też będę pisać takiego blogaska, żeby pomagać takim początkującym userom jak ja teraz.

No a poza tym – zaczęliśmy bawić się z Bootstrapem, więc aktualnie appka wygląda już nieco ładniej :) Pokazałam ją już QA-om to znaleźli parę bugów, trolle jedne 😛 Przy okazji dowiedziałam się, że na heroku nie miałam ustawionego rake’a na migracje, w związku z czym logowanie i rejestracja mi nie działały.

Na koniec dnia mieliśmy prezki potencjalnych pracodawców (to w sumie fajne uczucie, że niewiele nas dzieli od tego, żeby zostać junior devem), podziękowania dla wszystkich mentorów i niezastąpionej Emilii, która ogarnęła cały event i celebracja piwem.

 

Anks @ Pilot Bootcamp – day 8

Dzisiaj drugi dzień niekumania zbyt wiele. Sesje i zrobienie logowania jest dla mnie wciąż nie do końca oczywiste, chociaż rozumiem schemat działania – cały czas mam problem z określaniem dostępności parametrów i ich przekazywaniem. Później już było nieco lepiej. No ale podobno i tak tego nikt nie robi od zera, tylko używa Devise’a ;D

A jak sobie zaczęłam to analizować wieczorem (pisząc testy, a jak), to tak doszłam do wniosku, że przez te dwa tygodnie przerobię zakres całego Hartla. Oczywiście, żeby zakumać wszyściuteńko, planuję po powrocie przerobić to raz jeszcze plus ewentualnie zrobić Odin Project.

Tym niemniej, prawda jest taka, że gdyby nie Bootcamp, nie miałabym szans na ogarnięcie Railsów poświęcając temu 1-2h dziennie. Nie miałoby kiedy się to utrwalić, nie wspominając o tym, że bez niego nie poznałabym haków na skuteczne debuggowanie,co mega pomaga.

A, jestem też zajebiście wdzięczna ludziom, którzy publikują swoje rozwiązania problemów online na swoich blogaskach. Nic bym nie zrobiła bez nich 😀

No więc, powolutku lecimy dalej : )

Anks @Pilot Bootcamp 7

Już rozumiem coraz mniej i robię sobie coraz większe zaległości :(

Udało mi się raptem dodać dodatkową kolumnę do bazy danych do trzymania ceny place renta, obliczanej na podstawie czasu place renta i cen za godzinę/dzień, do tego testy i jeszcze zamykanie otwartych place rentów, kiedy usuwa się parking.

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!