Święta Bożego Narodzenia 2017 na wykresach

I po świętach.

W tym artykule nie będzie refleksji o bogu, rodzinie czy życiu. Będzie za to chłodna statystyka.

Dochodzę do wniosku, że gdybyśmy mieli w Polsce jeszcze jedno święto o skali konsumpcji porównywalnej z Bożym Narodzeniem, to stalibyśmy się pierwszą gospodarką świata. Z pomocą Google Trends postanowiłem pokazać jak w skali roku kształtują się wyszukiwania haseł najbardziej popularnych w czasie świąt.

Prezent

Prezentów szukaliśmy przez cały rok, jednak już w listopadzie zaczęła się tendencja wzrostowa, która utrzymała się do świąt. Czyli część z nas kupiła prezenty nieco wcześniej, nie czekając na ostatnią chwilę, ale byli i tacy, którzy szukali także w ostatnich dniach przed wigilią. Co warto podkreślić, ten trend nie zmienił się w ciągu ostatnich 3 lat:

Pierogi

Bo któż nie lubi dobrze przypierożyć 🙂

Karp

Karp, wiadomo, nie ma lekko w okresie świątecznym.

Barszcz z uszkami

Trend barszczu z uszkami był bardzo gwałtowny w tygodniu poprzedzającym święta.

Makowiec

Makowiec próbował walczyć w okolicy świąt wielkanocnych, jednak nie osiągnął nawet 1/4 tego co w Boże Narodzenie.

 

PyGame – pierwsze podejście do tworzenia gry 2d

W ciągu ostatnich kilka miesięcy przetestowałem mniej lub bardziej dogłębnie kilka bibliotek do tworzenia gier 2d, w celu znalezienia tego optymalnego dla mnie. Najlepsze efekty jak dotąd dawał mi język Lua i framework LÖVE, jednak dziś rolę lidera mojej klasyfikacji objął bezdyskusyjnie Python i biblioteka PyGame.

PyGame daje dużą szybkość uczenia się oraz znikomą ilość problemów związanych z samą biblioteką, zatem mogę się skupić na problemach dotyczących mechaniki mojej gry. Podstawy Pythona oraz tworzenia gier 2d posiadłem już wcześniej, natomiast PyGame ma dobrą dokumentację, łatwo dostępną choćby poprzez wyszukiwarkę Google, więc bez przeszkód na starcie, zacząłem pisać. Oto co udało mi się uzyskać po pierwszych kilku godzinach pisania (mocno przerywanych innymi zajęciami):

Grafiki kupiłem w serwisach Fotolia oraz GameDevMarket

Zaimplementowane elementy:

  • wyświetlanie grafik
  • animacja postaci
  • sterowanie postacią (point and click)
  • przechodzenie postaci pomiędzy piętrami (ukryta klatka schodowa)
  • menu startowe z elementami GUI

Wszystko zaimplementowałem obiektowo, wydzielając takie klasy jak:

  • game
  • player
  • menu
  • levels/level1
  • gui/click_pointer
  • gui/menu_button

Zapewne klas tych pojawi się znacznie więcej w dalszych iteracjach refactoringu. Warto zaznaczyć, że od razu napisałem kod tak, żeby można było napisać klasy kolejnych poziomów i podłączyć je, bez zmian w kodzie samej gry.

Kod gry udostępniłem publicznie na GitHub:
https://github.com/jakubthedeveloper/kuba-pygame1

A oto algorytm jaki zastosowałem do przechodzenia postaci między piętrai do punktu docelowego:

 

Razu pewnego była sobie gra.

Był rok 2007.

Miałem na koncie pierwsze napisane programy i strony www. Dziwnym trafem jako kompletny amator dostałem do napisania stronę klubu sportowego, który rok później został mistrzem polski. W tym momencie chciałbym z całego serca przeprosić tych, którzy po mnie ten serwis poprawiali, albowiem już po paru miesiącach od jego stworzenia poczyniłem taki progres, który pozwolił mi zrozumieć dlaczego napisałem to źle i jak powinienem to napisać poprawnie.

Dłubałem strony www dla ludzi, którzy w internecie dopatrywali się szansy rozwoju ich potransformacyjnych biznesów. . Było również coś co nie dawało mi spokoju, dopóki nie spróbuję: Stworzyć własną grę komputerową.

