Muszę Ci się do czegoś przyznać. Jeszcze niedawno nie byłem w stanie absolutnie nic zrobić. Głowę miałem od zawsze pełną pomysłów, kreatywny byłem już jako mały dzieciak (za co chwała moim rodzicom, którzy tej kreatywności nie gasili). Tysiąca planów nie byłem jednak w stanie zrealizować. I nie chodzi o ich wielkość – to prawda, nie lubiłem nigdy podejmować mało ambitnych celów. Gdybym jednak realnie choć przybliżał się do nich, nie byłbym tak bardzo sfrustrowany. Nie dość, że brałem się za rzeczy duże, to jeszcze miałem ich mnóstwo.
Efekt? To wszystko przytłaczało mnie tak bardzo, że często nie robiłem nic. Kiedy zaś byłem już przyparty do muru i musiałem działać, żadnej z tych rzeczy nie robiłem dobrze, co frustrowało mnie jeszcze mocniej, tym bardziej, że otoczenie miało do mnie rosnące pretensje. Trzeba dodać w tym miejscu – słuszne pretensje.
Brzmi choć trochę znajomo? To czytaj dalej, bo uporałem się z tym. I ty też możesz;-)
Postanowiłem w końcu, że czas z tym skończyć. Czas skończyć z bylejakością i wiecznym marzycielstwem. Dzięki radom mądrzejszych oraz swoim obserwacjom zdałem sobie sprawę, że muszę pogodzić ogień z wodą. Dwoma pozornie wykluczającymi się rzeczami było jednoznaczne, kategoryczne zerwanie ze starym stylem życia, oraz świadomość, że aby cokolwiek prawdziwego zbudować, potrzebuję małych, ale systematycznych kroków, oraz bezlitosnej listy priorytetów – przynajmniej połowę rzeczy które robiłem musiałem ze swojego życia wyrzucić, zaś reszcie przydzielić priorytety.
Tylko praca długodystansowa może zbudować coś trwałego i prawdziwego.
Od kiedy pamiętam gryzło mnie to, że muszę robić rzeczy, które nie prowadzą bezpośrednio do moich wielkich celów życiowych, przez co nie mogłem realizować właśnie tego o czym marzyłem. Od zawsze również drażniło mnie to, że różne rzeczy nie są ze sobą powiązane. Przecież czułem bardzo wyraźnie powołanie w przynajmniej kilku różnych dziedzinach! Często więc było tak, że zmieniałem rzeczy, którymi się zajmowałem. Gdy po jakimś czasie wracałem do nich, nie miałem pojęcia na jakim etapie rozwoju w danej rzeczy jestem. Mogłem coś robić, ale ile poświęciłem na to czasu w ciągu ostatnich 3 miesięcy? A przecież doskonale wiedziałem, że żeby coś osiągnąć, żeby być w czymś dobry, trzeba włożyć w to dużo pracy. Wszystko to – ta nieświadomość tego jaką drogę przybyłem – było tak frustrujące, że zabijało moje dalsze działania.
Postanowiłem zerwać z tym raz na zawsze. Tak bez żadnych kompromisów. Wiedziałem, że potrzebuję czegoś, co pomoże mi w regularnej pracy, oraz pozwoli mi w każdym momencie spojrzeć na to jaką drogę przeszedłem. Rozpocząłem pisanie aplikacji, która pomoże mi kompletnie zmienić mój styl życia. Bardzo szybko napisałem prototyp, który pokazałem kilku znajomym, a następnie rozpocząłem fazę alfa.
Mimo, że od początku dużo się zmieniło – nie tworzę jej sam, w nasz projekt zaangażowane jest więcej osób, a z Warthog Timera nie korzystam już tylko ja – aplikacja nie zmieniła swojej misji.
Warthog Timer pomaga w świadomym i zorganizowanym rozwoju umiejętności
Jeśli czytasz IT-Blog Wolnego Człowieka, to wiesz, jak bardzo istotne jest dla mnie długoterminowe działanie. Jeśli brałeś udział w #Wyzwaniu30Dni to doskonale wiesz, że dużo lepiej pracować każdego dnia 15 minut przez miesiąc, niż zrobić jednorazowy zryw (i zwykle się poddać;-)). Właśnie takiemu podejściu sprzyja Warthog Timer – jesteśmy biegaczami długodystansowymi. Nieraz upadamy, ale wolimy zacisnąć zęby i ruszyć dalej.
Korzystanie z aplikacji jest banalnie proste i streszcza się w 3 krokach.
W Warthogu rozwijamy swoje umiejętności – musimy więc określić umiejętność. Na przykład rysowanie.
Druga rzecz, to prefab. Od słowa prefabrykat. Strasznie trudne słowo? Strasznie. Na szczęści proste działanie – prefaby to rzeczy, które robisz, żeby rozwijać umiejętność. Na przykład „Portret Jana III Sobieskiego”. Chodzi o to, żeby to było coś większego – rzecz, która zajmie Ci na przykład kilka tygodni lub miesięcy.
Stworzenie pierwszego zestawu umiejętności i prefabu to około… 30 sekund pracy
Następną rzeczą… nie, czekaj – nie ma następnej rzeczy. Po prostu określasz jaką chcesz robić umiejętność, a potem jaką konkretnie rzecz robisz żeby ją rozwinąć (prefab). Tyle! Każda umiejętność może być połączona z kilkoma prefabami i na odwrót, ale tym sobie nie zawracaj głowy.
Przyszedł czas na konkretną robotę. Kiedy zaczniesz coś robić (na przykład rysować portret Jana III Sobieskiego), włącz licznik czasu. Kiedy skończysz – zatrzymaj. Wow, skomplikowane.
Loguj czas zawsze, kiedy pracujesz nad danym prefabem
Pamiętaj, że jeśli zapomnisz włączyć timera, możesz potem zedytować jego czas w tym samym okienku, tylko na dole;-)
Po każdej pracy przychodzi moment, żeby zobaczyć jak Ci poszło. W tym celu dostajesz odpowiednie statystyki ze swojej aktywności. Po prostu loguj swój czas w Warthogu i patrz, jak udaje Ci się coraz większą część swojego życia poświęcać na rzeczy istotne, które Cię rozwijają;-) Statystyki dostępne są w zakładce „statystyki” (co ty?!), oraz na panelu głównym – tam możesz na bieżąco monitorować swój tydzień.
Na panelu głównym możesz monitorować swój bieżący tydzień
Warthog to także miejsce, gdzie zaplanujesz swoją robotę. Możesz stworzyć listę rzeczy do zrobienia w danym dniu, a potem po prostu je sobie odznaczać. Możesz oczywiście dodać nowe listy – po prostu porządnie zaplanuj co masz do zrobienia, bo to Ty jesteś panem swojego życia.
Dzisiaj bardzo chcę Cię zaprosić do naszego grona. Warthog Timer przez cały czas dostępny był dla pewnej grupy osób (między innymi dla każdego, kto zdecydował się wziąć udział w #Wyzwaniu30Dni). Nadszedł czas, w którym jesteśmy już gotowi, aby się otworzyć – razem stwórzmy społeczność Warthogowców, którzy charakteryzują się potrzebą pracy nad sobą, oraz chęcią pomocy sobie nawzajem.
Rozpoczynamy testy beta – to znaczy, że w tym momencie absolutnie WSZYSTKO jest darmowe, a My – twórcy – jesteśmy niesamowicie otwarci na wszelkie uwagi. Nie ważne jak je zgłosisz – czy na Fanpagu Facebookowym Warthog Timera, czy przez odpowiedni formularz na stronie – razem stwórzmy miejsce, w którym chcemy się rozwijać. Tak tak, oczywiście kiedy już przyjdzie do wersji komercyjnej – testerzy z wersji beta będą sowicie wynagrodzeni; – )
Oznacza to niestety również, że przez jakiś czas będziesz się natykał na różne błędy, których nie wykryliśmy sami. Nie denerwuj się, ale nie machaj również na to ręką – zgłoś nam błąd, napisz gdzie Ci się to przytrafiło, będziemy Ci bardzo wdzięczni.
Ja nazywam się Marek Czuma, a to jest IT-Blog Wolnego Człowieka
Piszę do Ciebie prosto z Łodzi
Jeśli spodobał Ci się pomysł Warthog timera – po prostu wejdź tutaj, zarejestruj się, a potem działaj. Możesz też polubić nasz Fanpage i utrzymywać stały kontakt ze wszystkimi Warthogowcami;-)
6 dzielnica, Maro opowiada o tym gdzie trzymać logikę;-)
Istotą wszystkiego i pytaniem, które spowodowało powstanie prezentacji był dylemat – gdzie w aplikacjach webowych umieszczać logikę? No to do dzieła!
(Prezentacja w PDF została umieszczona w materiałach, czyli tutaj).
Jeśli tworzysz już aplikacje webowe, to pewnie wiesz co to jest MVC. Jeśli tak rzeczywiście jest, śmiało ruszaj do punktu następnego. Jeśli jednak nie jest to dla Ciebie jasne – pozwól, że w prostych, żołnierskich słowach wyjaśnię „z czym to się je”.
Model View Controller – wzorzec architektoniczny, służący do organizowania struktury aplikacji posiadających graficzne interfejsy użytkownika
Tyle jeśli chodzi o oficjalną definicję. Jeśli chodzi o praktykę, w skrócie MVC to sposób dzielenia kodu, który tworzysz między 3 warstwy – Widok (czyli View – plik, który w efekcie daje Ci stronę, którą możesz oglądać) z jednej strony. Przeciwny biegun zajmuje Model – czyli pewna reprezentacja tabeli w bazie danych, same „bebechy” aplikacji (np. klasa, która reprezentuje tabelę – w niej określamy relację z innymi tabelami, czy walidacje na konkretne pola). Łączy je Kontroler (controller), który dokonuje niezbędnych operacji (jak na przykład znalezienie jakiegoś obiektu i przekazanie go do widoku).
MVC (Model-View-controller) przedstawione na prostym schemacie
Po co taki podział? Daje nam bardzo wiele korzyści. Przede wszystkim porządkuje, wprowadza wyższy poziom bezpieczeństwa, oraz sprawia, że w kodzie można się połapać (kiedy wiesz czego gdzie szukać, rozwijać aplikację jest dużo prościej).
Podstawowe pytanie brzmi – w której z tych warstw (Modelu, Kontrolerze, czy Widoku) umieścić logikę?
Chciałbym, żebyś pomyślał nad rozwojem aplikacji, w której stosujesz logikę w modelu. Zasymulujmy jak może się rozwijać kod (na szczegóły implementacyjne nie zwracaj uwagi póki co).
Na początku model „z logiką” wygląda fajnie.
Model z jedną metodą wygląda dobrze
Po niedługim czasie, zaczynasz widzieć jak się rozrasta…
Model z kilkoma metodami powinien zapalić ostrzegawczą lampkę
No tak, to jest ten moment, do którego niewątpliwie musisz dojść. A jeśli tak się stanie, wtedy albo przyjdzie Ci zrobić refactor kodu, albo brnąć dalej w takie coś. Obie opcje są niezbyt przyjemne.
Tak więc – jak widzisz – trzymanie logiki całej aplikacji w modelach, to nie jest najlepszy pomysł. Na szczęście z odsieczą przychodzą…
Jeśli jesteś początkującym programistą, to musisz wiedzieć, że serwisy to najzwyklejsze w świecie klasy. W Ruby on Rails umieszczamy je w katalogu app/services (za pierwszym razem musisz katalog services stworzyć). To tam wrzucamy większość logiki, odciążając w ten sposób model, oraz kontroler. Ot co, cały sens serwisów streszczony w kilku słowach. Spójrzmy więc i zapamiętajmy…
Serwis tworzymy, jeśli chcemy stworzyć jakąś część logiki, odciążając w ten sposób model i kontroler. Serwis umieszczamy w folderze app/services.
Oczywiście otwartą sprawą zostaje to jak technicznie tworzyć serwisy. Ja zaprezentuję tutaj dwa sposoby pisania ich, nie określam jednak który jest lepszy – wszystko zależy od Ciebie, twoich upodobań i konkretnej sytuacji.
Ta wspaniała nazwa jest oczywiście mojego autorstwa i nie radzę się do niej przywiązywać.
Ten sposób tworzenia serwisów jest bardzo prosty i intuicyjny, powiedziałbym nawet że bardzo naturalny. Swoisty wzór na niego przedstawiam poniżej.
class SomethingService def initialize(param1, param2) @param1 = param1 @param2 = param2 end def method_first # Logic... end def method_second # Logic... end end
Jak widać sprawa ma się bardzo prosto, dla nieobeznanych wyjaśnienia wymaga jedynie metoda initialize. To ona będzie wywołana w momencie, w którym tworzymy obiekt klasy SomethingService (taki konstruktor w Ruby). Wewnątrz można stworzyć zmienne z „@” – wtedy dostępne będą w całej klasie, we wszystkich metodach.
Poniżej przedstawiam użycie takiego serwisu w dowolnym miejscu w kodzie.
service_object = SomethingService.new(1, "nazwa") first_thing = service_object.method_first second_thing = service_object.method_second
W pierwszej linijce stworzyłem obiekt ServiceName – wtedy automatycznie została wywołana metoda initialize. Następne linijki to wywołanie konkretnych metod.
Zwracam uwagę, że nazwa każdego z serwisów powinna się kończyć słówkiem „Service” (np. SkillService, StatsService itd), zaś nazwa pliku powinna kończyś się „_service” (np. skill_service, stats_service).
Nazywany potocznie „ten z call’em”. Różni się od pierwszego tym, że cały serwis pełni jedną funkcję. Jeśli nie jest to jeszcze jasne, spójrz na wzór na serwis z call’em.
class DoSomething def initialize(param1, param2) @param1 = param1 @param2 = param2 end def call # Some logic... end private def method_first # Logic... end def method_second # Logic... end end
Tutaj sprawa ma się tak, że tylko metoda call jest publiczna i tylko ją wywołujemy. Wszystkie inne metody są prywatne i służą jej, jeśli oczywiście zachodzi taka potrzeba. W przeciwieństwie do poprzedniego serwisu nie daje nam tak różnorakich możliwości, pozostaje za to bardziej klarowny i przejrzysty.
A oto jak wywołujemy serwis jak ten:
some_thing = DoSomething.new(1, "nazwa").call
Prawda, że proste? No bardzo proste. Tutaj również zwracam uwagę na nazewnictwo – ponieważ tutaj serwis odpowiada za jedną rzecz, nie musi kończyć się dopiskami „service” – niemniej pozostawiam tą kwestię twojej wygodzie.
Oczywiście do zrozumienia przyda się przykład. Posłużę się moją aplikacją, która wspiera usystematyzowane rozwijanie umiejętności. Sprawa jest niezwykle prosta – gdy zaczynamy pracować nad jakąś rzeczą (nazwaną w aplikacji Prefabem) – klikamy przycisk start. Kiedy kończymy – stop. W tym momencie tworzy nam się log_time. Chcemy wyciągnąć informacje o tym ile pracowaliśmy nad daną umiejętnością (prefab może realizować kilka umiejętności) w określonym okresie czasu, oraz z konkretnym wykresem dzień-czas. W efekcie będzie to wyglądało mniej więcej tak jak na screenie poniżej.
Warthog – statystyki umiejętności
W tym celu musimy wykonać cała masę operacji (wyciągnąć logtime’y, policzyć z nich czas, przyporządkować do dni, policzyć czas ogólnie, zamienić czas na konkretną datę… i kilka innych). Do tego stworzymy serwis SkillsStatsService – to będzie „serwis jako zbiór metod”. Ponieważ jednak w kontrolerze potrzebujemy dosłownie kilku danych, do zwrócenia ich użyjemy SkillsDataSummaryService – serwis ten będzie typowym serwisem „z call”. Będzie wykorzystywał SkillsStatsService.
module DirectData class SkillsStatsService def initialize(skill_id) @skill = Skill.find(skill_id) @generals = DirectData::GeneralStatsService.new(@skill.user.id) end def log_times_in_period(from, to) LogTime.where(prefab_id: @skill.prefabs.select(:id)).where('date_start >= ? AND date_start <=? ', from, to) end def log_times_in_general LogTime.where(prefab_id: @skill.prefabs.select(:id)) end # I inne metody... end
module DirectData class SkillsDataSummaryService def initialize(skill_id, from, to) @skill = Skill.find(skill_id) @from = from @to = to @skills_stats = DirectData::SkillsStatsService.new(@skill.id) @generals = DirectData::GeneralStatsService.new(@skill.user.id) end def call data = {} data[:time_jointly] = @generals.seconds_to_units(@skills_stats.time_in_period(@from, @to)) data[:time_per_day] = @skills_stats.time_in_period_per_day(@from, @to) data[:skill_name] = @skill.name data end end end
Dzięki połączeniu tych dwóch serwisów, bardzo ładnie możemy przekazać do kontrolera tylko niezbędne dane.
class SkillStatsController < ApplicationController def index if current_user.log_times.any? @skills = current_user.skills.pluck(:name) @range = params[:from].nil? ? { from: nil, to: nil} : { from: params[:from].to_date, to: params[:to].to_date } @skill = find_skill(params[:skill_name]) @data = DirectData::SkillsDataSummaryService.new(@skill.id, @range[:from], @range[:to]).call end end private def find_skill(name) skill = name.nil? ? current_user.skills.first : Skill.find_by(name: params[:skill_name].strip) skill = current_user.skills.first if skill == nil skill end end
To już wszystko, gdybyś miał (lub miała) jakiekolwiek pytania, to śmiało do mnie pisz ([email protected]). Zachęcam do budowania swoich aplikacji – możliwie kreatywnych, które rozwiązują twoje konkretne problemy.
Powodzenia!
Ja nazywam się Marek Czuma, a to jest IT-Blog Wolnego Człowieka
Piszę do Ciebie Prosto z Łodzi
Jeśli uważasz, że artykuł był pomocny, lub po prostu lubisz być kreatywnym w IT – polub mój Fanpage na Facebook’u. Zapraszam do zostawienia maila – zero spamu, 100% dobrych treści.
Z każdym kolejnym dniem przekonywałem się jak bardzo się pomyliłem. Zapraszam Cię do tego bardzo niezwykłego dla mnie artykułu – podsumuję moje zmagania z rysunkiem. Pokażę moje wpadki, sukcesiki, ale przede wszystkim – zrobię to w postaci „tutoriala” – o tym jak osiągać cel. Zapraszam!
Jak mówi Pismo – „Poznacie prawdę, a prawda was wyzwoli”. Stań więc w prawdzie przed sobą samym. Im bardziej konkretnie i prawdziwie będziesz mogła spojrzeć na siebie w dziedzinie, którą będziesz doskonalić, tym większe szanse, że rzetelnie zrealizujesz kolejny punkt („Opracuj plan”), a co za tym idzie – tym bardziej prawdopodobne, że szczęśliwie dotrzesz do upragnionego celu.
Zwracam uwagę na to, że twoje spojrzenie musi być możliwie KONKRETNE. Mówię to z pełnym przekonaniem, ponieważ to błąd, który popełniałem przez całe lata. Odrzuć „po prostu wiem”. Nie ma znaczenia, co o sobie pomyślałaś. Absolutnie nie ma znaczenia, co zrodziło się w Twojej głowie. Znaczenia dopiero nabiera, kiedy jest sprowadzone do konkretu. Spisz więc kilka punktów, które stawiają Cię w jakimś świetle, postaw jakiś swój początkowy punkt i… przejdź do podpunktu drugiego.
W moim przypadku, początkowy punkt można było określić za pomocą kilku punktów:
Poza tym dość łatwo mogłem określić mój punkt początkowy jeśli chodzi o umiejętności. Tadaaaam.
#Wyzwanie30Dni – punkt startowy
Kolejna rzecz jest mało odkrywcza, ale proszę Cię – przestrzegaj jej. Cel, który sobie teraz ustalisz będzie bardzo istotny dla Ciebie aż do końca, musisz więc i w tym miejscu być aż do bólu konkretna. Koniec z rzeczami typu Rozwinę się fizycznie, nauczę się lepiej grać na gitarze czy będę lepiej umiała język mandaryński. Cel ma wytyczać Ci drogę gdy się zgubisz, zmotywować do działania gdy Ci się nie chce i pokazać do czego dążysz w szerszym ujęciu. „Cele” takie jak powyżej najzwyczajniej w świecie nie pełnią żadnej roli. Po co masz robić coś, co nie ma żadnego sensu?
Postaw sobie cel konkretny – tak, żeby bardzo łatwo było stwierdzić, czy go zrealizowałaś. Zrobię 100 pompek w jednej serii, Zagram Brick by boring brick na gitarze, Zrobię w języku mandaryńskim 5-minutową prezentację o moim hobby.
Niesamowicie istotna rzecz, to realizm celu. Przez kilka lat stawiałem sobie duże cele, które kompletnie mnie przytłaczały. Dlatego postaraj się wytyczyć sobie coś realistycznego. Nie chcę przy tym mówić, że ma to być coś, co jest bardzo proste, nieambitne, co już w tym momencie leży w twoim zakresie. Absolutnie nie! Musisz wyważyć umiejętnie – niech cel będzie ambitny i poza twoimi możliwościami teraz, ale jednocześnie realistyczny do zrealizowania.
W moim przypadku, było to również coś związanego z blogiem, a konkretniej…
„Narysować postać blogową wraz z wyposażeniem”
Cel wyznaczony, w drogę!
Mnóstwo razy dostawałem zapału do roboty, wyznaczałem sobie cel (albo i nie…) i od razu ruszałem do pracy. Teraz mogę stwierdzić bardzo łatwo, dlaczego nie udało mi się zrealizować tych rzeczy. Nie przygotowywałem się do drogi!
O zrealizowaniu celu lubię myśleć porównując to do akcji wojsk specjalnych. Jako, że Polska ma „specjalsów” bardzo wysokiej klasy, mamy z kogo brać przykład. Nie idź od razu na akcję, bo zostaniesz zabita, innej możliwości nie ma. Dokładnie się do niej przygotuj – zdobądź możliwie dużo informacji z dziedziny, w której będziesz się doskonaliła, porównaj je ze swoim aktualnym stanem (który masz, bo rzetelnie wypełniłaś punkt pierwszy). Zastanów się jaką drogą możesz pójść, kto może Ci pomóc, porozmawiaj z kimś, kto jest w tej dziedzinie dużo bardziej doświadczony, znajdź narzędzie, które pomoże Ci w pracy. Uwierz – przystępując do drogi, lepiej być poważnie przygotowaną.
W moim przypadku, przede wszystkim rozmawiałem wcześniej z koleżanką (pozdrowienia dla Jenn) która o rysowaniu wie wszystko, a do tego lubi pomagać. Nawet kiedyś podchodziliśmy razem do próby nauczenia mnie jak rysować, ale chyba jestem zbyt topornym uczniem. Ostatnią rzeczą jaka mi była potrzebna, to konkretna pomoc – mój brat pożyczył mi książkę o tym jak rysować od 0.
Poza tym, aby lepiej się mobilizować, planować i monitorować prace postanowiłem wykorzystać moją aplikację, w której mogę stawiać sobie cele, robić listy „ToDo” i logować czas, który poświęcam na dane rzeczy.
Warto mieć narzędzie, które sprowadzi wszystko co robisz do konkretu.
Ciąg dalszy jest dość oczywisty – kiedy masz już wiedzę, opracuj sobie plan na cały czas – taka mapa drogowa podróży w którą się wybierasz. Tutaj musisz sobie koniecznie spisać bardzo konkretnie – co, gdzie, jak i dlaczego.
W moim przypadku, konkretny plan przedstawiłem w pierwszym artykule. Całość była bardzo prosta, oczywiście została zapisana w postaci listy rzeczy do zrobienia – po każdym okresie mogłem go odznaczyć. Mnie tam takie rzeczy sprawiają małą przyjemność;-) Dodatkowo założyłem sobie, że będę pracował każdego dnia minimum 15 minut.
Konkretny plan pozwala na bieżąco monitorować czy idziesz dobrą drogą.
Dzięki temu już na początku wiedziałem jaki jest plan działania – mogłem całą drogę zobaczyć „z perspektywy”, a potem – gdy już działałem – nie musiałem się zastanawiać, czy to dobra droga, mogłem po prostu skupić się na robocie.
Jeśli wykonałaś poprzednie dwa kroki uczciwie i porządnie, możesz z czystym sumieniem i spokojną głową skupić się na pracy. W tym momencie rozpoczyna się ta konkretna podróż, w ciągu której będziesz musiała wykazać determinację. To jak dużo tej determinacji będzie Cię to kosztować zależy oczywiście od skali przedsięwzięcia.
Powiem wprost – raczej nie jest możliwe, żebyś w 100% wypełniła swoje założenia. Nawet jeśli to 15 minut dziennie, pewnie coś Ci wypadnie. Jeśli byłoby inaczej, pewnie nie czytałabyś tego artykułu.
Mi osobiście zdecydowanie nie udało się w 100% wypełnić planu. Często zdarzało się, że siedziałem mniej niż 15 minut nad rysunkiem, miałem też dni, gdzie zupełnie nic nie zrobiłem. Poza tym uczciwie przyznaję, że skończyłem całość kilka dni po obiecanym miesiącu. Tak – były to pewne moje porażki. Nie – dla całości nie ma to żadnego znaczenia. Jedyne co się liczyło w tamtym momencie, to czy byłem w stanie wziąć się do pracy dalej. Mamy w naturze załamywać się, gdy przez dłuższy czas przestajemy nad czymś pracować, to w sumie normalne. Ale pomyśl – lepiej się załamać i przestać na dobre, czy ruszyć do roboty? Odpowiedź pozostawiam Tobie.
Pamiętaj, że droga, którą podjęłaś nie powinna być dla Ciebie katorgą. Dlatego jeśli uda Ci się przejść kolejny etap – pozwól sobie na chwilkę radości. Ja osobiście lubię się dzielić tym co robię z innymi ludźmi. Dlatego jeśli akurat udało mi się coś fajnego, czasem przesyłałem komuś efekt. To trochę mobilizujące, polecam. W końcu mamy się cieszyć życiem.
Cała ta droga wiedzie oczywiście do jednego punktu – do Twojego celu. W tym miejscu chcę Pokazać Ci moje efekty i poznać Cię z Postacią IT-Bloga Wolnego Człowieka, pseudonim zawodowy „Mietek”.
Cóż, Mietek jest dość sympatycznym otwartym na ludzi i wyzwania gościem. Jest przedsiębiorczy – przez ostatnie kilka lat pracował na etacie, ale właśnie otwiera swój biznes o którym marzył ostatnią dekadę i do którego skrupulatnie się przygotował. Mimo, że jest programistą i lubi inwestować swoje pieniądze, lubi także ćwiczyć fizycznie (na rysunku robi pompki – gdybyś nie wiedziała) – wyznaje zasadę „w zdrowym ciele zdrowy duch”. Czasem jest na tyle zapracowany, że zapomni się ogolić. No i od czasu do czasu lubi się porządnie ubrać, „tak po biznesowamu”.
Mietek jest przedsiębiorczy, pracowity i otwarty na ludzi. Lubi robić pompki.
Chcę też przedstawić artefakty naszego Mietka. To znaczy rzeczy, które pomagają mu się rozwijać.
Mietek jest oszczędny – dlatego skarbonka (choć raczej w formie wirtualnej). Jest programistą i stara się tworzyć coraz lepsze aplikacje – robi to dzięki swojemu laptopowi. Nieustannie zapisuje wszystkie swoje ważniejsze pomysły, co może robić dzięki tabletowi. Ponieważ zawsze jest spragniony wiedzy, stara się możliwie często czytać książki – zawsze ma jakąś przy sobie. Jest zwolennikiem gotówki, nie opiera się na wirtualnych pieniądzach.
Mietek ma kilka rzeczy, które pomagają mu w osiąganiu celów
Cóż… właściwie tytuł powyżej mówi wszystko. Osiągnięcie celu to tylko ukończenie jednego etapu, a co za tym idzie – rozpoczęcie kolejnego. Wyjdź z tej podróży bogatsza wyciągając konkretne wnioski, daj sobie parę dni odpoczynku i… ruszaj dalej!
Łącznie na rysowanie w tamtym czasie poświęciłem 8:41 h. W perspektywie całości mojego życia bardzo niewiele, o czm możesz się przekonać na wykresie niżej. Cel jednak udało się zrealizować
8:41 h. Na tle całości raczej niezbyt dużo czasu.
Ja osobiście dziękuję za wspólną podróż, wnioski są… ale zachowam je dla siebie ; – ) Jeśli chcesz się z nami podzielić swoją przeżytą drogą, wyślij na mojego maila ([email protected]) krótki opis tego co zrobiłaś (no dobra… lub zrobiłeś) i podeślij efekt twoich prac. Dla mnie ostatnie 30 dni to bardzo, bardzo istotny czas. Nie zdobyłem umiejętności, które pozwolą mi zdobyć świat, ale zrobiłem coś niezwykle ważnego – przełamałem się. I nauczyłem czegoś, czego chciałem się nauczyć od kilku lat.
Na koniec – uff, wreszcie… ; – )
Cel osiągnięty, #Wyzwanie30Dni skończone; – )
Ja nazywam się Marek Czuma, a to jest IT-Blog Wolnego Człowieka
Piszę do Ciebie Prosto z Łodzi
Jeśli uważasz, że warto pracować nad sobą i stawiać sobie poprzeczkę coraz wyżej – polub mój Fanpage na Facebook’u. Zapraszam do zostawienia maila – zero spamu, 100% dobrych treści.
Od samego początku łącznie na rysowanie poświęciłem 5 godzin 47 minut. To naprawdę niewiele, zważając, że robię to od 17.09. Jest to – co ważniejsze – również niewiele w aspekcie całości mojego życia, co fajnie obrazuje wykres kołowy.
Nauka rysowania, start 17.09. Łącznie 5h 47m.
Tak więc – nie, nie trzeba poświęcać mnóstwa czasu, żeby coś poznać. Wręcz – jeśli zaczynasz od zera – nie polecam pracy „full-time”. Potem jest to konieczność, ale na początku bardzo często wystarczy 15 minut dziennie, codziennie.
Podsumowania z pierwszych 10 dni znajdziesz tutaj, oraz tutaj. Ponieważ zebrało się od tamtego czasu sporo rysunków, nie przedstawię efektów dzień po dniu. Liczę jednak, że wybrana reprezentacja mojej pracy też Cię zadowoli ; – )
Moje rysownicze prace w pigułce
Tym oto sposobem kończę etap nauki i rozpoczynam kolejny – rysowanie Postaci IT-Bloga Wolnego Człowieka. To taki człowieczek, który ma być sympatycznym reprezentantem IT-Bloga. Trochę takim stereotypowym czytelnikiem, trochę przykładem dla innych;-)
Dla przypomnienia – tak wygląda mój cel.
Mój cel. Do zrealizowania zostało jeszcze zaledwie 5 dni…
Co będzie cechowało postać IT-Bloga?
Zastrzegam, że jeśli coś mi jeszcze przyjdzie do łba, to nie zawaham się dodać. Jeśli Tobie chodzi coś po głowie w tej materii – pisz śmiało.
Do zobaczenia 17go ! Ahoj.
Ja nazywam się Marek Czuma, a to jest IT-Blog Wolnego Człowieka
Piszę do Ciebie Prosto z Łodzi
Jeśli chcesz być na bieżąco z moimi poczynaniami, zapraszam do polubienia mojego fanpage’a na FB. Jeśli uważasz, że piszę wartościowe treści – dołącz do newslettera. 0 spamu, 100% porządnej roboty.
]]>Czyli o tym jak to realnie z tą moją systematycznością było. Łącznie spędziłem nad rysowanie 1:08 h. To mniej niż poprzednio, jednak cały czas trzymam się w ustalonej przez siebie normie. Poniżej dowód na to, że mówię jak jest.
10 dzień #Wyzwanie30Dni – 1:08 h spędzonego na rysowaniu.
Ponieważ to już drugi raport (!), warto spojrzeć na to jak udaje mi się realizować cel od samego początku. Tak zupełnie nawiasem – w ogóle mam przekonanie, że warto każdego dnia przypominać sobie samemu cel. Bo warto robić coś z jakiegoś powodu i dążyć do jakiegoś konkretnego punktu. No więc…
Po 9 dniach mogę spojrzeć w tył i zobaczyć, że udało mi się już uzbierać troszkę czasu spędzonego nad celem.
Tak tak! 2:38 h spędzone na celu pt „Narysować postać blogową wraz z wyposażeniem”. Na ten moment się uczę.
No to czas zacząć przyglądać się realnym osiągnięciom.
Dzień 5 to próba rysowania grymasów
Feralny szósty dzień to moment, w którym nie udało mi się nic narysować, przyznaję to bez bicia. Wytłumaczenie: totalnie nieistotne. Najważniejsze, że ten dzień minął, a następnego po prosu siadłem i rysowałem dalej;-)
Dzień 7 to rysowanie emocji
No to jedziemy, dnia ósmego…
Dzień ósmy to wciąż emocje
I ostatni już dzień; – )
Końcówka emocji + rozpoczęcie prób rysowania tej samej postaci pod różnym kątem.
W mojej ocenie jedną z najważniejszych rzeczy w życiu człowieka, jest umiejętność wyciągania wniosków – przede wszystkim z porażek. W moim przypadku porażka nie była wielka, raczej „codzienna”, wniosek więc też będzie „codzienny”. A więc…
Nie mogę zostawiać rysowania na ostatnią chwilę, powinienem zrobić to możliwie wcześnie.
Tak tak tak… nie raz było tak, że zmęczony przychodziłem późno w nocy i musiałem nadrobić rysowanie. Bez sensu, można zaplanować ten czas wcześniej i wykonać to z przyjemnością.
To również moment, żeby podziękować każdemu z Was – Wy, którzy nieustannie piszecie do mnie przesyłając kolejne zdjęcia. Cóż… nie spodziewałem się, że znajdzie się tyle osób, które wolą stawiać na aktywny i systematyczny styl życia. Jestem wzruszony – serio.
Przypominam o moim celu – pomóżcie mi go zrealizować! Szukam pomysłu na postać, z którą wszyscy będziemy się mogli utożsamić. Taki „stereotypowy czytelnik IT-Bloga”. Chyba powinien być kreatywny i pracować nad sobą nie? ; – )
Jeśli chcesz być na bieżąco z #Wyzwanie30Dni polub mój fanpage. Możesz również zostawić maila – mam szczerą nadzieję, że uda mi się raz w tygodniu dostarczyć Ci chociaż jeden wartościowy news.
Ja nazywam się Marek Czuma, a to jest IT-Blog Wolnego człowieka
Piszę do Ciebie prosto z Łodzi
Weźmy za przykład kogoś, kto nam imponuje fizycznie – filmik poniżej może być kopalnią inspiracji.
Jestem przekonany, że część z nas (ze mną włącznie) zainspirowana odejdzie od komputera i pójdzie biegać, albo zrobi jakieś ćwiczenia siłowe. Ja osobiście jestem w stanie pójść nawet i na dwugodzinny trening. Następne trzy dni wychodzę biegać i wracam dopiero po godzinie. Problem leży w tym, że… po tych kilku dniach przestaję jakkolwiek trenować. Dzieje się tak z kilku powodów.
Oczywiście odnosi się to nie tylko do biegania.
Powinniśmy chcieć mieć dużo, umieć dużo, być kimś. Jak to jednak zrobić, jak dojść do znakomitej formy, skoro po kilku dniach ćwiczeń odechciewa nam się jakiegokolwiek wysiłku? Odpowiedź wydaje się być prostą receptą – jeśli chcesz od 0 do czegoś dojść, dużo lepszym pomysłem niż forsowna przeprawa od początku, będzie systematyczna, codzienna praca w długim okresie, ale w niewielkim wymiarze czasowym (pracujesz codziennie trochę, ale przez wiele dni). Spójrz na przykład, który jest przez nas już omawiany.
Jeśli 5 lat temu zacząłbyś codziennie ćwiczyć i poświęcałbyś na to 20 minut każdego dnia, dzisiaj miałbyś juz przećwiczone 36 500 minut – czyli ponad 608 godzin, co daje równowartość… Ponad 25 dób! Jeśli uważasz, że możesz przez miesiąc trenować non-stop (24h na dobę) z przerwami na niedziele, to nie czytaj dalej. W przeciwnym przypadku zastanów się nad rozważeniem sposobu, który ja przedstawiam.
Tak więc przedstawiam moje kilka punktów, które mogą Ci pomóc w rozwinięciu się w konkretnej, wybranej przez Ciebie umiejętności.
Pamiętaj, kiedy przyjdą okresy zniechęcenia – nie poddawaj im się! To naturalna kolej rzeczy, musisz robic swoje.
Żeby zwiększyć swoją szansę, możesz skorzystać z aplikacji Warthog Timer, o której pisałem tutaj.
Dość bycia gołosłownym mądralą! Dzisiaj rozpoczynam na Twoich oczach eksperyment, żeby pokazać Ci, że naprawdę wierzę w to, o czym piszę i że „to nie są puste słowa”, jakby to Łzy zaśpiewały.
Od dzisiaj podejmę systematyczną pracę nad jedną rzeczą i będę ją ćwiczył codzienne przez 30 dni, każdego dnia trochę. Zacznę właściwie od 0, a dokładny raport i efekty będę publikował co 5 dni tutaj, na IT-Blogu.
Ową rzeczą będzie rysowanie. Czemu? Otóż przyznam się do czegoś – nigdy nie miałem nawet odrobiny talentu plastycznego. Ba! Ja nawet nie miałem śladu nadziei, że będę kiedyś coś umiał. Tak więc w ramach zmierzenia się ze swoimi słabymi punktami, chcę nauczyć się prostych rysunków i chcę to zrobić w miesiąc.
Tym samym rozpoczynam #Wyzwanie30Dni, co można zaobserwować na zdjęciu poniżej.
#Wyzwanie30Dni – zaczynamy!
Aby cały czas wiedzieć do czego dążę, muszę mieć wyznaczony cel – brzmi on następująco.
„Narysować postać blogową wraz z wyposażeniem”
Tak! IT-Blog Wolnego Człowieka powinien mieć swoją postać, która będzie go w jakiś sposób reprezentowała. Jeśli masz pomysł kim może być – napisz na maila, na profilu lub w komentarzu pod tym artykułem, opisz ją!
Żeby planować sobie pracę i monitorować ją, skorzystam ze swojej aplikacji która wspiera rozwijanie umiejętności w ułożony i usystematyzowany sposób.
Muszę mieć także prosty plan, aby nie zagubić się. Tak więc
1) Pierwsze 2 dni poświęcę na zabawę z rysowaniem, tak po prostu.
2) kolejne 20 dni będę ćwiczył rysowanie z książką
3) ostatni tydzień wykorzystam na rysowanie mojej postaci
Cóż, startujemy! Za 5 dni pierwsze postępy, na ten moment przedstawiam mój punkt startowy. Nieźle nie?
#Wyzwanie30Dni – punkt startowy
W tym momencie chcę zaprosić do mojego eksperymentu właśnie Ciebie! Jeśli chcesz zrobić coś dla siebie, a przy tym przekazać naszego ducha pracy nad charakterem dalej, dołącz do mojej akcji #Wyzwanie30Dni – jeśli to zrobisz, pomyśl czy nie chcesz zaprosić do eksperymentu kogoś bliskiego. Już nie do mojego, ale NASZEGO eksperymentu i wyzwania. Odważysz się wejść tam, gdzie nie wchodzi większość?
Jak to działa:
1) Wybierz rzecz, w której chciałbyś się rozwinąć – najlepiej od 0.
Warto robić listę rzeczy do zrobienia – to pozwala obiektywnie zweryfikować twój stan prac.
2) Napisz cel, który chcesz zrealizować w 30 dni
3) Wyznacz w paru punktach prosty plan (żeby wiedzieć gdzie iść;-) )
4) Do dzieła! Działaj codziennie przez 30 dni, rozliczaj się sumiennie
5) Jeśli chcesz się tym z nami podzielić – napisz do mnie na maila lub na fanpage facebook’owy. Wyślij swoje zdjęcie z kartką z napisem „#Wyzwanie30Dni” oraz napisz nad czym chcesz pracować.
6) Ja wrzucę na fanpage nadesłane zdjęcie razem z kilkoma słowami gratulacji i powodzenia. Od tego momentu będziemy stanowić ścisłą, wspierającą się społeczność – razem możemy znacznie więcej
Ta akcja nie jest jak inne – nie zachęcam Cię do wypicia kufla piwa na raz. Nie zachęcam nawet do oblania się zimną wodą w szczytnym celu. Zachęcam Cię, do podjęcia pewnego trudu, wysiłku i robienia tego z uśmiechem na twarzy zarażając naszą wspólną ideą innych. Zmiana świata zaczyna się tutaj – od nas.
Powodzenia!
Edit:
Cel wyznaczony, w drogę!
Ja nazywam się Marek Czuma, a to jest IT-Blog Wolnego Człowieka
Piszę do Ciebie Prosto z Łodzi
Jeśli chcesz być na bieżąco z akcją #Wyzwanie30Dni – polub mój fanpage na Facebooku. Zachęcam też do zostawienia swojego maila – dzięki newsletterowi możemy utrzymać stały kontakt. Zero spamu, 100% wartościowych, głębokich treści.
]]>To zdecydowanie najważniejszy punkt mojego dzisiejszego artykułu oraz środowego LRUGa. Żebyś dobrze to zrozumiał posłużę się aplikacją którą rozwijam po godzinach. Warthog Timer ma pomóc w zmobilizowaniu się przy okazji realizowania różnych umiejętności. Sama główna funkcjonalność jest banalnie prosta. Gdy zaczynasz coś robić (na przykład pracę inżynierską, aplikację internetową czy malowanie obrazu) klikasz „START” na timerze. Gdy kończysz klikasz „STOP” – i w tym momencie tworzy się log_time – jeden obiekt w bazie. Następnie idziesz do statystyk i sprawdzasz ile udało ci się spędzić czasu nad różnymi fajnymi rzeczami. Statystyką która nas dzisiaj zajmie będzie „Najlepszy cel”. Na rysunku poniżej przedstawiam łańcuch metod jaki musi się odbyć od pozyskania danych (calculate_time_from_log_times) do obliczenia ostatecznego celu (best_target).
To co warto zauważyć to fakt, że ta metoda na samym dole obliczająca czas jest użyta aż… 8 razy. I to za każdym razem jest podobny łańcuch. Zastanówmy się więc co będzie, jeśli będziemy chcieli ją nieco zmienić, ale zamiast poprawić – zepsujemy? Oczywiście zarówno ten, jak i każdy inny łańcuch staje się kompletnie do niczego. W tym przypadku więc Warthog byłby kompletnie sparaliżowaną aplikacją. „Ok, co z tego, przecież mogę się przeklikać” ktoś powie. Pewnie – ale ile razy? I za każdym razem gdy coś zmienisz masz zamiar się przeklikiwać we wszystkich możliwych wariantach? Już to widzę…
Tutaj z pomocą przychodzą nam testy jednostkowe. Są to takie małe fragmenciki kodu, drobne instrukcje które mają sprawdzać czy przy odpowiednich parametrach wywołanie danej metody daje pożądany wynik. To rozwiązanie o wiele lepsze, niż popularne „przeklikam się”, gdyż myślimy tylko raz (przy pisaniu), a potem po prostu odpalamy testy zawsze gdy dokonamy jakiś zmian i.. już.
Ponieważ na co dzień piszę w Ruby on Rails a i prezentacja była oparta na tej technologii, to tutaj dokładnie pokażę jak od 0 zbudować sobie wygodne środowisko do pierwszych, najbardziej podstawowych testów. Potrzebne będzie nam kilka gemów. Wchodzimy w Gemfile (w głównym katalogu aplikacji) i wpisujemy kolejno:
gem ‘rspec-rails’ gem ‘factory_girl_rails’ gem ‘database_cleaner’
Gdy już to wpiszemy idziemy do terminala i wprowadzamy „bundle install”, co zainstaluje nam wszystkie wyżej wprowadzone gemy. Krótkie wytłumaczenie – Rspec to gem odpowiedzialny za obsługę testów, jest można powiedzieć „głównym filarem” który wszystko spaja. Ponieważ jednak jest to środowisko testowe a nie development, musimy stworzyć tam nasze obiekty. Do tego posłuży nam Factory Girl (Nie pytaj, nazwy tutaj naprawdę bywają dziwne…). Na koniec bardzo przydatna sprawa – Database Cleaner pomoże nam czyścić bazę przed każdym testem. Dzięki temu na każdy test popatrzymy jako osobną część i zachowamy nad nim pełną kontrolę. Skoro już zainstalowałeś gemy, wejdź ponownie w terminal i wprowadź komendę rails generate rspec:install. Po tym zabiegu powinieneś w głównym katalogu aplikacji mieć folder „spec”. Na ten moment wpisz w terminal „rspec” i… zobacz jak świetnie wykonały Ci się twoje wszystkie (0) testy. Gratuluje! Wejdź w folder spec, a następnie spec_helper.rb. tutaj wklej następujący kod który obsłuży czyszczenie bazy danych w odpowiednich momentach.
Zabierzmy się za napisanie testu. Tutaj mogę niestety jedynie pokazać Ci jak wygląda to u mnie, w Warthog’u. Testujemy omawianą wyżej metodę calculate_time_from_log_times. Wygląda ona następująco:
def calculate_time_from_log_times(log_times) time = 0 log_times.each do |log_time| time += log_time.time * 60 end time end
Ponieważ znajduje się ona w serwisie (taka klasa w której umieszczamy logikę – na przykład różne algorytmy), stworzyłem w folderze „spec” nowy katalog – „services”, zaś w nim „targets_stats_service_spec.rb” – czyli nazwę mojego serwisu z dodanym na końcu „_spec” (To kwestia konwencji, która w Ruby on Rails jest święta! Dlatego też się do niej stosuj). Wewnątrz napisałem 3 testy – widoczne pod spodem. Zwróćmy uwagę na kilka elementów:
require 'rails_helper' context 'tests for calculate_time_from_log_times' do it 'should get time 0' do user = FactoryGirl.create(:user) service = DirectData::TargetsStatsService.new(user.id) time = service.calculate_time_from_log_times(user.log_times) expect(time).to eq(0) end it 'should get time 1800 (30 min * 60 s)' do user = FactoryGirl.create(:user) prefab = FactoryGirl.create(:prefab, user: user) FactoryGirl.create(:skill, user: user) FactoryGirl.create(:log_time, user: user, prefab: prefab) service = DirectData::TargetsStatsService.new(user.id) time = service.calculate_time_from_log_times(user.log_times) expect(time).to eq(1800) end it 'should get time 4500 (30 + 30 + 15 [min] * 60 s)' do user = FactoryGirl.create(:user) prefab = FactoryGirl.create(:prefab, user: user) FactoryGirl.create(:skill, user: user) FactoryGirl.create(:log_time, user: user, prefab: prefab) FactoryGirl.create(:log_time, user: user, prefab: prefab) FactoryGirl.create(:log_time2, user: user, prefab: prefab) service = DirectData::TargetsStatsService.new(user.id) time = service.calculate_time_from_log_times(user.log_times) expect(time).to eq(4500) end end
Warto zwrócić uwagę na to FactoryGirl.create(). To właśnie stworzenie obiektu w bazie. Żeby stworzyć „matrycę” takiego obiektu najpierw utworzyłem folder „factories” wewnątrz „spec”, a następnie stworzyłem odpowiedniki modeli – np. log_time.rb, target.rb czy user.rb. Pokazuję przykładowy kod – user.rb żebyś wiedział jak tworzyć proste Factory Girl.
FactoryGirl.define do factory :user do email '[email protected]' password 'lolopolo' confirmed_at { DateTime.now } end end
Gdy już napisałeś testy, jedyne co musisz zrobić aby je odpalić to wejść do terminala i wpisać… rspec. Klikasz enter i już! Testy samoczynnie idą, zaś na koniec „wypluwają” raport. Jeśli któryś się nie powiódł to prawdopodobnie masz coś nie tak z metodą (lub z samym testem). Gdy uda Ci się doprowadzić wszystko do pozytywnego stanu możesz poklepać się po pleckach – wykonałeś(/łaś!) kawał dobrej roboty!
Na koniec chciałbym bardzo mocno zaznaczyć, że testy to gigantyczny temat który zaledwie tutaj musnęliśmy. Zachęcam Cię do eksplorowania Internetu w celu dalszego szlifowania umiejętności związanych testowaniem. Pamiętaj, że od tego zależy jakość twojej aplikacji, a przecież nie chcemy robić niczego byle jak prawda? Testy oszczędzają mnóstwo czasu i nerwów oraz dają Ci większą kontrolę nad tym co dzieje się z twoją aplikacją. Oczywiście jeśli będziesz chciał poznawać te tematy, służę pomocą – możesz napisać do mnie maila lub złapać mnie na którymś z LRUG’ów;-)
P.S.
Warthog jest w wersji pre-alfa, ale jeśli chcesz spróbować przejąć kontrolę nad czasem który poświęcasz na rzeczy które Cię budują, to zachęcam do korzystania na stronie warthogtimer.com. Przed rejestracją po prawej stronie zajrzyj w znak zapytania który podpowie Ci, jak korzystać z serwisu. A jeśli będziesz miał uwagi, pytania lub sugestie również odnośnie rozwoju aplikacji – zamieniam się w słuch : – )
Ja nazywam się Marek Czuma, a to jest IT-Blog Wolnego Człowieka
piszę do Ciebie prosto z Łodzi
]]>