Warthog Timer – Marek Czuma – IT-Blog Wolnego Człowieka http://marekczuma.pl Kreatywne IT, Gospodarka, Społeczeństwo - prosto z Łodzi Sun, 27 Aug 2017 10:52:12 +0000 pl-PL hourly 1 https://wordpress.org/?v=4.8.1 Jak wziąć się w garść? [Zaproszenie do wersji beta Warthoga] http://marekczuma.pl/2017/02/25/jak-wziac-sie-w-garsc-zaproszenie-do-wersji-beta-warthoga/ http://marekczuma.pl/2017/02/25/jak-wziac-sie-w-garsc-zaproszenie-do-wersji-beta-warthoga/#respond Sat, 25 Feb 2017 17:26:07 +0000 http://marekczuma.pl/?p=659 Continue Reading →]]> Przyznam, że w tym artykule się trochę otwieram, ale wiem, że są ludzie, którzy tego potrzebują. Jeśli jesteś ambitny, lub ambitna, ale większość rzeczy kompletnie Ci nie wychodzi – bo nie masz determinacji, bo źle organizujesz swoją pracę, bo nie wiesz w którą stronę iść – chcę Ci dać narzędzie, które od jakiegoś czasu tworzę.

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;-)

Czas na rewolucyjną ewolucję

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.

Warthog

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.

Jak to działa?

Korzystanie z aplikacji jest banalnie proste i streszcza się w 3 krokach.

  1. Stwórz swoje stanowisko pracy
  2. Pracuj i loguj czas
  3. Wyciągaj wnioski i planuj

Stwórz swoje stanowisko pracy

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.

Pracuj i loguj czas

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;-)

Wyciągaj wnioski i planuj

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.

Dołącz do Warthoga – i Warthogowców

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;-)


]]>
http://marekczuma.pl/2017/02/25/jak-wziac-sie-w-garsc-zaproszenie-do-wersji-beta-warthoga/feed/ 0
Umieszczanie logiki w aplikacji webowej – zrób to dobrze [serwisy w RoR] http://marekczuma.pl/2016/10/29/umieszczanie-logiki-w-aplikacji-webowej-zrob-to-dobrze-serwisy-w-ror/ http://marekczuma.pl/2016/10/29/umieszczanie-logiki-w-aplikacji-webowej-zrob-to-dobrze-serwisy-w-ror/#respond Sat, 29 Oct 2016 15:07:42 +0000 http://marekczuma.pl/?p=502 Continue Reading →]]> W ostatni poniedziałek (24.10) miałem przyjemność brać udział w Łódź User Ruby Group jako prelegent (już drugi raz, o pierwszym – czyli czemu nie warto pisać aplikacji bez testów – przeczytaj tutaj). Jeśli jesteś początkującym programistą webowym (lub programistką, of kors;-) ), to zapraszam do lektury. W sumie najlepiej, jeśli masz do czynienia z Ruby on Rails, ale nie jest to konieczne, ze względu na to, że część prezentacji miała wymiar „filozoficzny”.

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).

Model-View-Controller (MVC)

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).

Gdzie w MVC umieszczać logikę i dlaczego tego nie robić?