Miałem już za sobą pewne epizody związane z dumnie dziś nazywanym game-devem, jednym z nich była praca zaliczeniowa w studium, na którą napisałem aplikację w C++ i OpenGL w której można było chodzić po wirtualnym pokoju, w którym na ścianie wisiało moje zdjęcie, a w wirtualnym telewizorze wyświetlał się szum typowy dla analogowej telewizji, który generowany był stworzonym przeze mnie algorytmem, lubiłem się pochwalić tym co umiem, choć niewielu to wówczas rozumiało. Po tamtym projekcie zaliczeniowym nie pozostał mi nawet screenshot, szkoda. Na egzaminatorach wywarłem ogromne wrażenie, ale to nie było jeszcze to czego oczekiwałem. Dostałem solidną lekcję pod tytułem: Pisanie gier to bardzo pracochłonna praca. Wiedziałem, że stworzenie mechanizmu sterowania kamerą lub postacią, modeli, tekstur, dźwięków itd. to zbyt wiele, żeby w pojedynkę napisać grę 3d która może pójść do ludzi. Wówczas 2d mnie nie interesowało, ponieważ panował boom (hype) na 3d i nikogo już 2d nie interesowało. Błąd, bo po latach odkryłem potencjał dwóch wymiarów i musiałem się nauczyć sporo rzeczy, które mogłem poznać już kilka lat wcześniej.

W tym samym czasie nastąpił również inny boom: stały dostęp do internetu. Fakt, w 2007 roku internet już nie był żadną nowością, ale dopiero wtedy stał się rzeczą oczywistą w domu, już nie tylko w kafejkach internetowych czy na uczelniach. Pojawił się w domach ludzi nawet na wsi, a co za tym idzie, wszyscy zaczęliśmy spędzać coraz więcej czasu na tzw. surfowaniu.

Zaistniałe okoliczności oraz nabyte przeze mnie umiejętności zbiegły się w taki sposób, że postanowiłem napisać grę, która działa tylko w przeglądarce. Pomysł na zasadę działania całego silnika gry jakoś sobie poukładałem z tego co już umiałem. Tematyki długo nie szukałem, padło na politykę, z jej jasnymi i ciemnymi stronami.

Miałem tematykę, miałem pomysł na funkcjonalności, miałem pomysł jak to rozwiązać technologicznie, siadłem do pisania.

Pisałem kod w każdej wolnej chwili, kiedy tylko byłem w domu. Zaczynałem popołudniem, kończyłem o 2-3 w nocy. Zdarzało się i do wschodu słońca zasiedzieć. Wówczas każda kolejna działająca funkcjonalność była dla mnie nagrodą. Wiele opcji gry pisałem po kilka razy, zanim doszedłem do w pełni działającej funkcjonalności. Wtedy nie było jeszcze stackoverflow czy podobnych serwisów, gdzie programiści mogli znaleźć potrzebną pomoc, zatem eksperymentowałem.

Grę uruchomiłem produkcyjne w Październiku, roku 2007, początkowo rozesłałem link po rodzinie i znajomych przy pomocy Gadu-Gadu, które było wówczas standardem komunikacji.

Nastąpiła lawina: pierwszych kilka osób rozesłało link po swoich kontaktach, ci wysłali dalej i po niedługim czasie liczonym w tygodniach, miałem kilkuset użytkowników, z których aktywnych co najmniej raz dziennie była znacząca ich część. Dziś już nie pamiętam dokładnych liczb, pamiętam za to że musiałem się nauczyć naprawiać na gorąco zgłaszane błędy (stąd dziś mam mniejszy stres robiąc hotfixy). W krótkim czasie nauczyłem się co najmniej 50% tego co dziś umiem i to nie tylko w kwestiach typowo programistycznych. Do moich nowych umiejętności zaliczyłem między innymi:

  • organizacja pracy nad naprawianiem błędów i wprowadzaniem nowych funkcjonalności
  • systematyczność pracy
  • utrzymywanie maksymalnego zaangażowania w projekt
  • zarządzania serwerami
  • komunikacja z graczami
  • uczenie się tego jak gracze odbierają różne części interfejsu (user-experience, UX)

Gra pochłonęła mnie całkowicie, włącznie z tym, że z rodziną i znajomymi komunikowałem się przy pomocy wbudowanego w grę czatu. Gdziekolwiek nie byłem powtarzałem sobie w głowie wymyślone nowe funkcjonalności oraz rozwiązania problemów. Później w nocy implementowałem to wszystko przez co chodziłem ciągle niewyspany.

Byłem w takim wieku, w którym dobrze jest już mieć zarys tego, z czego będzie się żyć. Miałem kilka opcji bo działałem w muzyce, ogarniałem trochę elektronikę, głównie w kwestii audio, robiłem strony www, potrafiłem nagrać zespół muzyczny, znałem również miejscowe skupy złomu oraz butelek :p Chyba nie było takiego przełomowego momentu w którym założyłem sobie, że będę próbował zarobić na mojej grze, to wyszło jakoś płynnie, najpierw jakieś reklamy płatne za klik lub wyświetlenie, później jakieś programy partnerskie, aż w końcu nadeszły płatności sms a później również przelewy online.

Tylko że ja nie chciałem moim graczom czegoś zabierać robiąc opcje, które są dostępne tylko po zapłaceniu. Jak się później okazało, była to dobra decyzja, bo wiele innych gier padło właśnie w momencie kiedy wprowadzili opcje, dostępne wyłącznie dla płacących. U mnie płatności dawały pewien „boost”, który był jeszcze lepszy gdy odpowiednio się użyło wpłaconych środków, np. inwestując w giełdę wewnątrz gry.

Jak już wspomniałem o giełdzie to napiszę o niej nieco więcej, choć nie była to pierwszoplanowa funkcjonalność gry. Dzięki tej wirtualnej giełdzie nauczyłem się o co w ogóle w giełdzie chodzi, później poznałem mechanizmy wpływania na giełdę przy pomocy kształtowania pseudo-losowości. Spora lekcja analizy matematycznej i statystyki. Ciekawostką było to, że nazwy spółek giełdowych były przerobionymi nickami moich znajomych i rodziny, np. kolega Jurgen mógł się pochwalić, że to od jego ksywki pochodzi „Fabryka Dziurkaczy Dziurgen”.

I w tym miejscu chciałbym zakończyć moją opowieść, choć nie jest to jeszcze koniec historii gry, a zaledwie jej początek, ale o dalszej części będzie innym razem, a będzie to historia o zmianach życiowych, wzlotach, upadkach, poznanych ludziach i zajechanych klawiaturach.

Do następnego.

Problemy z internetem, a w planach dwa dni szkoleń online

Pechowo zaczął mi się dzień.
Mam dwa dni szkoleń online (w sensie: ja się szkolę, nie ja prowadzę), a tu na dzień dobry problem z internetem. Całej historii nie będę opowiadał, bo jest to nudna opowieść o wciskaniu ludziom usług, których nie potrzebują i problemach z odkręcaniem tego później. Powiem wam za to jak sobie radzę w takich awaryjnych sytuacjach.

Po pierwsze: zgłaszam awarię najszybciej jak to możliwe. Zgłosiłem o godzinie 7 rano, a technicy byli „już” o 10:30 w dodatku z błędną informacją o tym co mają zrobić :/ Olać ich, kiedyś naprawią.

Po drugie: Telefon z opcją uruchomienia routera USB. Łączę się z LTE, podłączam komputer do telefonu przez USB i mam awaryjny internet kablowy. Przez 3 godziny szkolenia na zoomie, zjadło mi ok. 580MB transferu danych. Sporo, ale dla mnie ciągłość dostępu do netu jest ważniejsza niż zużyty transfer. Wiem, że telefon mógłbym zastąpić modemem LTE, jednak przez 99% czasu taki modem mi nie potrzebny, a telefon w zupełności wystarcza.

Niestety tu gdzie mieszkam nie ma kablówki, bo to właśnie kablówkę najlepiej wspominam, jeśli chodzi o stabilność łącza.

Zasiedziałem się w projekcie

Dla obecnego mojego klienta pracuję od 2 lat i 8 miesięcy i niebawem będę go opuszczał. W związku z tym nasuwa się trochę przemyśleń nad tym czy warto pracować dla jednego klienta długo, czy lepiej jest zmieniać częściej projekty.