Podstawowe pytanie brzmi – w której z tych warstw (Modelu, Kontrolerze, czy Widoku) umieścić logikę?

  1. Widok (View) – mam nadzieję, że tutaj sprawa dla Ciebie jest jasna. Kod widoku powinien być możliwie pozbyty jakiejkolwiek logiki. Jedyne wyjątki to each (pętla, którą wywołujemy na kolekcji), ewentualnie instrukcja if. Pamiętaj jednak, że i tu każde użycie tego typu rzeczy powinno być uzasadnione. Nie stosujemy logiki w widoku, ponieważ ma to być przestrzeń tylko dla wizualizacji danych, tworząc go skupiamy się na tym, żeby aplikacja była możliwie ładna i przejrzysta, a nie żeby porządnie działała w sensie inżynierskim. Pozwala to też podzielić zadania w drużynie, oraz ułatwia zachowanie Prawa Demeter.
  2. Kontroler (Controller) – kiedy spytałem na prezentacji o to, gdzie powinna być umieszczona logika, jeden z słuchaczy zaproponował właśnie kontroler. Na pierwszy rzut oka wydaje się to być całkiem niezły pomysł – w końcu kontroler ma pośredniczyć, między danymi z modelu, a widokiem. Nie jest to jednak wszystko takie różowe – powinniśmy się starać, żeby akcje (metody) kontrolera były możliwie chude i przejrzyste. Jeśli trzeba zastosować tam jakąś logikę, to warto przemyśleć „wypchnięcie” jej do innego pliku. W przeciwnym wypadku kontroler po niedługim czasie robi się niebywale opasły, a jego akcje pełnią bardzo dużo funkcji, do których nie zostały przeznaczone. Z resztą – przez wiele miesięcy sam pisałem logikę w kontrolerach (na początku mojej pracy zawodowej), więc wiem co mówię. Nie rób tego. Korzystaj z moich doświadczeń. Nie rób tego.
  3. Model – tak, wreszcie dochodzimy do ostatniej warstwy aplikacji webowych – czyli do modelu. W najprostszym przypadku MVC to właśnie tutaj powinniśmy umieszczać większość logiki aplikacji.

Logika w modelu? Może jednak niekoniecznie…

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).

Krok 1 – Jest dobrze!

Na początku model „z logiką” wygląda fajnie.

Model z jedną metodą wygląda dobrze

Krok 2 – Powiedzmy…

Po niedługim czasie, zaczynasz widzieć jak się rozrasta…

Model z kilkoma metodami powinien zapalić ostrzegawczą lampkę

Krok 3 – WTF?

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ą…

Serwisy! Czyli jak sobie ułatwić życie

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.



Sposób pierwszy – „serwis jako zbiór metod”

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).

Sposób drugi – „serwis z pojedynczą odpowiedzialnością (single responsibility 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.

Przykład – tworzymy statystyki na stronę

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

Stosuj serwisy i buduj dobre aplikacje!

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.


]]>
http://marekczuma.pl/2016/10/29/umieszczanie-logiki-w-aplikacji-webowej-zrob-to-dobrze-serwisy-w-ror/feed/ 0
Tutorial osiągania celu w miesiąc – kończę #Wyzwanie30Dni [Wpadki, sukcesiki, wnioski] http://marekczuma.pl/2016/10/22/tutorial-osiagania-celu-w-miesiac-koncze-wyzwanie30dni-wpadki-sukcesiki-wnioski/ http://marekczuma.pl/2016/10/22/tutorial-osiagania-celu-w-miesiac-koncze-wyzwanie30dni-wpadki-sukcesiki-wnioski/#respond Sat, 22 Oct 2016 18:18:40 +0000 http://marekczuma.pl/?p=481 Continue Reading →]]> Nieco ponad miesiąc temu rozpocząłem #Wyzwanie30Dni. Choć wiem, że nie powinienem tego robić, przyznam szczerze – trochę się obawiałem. Zastanawiałem się, czy będzie jakikolwiek odzew. Zastanawiałem się, czy choć kilka osób zainteresuje się tematem – w końcu systematyczna praca „krok po kroku” nie jest zbyt popularnym podejściem, szczególnie w erze „kołczów”, a IT-Blog Wolnego Człowieka dopiero raczkuje. Machnąłem ręką – sam sens akcji i jej misja były dużo istotniejsze niż jakiekolwiek obawy.

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!