Na pewno po takim czasie będę musiał zmienić codzienną rutynę, bo obecna jest ściśle dostosowana do aktualnego projektu. Po takim czasie spędzonym w jednym projekcie może to być niełatwe – pewne nawyki robienia określonych rzeczy o określonych godzinach, czy w określonych dniach tygodnia trzeba będzie dostosować.

Dość istotną kwestią jest rozwijanie się. Z jednej strony pracując długo w jednym projekcie nie uczymy się wielu nowych technologii, z drugiej strony uczymy się tych kilku używanych technologii dogłębnie. To też nie jest tak, że w 100% siedzimy ciągle w jednej technologii, bo przez ponad 2 lata w moim projekcie naprawdę dużo nowych rzeczy się pojawiło. Niestety wielu technologii też przez ten czas nie użyłem, np. Symfony, w którym dawniej pisałem bardzo dużo, przez ostatnie 32 miesiące nie używałem właściwie w ogóle, przez co mam pewne braki jeśli chodzi o nowości w tym frameworku, które próbuję w międzyczasie uzupełniać, przynajmniej teoretycznie.

Na szczęście dane mi było nabyć lub rozwinąć umiejętności w innych frameworkach (Laravel, Yii, CodeIgniter) a także w innych aspektach pracy, jakich wymaga duży projekt, takich jak: analiza kodu, współpraca w teamie, praca w metodologii scrum, code review, testy i wiele innych.

Myślę, że jakość kodu jaki nauczyłem się pisać jest więcej warta niż znajomość konkretnych frameworków czy innego rodzaju technologii.

Czy wolałbym częściej zmieniać projekty? Ciężko mi odpowiedzieć na to pytanie, bo zawsze pracowałem w projektach dość długo. Wydaje mi się jednak, że projekty długoterminowe to coś dla mnie, ale pod warunkiem, że czuję że mam w nich swój własny udział, a nie jestem tylko osobą od rozwiązywania przydzielonych zadań.

Czy wolałbym pracować w projekcie jeszcze dłużej? Raczej nie. 2 i pół roku wydaje mi się maksimum w jednym projekcie i to musi być naprawdę ciekawy projekt. Żeby coś ciągnąć dłużej, musiałby to być mój własny (w całości lub częściowo) biznes.

Refleksja na temat boomu na bitcoina

W ostatnim czasie jestem wręcz zalewany reklamami coraz to nowych giełd na których wymieniać można kryptowaluty. Do tego dochodzi cała masa postów na wszelkiego rodzaju grupach dyskusyjnych z pytaniami typu: „a co to właściwie jest to kopanie?”, czyli o absolutne postawy. Całość uzupełnia medialny „hype” dotyczący kryptowalut. Wielu zatem decyduje się przyjrzeć temu bliżej i zacząć się w to „bawić”. Nie ma się co dziwić, albowiem w chwili gdy piszę ten artykuł BTC w bitmarket.pl kosztuje 44 865PLN / 10 505 EUR.

I tutaj przychodzi refleksja. Choć specem od finansów nie jestem, to złotą zasadę inwestowania znam: „Kupuj tanio, sprzedawaj drogo”. Do tego oglądając historyczne trendy kursu BTC trudno się  oprzeć wrażeniu, że bańka może znów pęknąć i to co włożymy w walutę teraz, odzyskamy dopiero za wiele lat, o ile w ogóle.

Drugą sprawą są zapaleńcy, którzy twierdzą, że jak skończą liceum, to sobie kupią koparki i będą kopać BTC i nigdy nie będą musieli pracować. Niestety, to tak nie działa. Ja próbowałem bawić się w koparki, gdy trudność sieci była dużo niższa niż obecnie, a bitcoin kosztował ok 2-3k PLN i już wtedy takie domowe kopanie generowało tylko koszty, żadnych zysków. Do tego trzeba podejść racjonalnie: odpalić kalkulator opłacalności kopania, dodać wszystkie koszty dodatkowe (pomieszczenie, chłodzenie, itd.) i koniecznie wziąć pod uwagę rosnącą trudność sieci. To na pewno nie jest coś co jest w zasięgu finansowym przeciętnego studenta.

Nie chcę tym artykułem zniechęcać ani potencjalnych inwestorów, ani potencjalnych górników, tym bardziej że sam mocno kibicuję kryptowalutom (nie tylko BTC). Jednak najpierw wiedza, później praktyka – inaczej możecie się bardzo boleśnie poślizgnąć.

Praca w domu

W chwili pisania tego tekstu mam na koncie około 6 lat ciągłej pracy w domu, w dwóch różnych firmach. Jestem zatrudniony na umowę o pracę, pracuję dla klientów z Europy oraz USA. W projekcie klienta jestem częścią zespołu scrumowego, biorę udział w spotkaniach, aktywnie uczestniczę w projekcie, w którym jest mnóstwo osób pracujących w jednym z biur w Europie lub USA.
Jak to możliwe? Czytajcie dalej.

Powody dla których wybrałem pracę w domu

Nie ma jednego konkretnego powodu, dla którego zdecydowałem się na taki sposób pracy. Złożyło się na to wiele czynników:

  • Chciałem uciec z miasta
  • Praca w biurze była dla mnie mniej efektywna niż praca z domu – biuro nie daje mi takich warunków do skupienia się na programowaniu.
  • W biurze ciężko było mi zorganizować różnego rodzaje „odskocznie” – w domu gdy potrzebuję oderwać się od kodu, gram sobie na gitarze czy syntezatorze, a gdy mam rozmowę przez telefon to mogę wyjść sobie do ogródka. Wiem że obecnie w biurach są coraz fajniejsze play-room’y, ale raczej trudno jest o to, żeby zapewniały rozrywki dostosowane do indywidualnych zainteresowań.
  • Nie tracę w ciągu dnia ani minuty na dojazdy do pracy, przez co mam więcej czasu prywatnego
  • W domu mogę słuchać muzyki na głośnikach, nie tylko na słuchawkach 🙂

Trudności związane z pracą w domu

  • Konieczne jest nauczenie się samodyscypliny i samoorganizacji
  • Trzeba nauczyć rodzinę, znajomych i sąsiadów, że mimo że jestem w domu to w godzinach pracy jestem w pracy
  • Należy zadbać o odpowiednie warunki pracy – tzw. home-office. Składa się na to odpowiednie pomieszczenie, biurko, sprzęt, siedzisko
  • Udział w meetingach przy pomocy telekonferencji bywa uciążliwy, zwłaszcza jeśli rozmówców jest kilku i siedzą oni razem w meeting-roomie. Wówczas mają oni między sobą lepszy kontakt niewerbalny, przez co Ja muszę być bardziej skupiony, żeby wyłapać każdy ukryty sens.

Jak sobie zorganizować pracę w domu

Pierwszą rzeczą o której musisz zdecydować to czy zostajesz w obecnej firmie czy chcesz ją zmienić. W pierwszym przypadku może nastąpić taka trudność, że pracodawca się po prostu nie zgodzi na pracę 100% zdalną. Drugi przypadek daje już nieco więcej możliwości, ponieważ aktualnie w ogłoszeniach pracy można znaleźć całe mnóstwo ofert dopuszczających pracę w 100% zdalną, z dowolną formą współpracy (umowa o pracę, B2B i inne).

Jeśli już się zdecydujesz i przejdziesz ewentualne rekrutacje musisz sobie wziąć do serca kilka rad, które Ja swojego czasu otrzymałem od kogoś doświadczonego w temacie i trochę do nich dodałem od siebie:

  • Pracujesz w określonych godzinach (np. 8-16). Nie możesz kierować się zasadą: o której wstanę, o tej zacznę pracę. Budzik nadal obowiązuje.
  • W godzinach pracy nie masz innych zajęć, typu opieka nad dziećmi, gotowanie obiadu czy przyjmowanie znajomych.
  • Musisz zadbać o to, żeby mieć na czym pracować: nieawaryjny komputer, zasilanie awaryjne (UPS), zapasowe połączenie do internetu (np. ADSL jako główne, LTC jako backup)
  • Nie sprawiaj wrażenia osoby „wirtualnej” – kontaktuj się z teamem, rozmawiaj, dyskutuj. To bardzo ważne, bo jeśli tego nie będziesz robić, team może o Tobie zapomnieć podczas organizacji jakiegoś meetingu, przez co ominą Cię np. ustalenia projektowe i w rezultacie Twoja praca może pójść do kosza, bo będzie niezgodna z ustaleniami.
  • Praca nie ma być dodatkiem do siedzenia w domu – czyli nie siedzisz sobie przed telewizorem, co chwila zerkając tylko w kod. Masz warunki, wykorzystaj je konstruktywnie.