[Ponieważ zdecydowana większość osób, które przystąpiły do #Wyzwania to kobiety, w artykule adresatem będzie właśnie kobieta, jednak całość równie dobrze może być odbierana oczywiście przez mężczyzn]

Postaw Cel

Stań w prawdzie

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:

  • Totalnie nie umiem rysować ładnie
  • Bardzo słabo umiem rysować w ogóle
  • Jeśli się dobrze zmotywuję, umiem pracować systematycznie
  • Chcę się nauczyć rysować

Poza tym dość łatwo mogłem określić mój punkt początkowy jeśli chodzi o umiejętności. Tadaaaam.

#Wyzwanie30Dni – punkt startowy

Postaw przed sobą realistyczny, ale ambitny i inspirujący cel

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ę!

Opracuj plan

Bądź jak żołnierz wojsk specjalnych przed akcją

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.

Opracuj konkretny plan. KONKRETNY!

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.

Zrealizuj

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.

Nie załamuj się, po prostu wróć do roboty

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.

Świętuj sukcesiki

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.

Efekty – osiągnij cel i wyciągnij wnioski

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”.

Poznaj Mietka

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ą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.

Poznaj artefakty Mietka

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

Wyciągnij wnioski i ruszaj dalej

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.



]]>
http://marekczuma.pl/2016/10/22/tutorial-osiagania-celu-w-miesiac-koncze-wyzwanie30dni-wpadki-sukcesiki-wnioski/feed/ 0
#Wyzwanie30Dni – kończę naukę! (25 dzień) http://marekczuma.pl/2016/10/13/wyzwanie30dni-koncze-nauke-25-dzien/ http://marekczuma.pl/2016/10/13/wyzwanie30dni-koncze-nauke-25-dzien/#respond Wed, 12 Oct 2016 23:42:34 +0000 http://marekczuma.pl/?p=438 Continue Reading →]]> Nadszedł ten moment, kiedy skończony został pewien okres. Dosłownie przed chwilą zakończyłem naukę rysowania z książką (Bardzo polecam każdemu – Peter Maddocks, „Jak Rysować. Poradnik dla początkujących”). Moje wrażenia – mimo, że cały czas uważam się za antytalent, to praca z książką udowodniła mi, że każdy może na pewien podstawowy poziom rysowania wejść. Przede wszystkim wystarczy spróbować.

3 łyki statystyki

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.

Podsumowanie

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

Co dalej? Rysuję postać IT-Bloga Wolnego Człowieka!

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?

  • Pracowitość
  • Wolność oczywiście!
  • Przedsiębiorczość
  • Niesztampowość (?)
  • Obywatelskość

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.

]]>
http://marekczuma.pl/2016/10/13/wyzwanie30dni-koncze-nauke-25-dzien/feed/ 0
#Wyzwanie30Dni – złamałem się (Dzień 10) http://marekczuma.pl/2016/09/26/wyzwanie30dni-zlamalem-sie-dzien-10/ http://marekczuma.pl/2016/09/26/wyzwanie30dni-zlamalem-sie-dzien-10/#respond Mon, 26 Sep 2016 10:25:44 +0000 http://marekczuma.pl/?p=406 Continue Reading →]]> Dzisiaj dzień 10 mojego #Wyzwanie30Dni, czas na otwarcie się i pokazanie dokonań z ostatnich 5 dni. No dobra… chciałbym pokazać z ostatnich 5 dni (od 5 do 9). Problem jednak jest jeden… mam tylko 4 dni. Szósty dzień był pierwszym, którego nie udało mi się narysować nawet jednej kreski. Ale o tym później! Najpierw…

3 łyki statystyki

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ę.

Dzień 5

No to czas zacząć przyglądać się realnym osiągnięciom.

Dzień 5 to próba rysowania grymasów

Dzień 6-7

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

Dzień 8

No to jedziemy, dnia ósmego…

Dzień ósmy to wciąż emocje

Dzień 9

I ostatni już dzień; – )

Końcówka emocji + rozpoczęcie prób rysowania tej samej postaci pod różnym kątem.

Wnioski i… znów wy!

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


]]>
http://marekczuma.pl/2016/09/26/wyzwanie30dni-zlamalem-sie-dzien-10/feed/ 0
Potęga długofalowej pracy – rozpoczynam eksperyment #Wyzwanie30Dni ! http://marekczuma.pl/2016/09/17/potega-dlugofalowej-pracy-rozpoczynam-eksperyment-wyzwanie30dni/ http://marekczuma.pl/2016/09/17/potega-dlugofalowej-pracy-rozpoczynam-eksperyment-wyzwanie30dni/#comments Sat, 17 Sep 2016 09:31:12 +0000 http://marekczuma.pl/?p=364 Continue Reading →]]> Wszyscy podziwiamy ludzi, którzy są w jakiejś dziedzinie „na górze”, którzy potrafią więcej niż przeciętnie i robią coraz bardziej zachwycające rzeczy. Ponieważ chcemy być jak oni – bierzemy się do roboty. Robota jednak najczęściej kończy się na „aaa nie chce mi się, jutro będę dalej robił” po kilku dniach. Jutro niestety nadchodzi dopiero za kilka tygodni, gdy znów ktoś nas zainspiruje.