Co dalej

Zapewne nie raz jeszcze napiszę o pracy zdalnej, dlatego zapraszam do regularnego sprawdzania mojego bloga.

Na czym siedzę

Od trzech lat zmagam się z dyskopatią.

Diagnoza po wykonaniu rezonansu magnetycznego: przepuklina jądra miażdżystego L5-S1. Radzę sobie z tym różnie, ale o metodach terapii może kiedy indziej. Dziś chciałbym się skupić na tym, co w pracy programisty może nie stanowi kwestii pierwszoplanowej, ale jest niezmiernie istotne, a mowa o wszystkim tym na czym siedzimy.

Siedzisko programisty to najczęściej fotel biurowy (zwłaszcza w biurach). Ja również takiego używam, ale zamiennie z innymi siedziskami: piłką gimnastyczną i klękosiadem. Wszystkie opcje mają swoje wady i zalety, które postaram się tutaj subiektywnie opisać.

Krzesło/Fotel

Opcja standardowa, czyli krzesło biurowe, obrotowe, z regulowaną wysokością, z podłokietnikami. Ja obecnie używam takiego:

Zalety:

 Wygoda

 Możliwości regulacji / dostosowania

 Duży wybór modeli, w szerokim zakresie cenowym

Wady:

 Nie sprzyja wyrabianiu nawyków służących prawidłowej postawie

 Potrafi rozleniwić

Piłka

O taka:

Zalety

 Utrzymuje kręgosłup w ruchu podczas pracy siedzącej

 Można jej używać również do ćwiczeń

 Można na niej leżeć np. podczas czytania książki czy oglądania filmu, odciążając tym samym kręgosłup

Wady

 Potrzeba czasu, żeby nauczyć się prawidłowo siedzieć

 Brak oparcia dla pleców, przez co ciężko wysiedzieć kilka godzin

Klękosiad

Zalety

 Wymusza prawidłową postawę

 Niewielkie rozmiary i duża mobilność

Wady

 Przy długotrwałym użytkowaniu zaczynają się pojawiać problemy z kolanami

 

Podsumowanie

Niestety nie ma jednego idealnego siedziska, chyba że mówimy o jakiś wartych miliony złotych monet rozwiązaniach od NASA 😉 Można jednak sobie dobrać siedzisko w zależności od potrzeby chwili. Zdaję sobie oczywiście sprawę, że ciężko trzymać w biurze fotel, piłkę i klękosiad, niemniej polecam spróbować przynajmniej dwóch z tych opcji. W przypadku krzesła, po kilku miesiąc użytkowania może się w nim zbić gąbka – polecam wtedy kupić nakładkę na krzesło, dostosowującą się do pleców siedzącego.

Początek

Stało się

Założyłem wreszcie ten blog. Nosiłem się z tym zamiarem już jakiś czas, ale zawsze było coś nie tak: albo miałem wątpliwości co do tematyki, albo już miałem instalować wordpressa, kiedy dostałem info, że mam hotfixa do zrobienia i temat bloga się zawsze jakoś rozmywał.

Teraz, kiedy już dokonałem dzieła stworzenia, postaram się, żeby dzieło to się rozwijało.

O czym będę pisał?

Pracuję jako programista PHP. W pełni zawodowo zaczynałem ok. roku 2005, wcześniej jakieś zlecenia, itp. Napisałem również trochę rzeczy w innych językach (c++, python, java, ruby). Od ok. 6 lat, pracuję zdalnie, z domowego zacisza (choć „zacisze” to nie zawsze jest trafione słowo). Poza programowaniem zajmuję się również muzyką (gitara basowa, instrumenty klawiszowe, produkcja).

Mam 33 lata, żonę, dzieci, dyskopatię i nie lubię zimy. Więcej grzechów nie pamiętam. Nie za wszystkie żałuję.