POWIEDZMY JAK JEST.

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.

  • Mój organizm po dłuższym czasie zastoju nie jest gotowy do forsownych treningów, co skutkuje wysokim i długotrwałym zmęczeniem.
  • Mówię sobie, że „kilka dni treningów, to teraz przerwa”
  • Przerwa zaczyna trwać tydzień, więc nie chce mi się już wracać do ćwiczeń
  • Tracę poczucie sensu i zapał – nie mam wyraźnego celu przed oczami
  • Nie mam pojęcia ile już włożyłem czasu (obiektywnie) w to, żeby dojść do upragnionego stanu, więc nie wiem w jakim punkcie drogi jestem.

Oczywiście odnosi się to nie tylko do biegania.

JAK TEMU ZARADZIĆ?

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.

  1. Wyznacz okres w którym będziesz pracować nad daną umiejętnością
  2. Wyznacz konkretny, mierzalny cel jaki chcesz osiągnąć
  3. Rób listę rzeczy do zrobienia (lista ToDo), rozliczaj się z niej uczciwie.
  4. Wyznacz ile minimalnie i maksymalnie dziennie pracujesz by rozwinąć daną rzecz

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.

PODDAJĘ SIĘ EKSPERYMENTOWI

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

ROZPOCZNIJ EKSPERYMENT RAZEM ZE MNĄ!

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.

]]>
http://marekczuma.pl/2016/09/17/potega-dlugofalowej-pracy-rozpoczynam-eksperyment-wyzwanie30dni/feed/ 4
Testy dla zielonych, czyli dlaczego nie warto zaczynać aplikacji bez testów http://marekczuma.pl/2016/06/24/testy-dla-zielonych-czyli-dlaczego-nie-warto-zaczynac-aplikacji-bez-testow/ http://marekczuma.pl/2016/06/24/testy-dla-zielonych-czyli-dlaczego-nie-warto-zaczynac-aplikacji-bez-testow/#respond Thu, 23 Jun 2016 22:02:55 +0000 http://marekczuma.pl/?p=36 Continue Reading →]]> Testy jednostkowe – bezsensowne wymaganie wydłużające pisanie aplikacji. Czy na pewno? Z pewnością taki obraz możemy bardzo często wynieść z uczelni. Czy to jednak absolutna prawda? Temu zagadnieniu poświęciłem prezentację na Łódź User Ruby Group – czyli comiesięcznym spotkaniu Railsowców organizowanym w 6 dzielnicy w Łodzi. Sama prezentacja dostępna jest w formie PDF w zakładce „Materiały”. Zapraszam na krótką powtórkę w formie artykułu – jeśli zaczynasz dopiero przygodę z Ruby On Rails/programowaniem/testami to ten tekst napisany jest specjalnie dla Ciebie. Dowiesz się przede wszystkim „Po co, do cholery pisać testy?!”, jak wygląda napisanie prostego testu w RoR, oraz oczywiście jak przygotować sobie do tego środowisko. No to ruszamy!

Po co, do cholery, pisać testy?

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ż.

Jak to wygląda w praktyce? Instalujemy potrzebne biblioteki

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.



Piszemy test!

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:

  • Context – opisuje pewien kontekst naszych prac. Ja napisałem jaką metodę w nim będę testował.
  • It – ten blok to właśnie test jednostkowy. Tutaj opisujemy już konkretniejsze działanie – np. jaką liczbę powinna zwrócić metoda.
  • Expect(cośtam).to eq(cośtam) – oczekiwany wynik testu.

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!

Co dalej?

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

]]>
http://marekczuma.pl/2016/06/24/testy-dla-zielonych-czyli-dlaczego-nie-warto-zaczynac-aplikacji-bez-testow/feed/ 0