Pokazywanie postów oznaczonych etykietą rozmyslania. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą rozmyslania. Pokaż wszystkie posty

czwartek, 14 czerwca 2012

Ekologia kosztuje


Poniżej zdjęcie zjawiska jakie ostatnio zaobserwowałem na poczcie.


Może nie najlepiej to widać, ale mamy tutaj po lewej stronie ekologiczne koperty na listy, wyprodukowane z papieru z odzysku, 25 sztuk. Papier szary miękki i brzydki. Kosztują one 1,29 Euro. Po prawej mamy również 25 kopert, z białego papieru, eleganckie, miłe w dotyku. Kosztują niecałe 1 Euro.

No i niech mi ktoś wytłumaczy, dlaczego koperty produkowane z odzysku są droższe od tych normalnych, wystruganych ze świeżych drzew? Czy przetwórstwo starego papieru jest droższe od wyprodukowania nowego papieru? A może chodzi o modę na wszystko co jest ekologiczne i Bio? A może zamówień na papier z odzysku jest tyle, że trzeba go dodatkowo ze świeżego surowca wytwarzać?

Zdrowy rozsądek podpowiada, że papier z odzysku powinien być tańszy, więc tym bardziej nie mogę się nadziwić o co chodzi.

sobota, 2 czerwca 2012

Różnice międzykulturowe, czyli zaskakujące fakty z życia w Niemczech

Już kiedyś pisałem (we wpisie: Hamburg wrażenia po miesięcznym pobycie) na temat tego jak to wygląda świat u naszych zachodnich sąsiadów. Dzisiaj czas na kolejną część życiowych ciekawostek i różnic międzykulturowych.

W Hamburgu mówią na lotnisko airport, zamiast niemieckiego Flughafen, jak to jest w większości lotnisk w Niemczech. Hamburg stara się być bardzo światowy przez to. Ponadto lotnisko to znajduje się w centrum miasta, przez co jego godziny działania są ograniczone. Nic tam nie ląduje (chyba że awaryjnie) w nocy, aby dać się wyspać okolicznym mieszkańcom. Dało się to odczuć, gdy się przylatywało późnym lotem do Hamburga, a lotnisko było niemal opustoszałe. Panująca pogoda w Hamburgu (albo pada, albo jest mgliście) jednak nie zachęca do tego, aby tam mieszkać na stałe, choć miasto samo w sobie jest piękne.

Wynajem mieszkań
Bardzo odmiennie wygląda sprawa wynajmu mieszkań w Niemczech. Bardzo ciężko jest tutaj znaleźć umeblowane mieszkanie. W Niemczech jak chce się wynająć mieszkanie, to jest to zazwyczaj jest ono w stanie surowym. Jak piszą w ogłoszeniu że jest odnowione, to znaczy że ściany są zagruntowane, pod stopami sterczy beton, a meble to trzeba sobie samemu skombinować.

Nie do końca rozumiem skąd wynika taka filozofia, ale chyba z przeświadczenia, że nowy najemca na pewno będzie chciał mieć inną podłogę niż obecny, więc na wszelki wypadek wyrzućmy ją zawczasu na śmietnik. Podobnie z meblami, kuchnią, lodówkami i innymi starymi gratami, tylko te zazwyczaj lądują na ulicznych wystawkach. I teraz właśnie rozumiem skąd ich tu tyle. I rozumiem biznes naszych, którzy jeździli kiedyś masowo do Niemiec, aby coś ciekawego znaleźć, zwieść do Polski i popchać dalej. Z drugiej strony takie podejście nakręca gospodarkę. W Polsce podczas przeprowadzki wiezie się zazwyczaj wszystkie graty ze sobą, a tutaj wyrzuca i kupuje nowe.

W mieszkaniach często nie ma pralek, ale za to zazwyczaj są gdzieś w piwnicach, tzn. w pralniach. W Polsce piwniczne pralnie / suszarnie zazwyczaj się przerabiało na jakiś składzik, rowerownię, siłownię, lub po prostu miejscówkę do spędzania czasu i picia piwa. Jako że porządek w Niemczech musi być, to korzystanie z pralki w pralni jest odpłatne. Mianowicie jak już w poprzednim wpisie wspominałem, że należy wrzucić zazwyczaj kilka 50 centówek. No tak tylko co jak się ich nie ma? Można rozmienić w sklepie. Proceder chyba na tyle popularny, że niektóre stacje benzynowe mają specjalne maszyny do rozmieniania pieniędzy. I to lepsze niż w autobusach, gdzie kierowca musi wrzucić monety do odpowiednich przegródek. Tu po prostu ładuje się do maszyny monetę, coś tam klika i wylatują pieniążki w żądanym nominale. Maszynka może chyba również działać w druga stronę, czyli zliczać klepaki. Mnie zaczęło zastanawiać, czy to po prostu wygoda, ograniczenie błędów w liczeniu przez człowieka, czy też ogłupianie społeczeństwa, które nie umie już pieniędzy rozmienić?

Wspominałem już kiedyś, że nie wszędzie karty płatnicze są akceptowane. Jeśli nie jest to karta EC to można się nieźle zdziwić przy kasie. Nawet w dużych sklepach często jest z tym problem. Raz gdy stałem w kolejce w sklepie i byłem przyczyna małego zamieszania związanego z niemożliwością obsłużenia mojej karty, to gościu w kolejce co stał za mną, zaczął tłumaczyć, że jak karta nie jest EC to sklep większą prowizję płaci i przez to mało który sklep chce je akceptować. Dobrze że Visa i MasterCard działają jeszcze w bankomatach.

A propo bankomatów. Zauważyłem tutaj, że niektóre bankomaty są na tyle fajne, że jak chcę wypłacić 100 E to mi wypluwają banknoty: 50E 20E 10E 10E 5E i 5E. Dzięki czemu w poniedziałek rano w piekarni wszyscy nie chcą płacić stówkami, a biedna pani z za lady nie wyrywa sobie włosów z głowy, bo nie ma z czego wydać. Bardzo fajne rozwiązanie, w końcu ktoś pomyślał.

Innym kolejnym ciekawym zjawiskiem jest brak numerów mieszkań w blokach. Gdy podajemy komuś nasz adres, to ważna jest ulica i numer bloku, a numer konkretnego mieszkania jest już zależny od nazwiska odbiorcy. Jak nazwiska nigdzie nie ma to lipa - przesyłki nie będzie. W Polsce ustawa o ochronie danych osobowych na to nie pozwala i korzysta się z numerów mieszkań. Nawet już na domofonach w Polsce nie można pisać nazwisk. A tutaj są wszędzie: na domofonie, skrzynkach pocztowych, przy dzwonku do drzwi. Dla tego lepiej zadbać o to aby nasz nazwisko było w tych wszystkich miejscach.

Ludzie ogółem są tutaj w ogólności milsi jak w Polsce. Chętnie i częściej mówi się tutaj dzień dobry, nawet jak się mieszka w wieżowcu. W Polskim blokowisku jest się bardziej anonimowym, chyba że zaszliśmy sąsiadom za skórę. Inaczej też wygląda tutaj pozdrawianie się tutaj przy niektórych aktywnościach. W Polsce jak się biega po parku, jedzie rowerem / motorem / tramwajem, to się macha, gdy mijamy osobę robiącą to samo. Tutaj tego nie robi.

W Niemczech łatwo wpaść w konflikt z sąsiadami. Czasem wystarczy, że jest trochę za głośno, a ściany są cienkie. Wtedy parę donosów i będą podjęte próby usunięcia szkodnika. Inaczej sprawa wygląda jak się ma małe dziecko. Wówczas to nic nie można takiej rodzinie zrobić i szybciej wredny sąsiad przestanie z nami rozmawiać i się w końcu wyprowadzi gdzieś gdzie będzie miał więcej ciszy i spokoju. Jest to typowe dla Niemców.

Z drugiej strony jak kiedyś pilarką przycinałem panele na korytarzu to przyszedł do mnie sąsiad i zaczął coś tam nawijać. Myślałem właśnie że zakłócam jego dzień wolny od pracy. Okazało się, że chce on mi pomóc i pożyczyć jakieś narzędzia, jakbym potrzebował. Bardzo pomocna postawa, pochwalam. Nie skorzystałem, gdyż akurat miałem to, co mi było potrzebne.

Ciekawą jeszcze sprawą jest cisza nocna. O ile w Polsce jest to od 22 do 6 rano, to w Niemczech dodatkowo dorzucono ciszę w godzinach 13.00-15.00. Pytałem dlaczego, to usłyszałem, ze jest to po to, aby starsi ludzie mogli sobie przyciąć komara. Dodatkowo również przez całą Niedzielę i święta ma być cisza. Obowiązuje ona również chorych a także osób, które muszą pracować w trybie wielozmianowym. Fajny jest jeszcze zapisek, proszący o niekąpanie się między 22.00 a 6.00 ze względu na sąsiadów. Dobrze że inne potrzeby fizjologiczne można jeszcze w tym czasie załatwiać ;)

Inaczej się tutaj jeszcze obchodzi niektóre święta. O dniu kobiet nikt nie pamięta, a dzień matki jest w inny dzień niż u nas. Ciekawy za to jest dzień ojca (a raczej mężczyzny). Podczas tego święta (wypada on w dzień wniebowstąpienia) faceci najczęściej organizują sobie Bollerwagen, czyli wózek na kołkach, do którego ładują alkohol i spacerują po mieście dobrze się bawiąc. Niektórzy dodatkowo usprawniają całość dodając elektryczny napęd (co by się łatwiej ciągło / pchało) i/lub głośną muzykę. Przykład poniżej.



Niektórzy jeszcze organizują sobie takie same koszulki (na zdjęciu są one niebieskie z napisem Schnaps - wódka), dzięki czemu wiadomo kto może korzystać z dobrodziejstwa jakie daje wózek. Nad całością zabawy czuwa policja, która jest w ten dzień bardziej widoczna na ulicach niż zwykle. Interweniuje ona jednak dopiero gdy rzeczywiście trzeba.

sobota, 5 maja 2012

Przyszłość języków programowania, czyli kiedy i kto wygra nadchodzącą rewolucję?

Kiedyś na blogu Touching the Void przeczytałem ciekawego posta: 30 lat z życia programisty. Zaciekawił mnie ten artykuł i od jakiegoś czasu bacznie obserwuję sytuację, wypatrując następcę programowania obiektowego.

Ogółem z artykułu wynika, że co 8-10 lat jest jakaś globalna rewolucja w świecie programowania, co sprawia, że wszyscy się masowo przerzucają na dany język (czy tez bardziej ogólniej: na inny paradygmat programowania). Java już swoje przeżyła / dożywa...

Jaki język zastąpi Javę?

Ogółem świat dąży do tego, aby stworzyć taki język, że specyfikacja klienta będzie wykonywalnym programem. Niektórzy twierdzą, że wtedy programiści nie będą już potrzebni, ale pewnie nawet jak jakiś tego typu język powstanie, to i tak trzeba będzie zapisać tą specyfikację w odpowiedni sposób (czyli przez programistę). Przejawy dążenia w tym kierunku widzę w Spring Roo i w coraz popularniejszych DSL’ach (np. w Scali). Jednak raczej się nie zapowiada, aby taki kompletny język specyfikacji w najbliższym czasie powstał. Pewnie tęgie głowy na nie jednej wyższej uczelni próbują coś takiego stworzyć (albo chociaż opracować podstawy teoretyczne), ale chyba póki co chyba bez większych sukcesów – przynajmniej ja nie znam.

Wracając jednak do świata komercyjnego, to Java króluje na scenie już ponad 10 lat. Obecnie do głosu powoli dochodzą (wg. mnie i w/w. wpisu) języki funkcyjne. Wystarczy spojrzeć na to ile się o nich mówi na konferencjach. Wydaje się, że niedługo nastąpi ich czas. A może zaskoczy nas coś całkowicie innego? Może coś z kreowane przez konkurencję JVM’a? Może jakiś inny pragdygmat? Może w końcu powstaną komputery kwantowe?

Chcąc analizować popularność języków programowania warto się przyjrzeć statystykom prezentowanym na portalu tiobe.com. Ranking jest ogółem wyliczany na podstawie statystyk wyszukiwania na popularnych stronach takich jak Google, Blogger, Wikipedia, jak i na YouTube i Amazonie. Ważna jeszcze jest wartość „page hits”.

Źródło: tiobe.com, dostęp: 04.05.2012


Pierwszym zaskoczeniem jest język C, który cały czas się trzyma wysoko, a teraz nawet przegonił Javę. Podobno niektóre uczelnie wyższe powoli przestają go uczyć, ale ranking ten wskazuje, że to chyba błąd.

Kolejną ciekawostką jest bardzo szybka rosnąca popularność Objectiv-C. Jednakże język ten jest skierowany do specyficznej grupy odbiorców i nie zapowiada się, aby wyszedł po za nią.

Ciekawy jest też wykres dla Rubiego. Generalnie Wujek Bob mówił, że jakiś czas temu w Stanach było najłatwiej znaleźć pracę programistom rubina, jednakże teraz ta sytuacja się już zmienia i raczej odchodzi się od tego języka. Potwierdza to wykres jego popularności.

Tak można by było jeszcze analizować i analizować, ale zostawiam to Wam do własnej oceny i interpretacji. Wróćmy do głównego wątku, czyli co z tymi językami funkcyjnymi?

Patrząc na tabelki i wykresy można dostrzec, że jeśli chodzi o programowanie funkcyjne, to najwyżej stoi Python (8. miejsce), Perl (10.) i Lisp (15.). Nie są to języki, które są tylko funkcyjne, ale posiadają również cechy innych paradygmatów programowania. Dalej w zestawieniu jest jeszcze kilka języków z paradygmatem funkcyjnym. Natomiast Scala, która jest mocno promowana na konferencjach javowych, jest dopiero 45, a Clojure znalazł się po za pierwszą 50dziesiątką. Fakt faktem Tiobe może niekoniecznie jest najlepszym wskaźnikiem do porównywania popularności języków, ale nie znam innego podobnego zestawienia, pokazującego zmianę w czasie.

Mnie zastanawia dlaczego jeszcze nie pojawił się / jaki będzie język obecnej dekady, na który by się masowo przesiadało większość firm, tworząc oprogramowanie w tym języku, zamiast w Javie. Przyszło mi do głowy kilka przyczyn.

Według mnie największym mankamentem nowych języków programowania, jest brak narzędzi. Brakuje dobrych, rozwiniętych i stabilnych środowisk IDE. W Javie mamy IntelliJ Idea, gdzie automatyczny refaktoring jest bezbolesny, narzędzie podpowiada składnie zależnie od kontekstu i wie co chcemy napisać. Eclipse jest trochę słabszym narzędziem, ale znam takich co są z niego zadowoleni. Obecne dostępne IDE tak nas rozpieściły swoimi możliwościami, że aż nie chcemy siadać do jakiegoś języka, gdzie nie ma porządnego wsparcia ze strony środowiska programistycznego. Dla tego ja osobiście mocno kibicuję Kotlin’owi, który powstaje od razu ze wspierającym go IDE - aby mu się udało.

Inną bolączką nowych języków, jest brak (lub niewielka wciąż ilość) informacji, o dużych projektach, które się udały w nowopowstałych językach. Dla przykładu Twitter z Ruby’iego przenosi swoje główne elementy na JVM’a (Więcej na ten temat we wpisie: 33 degree 2012 dzień 1). To na pewno nie przystworzyło to Rubiemu popularności, co widać na wykresie.

Innym tematem, który sam doswiadczyłem na przykładzie Scali, jest ewolucja składni w przypadku nowych języków. Niby było zapowiadane, że Scala do kiedyś tam może być niekompatybilna wstecz, ale się odechciewa, gdy uruchamiając przykłady z tutoriala / książki na nowszej wersji, starsza składnia nie jest akceptowana.

Kolejną sprawą jest to, co się obecnie uczy młodych adeptów sztuki programowania na studiach informatycznych i pokrewnych. Cały czas wiodące języki, od których się zaczyna, to C/C++ i Java. Co do języków funkcyjnych, to kojarzę że na jakimś kursie w połowie studiów był Lisp, ale do tego czasu większość już się nauczyła nie chodzić na zajęcia, a i tak mimo tego zaliczać. Zresztą jaką tu mieć motywację do nauki czegoś, gdzie nie bardzo się widzi, aby którykolwiek pracodawca wymagał tego wynalazku przy rekrutacji?

Teraz każda firma / instytucja / przedsiębiorstwo, chce mieć jakieś oprogramowanie. Najlepiej szybko dostarczone, aby móc wyprzedzić konkurencję i aby zastąpić człowieka tam gdzie się da. Powoduje to, że projektów jest coraz więcej, a na to potrzeba więcej ludzi. Kiedyś (podobno – słyszałem z opowieści starszych), na studia informatyczne było o wiele ciężej się dostać, ale przez to trafiali na nie tylko zapaleńcy. Obecnie dalej nie jest łatwo, ale miejsc jest trochę więcej i mamy alternatywę po za uczelniami państwowymi. Potrzbujemy więcej zasobów ludzkich, ale jak fajnie zuaważyl Michał Bartyzel (autor bloga od którego rozpocząłem ten wpis) w poście: Craftsmanship nie dla wszystkich?, nie potrzebujemy w projektach samych wymiataczy. Wystarczy kilku rzemieslników, a reszta to moga być przeciętniaki, którzy robią od 8 do 16 i są niereformowalni.

Tak więc mamy grupę ludzi, która chce podążać za zmianami, być na bieżąco i nie skończyć jako dinozaury. Mamy też przeciętniaków którzy będą niechętni na całkowitą zmianę języka, lub jego wprowadzenie do projektu obok Javy. Musieli by oni wówczas poznać nowa składnię, przez co poczucie ich bezpieczeńswa / pewności zostałoby zaburzone. Niby nauka nowego języka nie powinna być dla nas problemem (w końcu podczas studiow się pisało w różnych dziwnych rzeczach), ale niektórzy mają ku temu spore opory w swojej pracy.

Co do samej ilości programistów, to problem z wyszkoleniem (wyprodukowaniem) odpowiedniej ich liczby, dobrze widać na zachodzie. Przykładowo w Niemczech, powstały już takie Hochfachschule (nazwałbym to wyższą zawodówką), które szkolą osoby pod konkretne technologie. Tzn. trwają one krócej niż normalne studia, a nacisk kładą na praktykę, ograniczając teorię do minimum. Bo i po co to komu? Na studiach to jest potrzebne, bo liczy się na to, że jednak ktoś z grona studentów pójdzie w stronę doktoratu, zostanie na uczelni i będzie przekazywał zdobytej wiedzy kolejnym pokoleniom studentów, a także rozwijał dalej teorię. Wspomniani absolwenci wyższych zawodówek idą do pracy, robią co do nich należy i jakiejś szczególnej wagi do dalszego rozwoju nie przykładają.

Wydaje mi się, że przez to robi się okopy w projektach, aby na wszelki wypadek się zabezpieczyć przed niedoświadczonymi świeżakami (lub przeciętniakami), którzy potencjalnie mogą używać powierzonych im narzędzi w niewłaściwy sposób. Moim ulubionym przykładem, jest dopisywanie w Javie, podczas zachowywania modyfikowanego pliku, słowa final, w prawie wszystkich możliwych miejscach (to jest do pól klasy, argumentów metod i zmiennych lokalnych). Kiedyś może to i miało sens, jak chcieliśmy trochę na wydajności zyskać, ale obecnie zaciemnia to kod i słowo final traci przez to swoje znaczenie. Oczywiście jest to sensowne, aby przy deklaracji pól klasy używać final, jeśli tylko raz przypisujemy im wartość, ale w pozostałych przypadkach nie ma to sensu. Po prostu próbujemy się zabezpieczyć przed tego typu kodem:

public static void main(String[] args) {
    int x = 5;
    System.out.println(x);
    half(x);
    System.out.println(x);
}

private static void half(int x) {
    x = x / 2;
}

Czyli ktoś chciał zmienić wartość x, zapomniał jednak jak działa przekazywanie prymitywów do metod.

Innym przykładem który lubię, jest konkatenacja Stringów za pomocą plusa. Kiedyś twierdzono, że to zło, gdyż były tworzone spore ilości chwilowych obiektów, aby zbudować jakiś dłuższy tekst. Zastępowano więc plusa takimi łańcuszkami ze StringBuilder'em. Obecnie kompilator robi to za nas, zamieniając plusa na StringBuilder’a automatycznie, a my zystujemy trochę na czytelności. I nie miał bym nic przeciwko, jeśli po takim uargumentowaniu, reguła ta, została by usunięta z findbugs’a. Jeśli jednak osoba mająca władzę, odnośnie konfiguracji tego typu narzędzi, jest niereformowalna (albo jakaś polityka jej nie pozwala), to trzeba się z tym pogodzić. A to hamuje nasz / projektu rozwój. Sprawia, że nie walczymy o zmiany, tylko z pokorą przyjmujemy na siebie to co kiedyś ktoś wymyślił i wprowadził do projektu.

A gdyby zamiast całych tych śmieszny regół, nauczyć ludzi pisać czysty kod – czy świat nie byłby lepszy? Niestety nie wszystkie firmy / projekty da się do tego przekonać (w myśl zasady nie piszesz to nie wytwarzasz wartości dodanej). Po za tym findbugs i checkstyle to swoiste baty na programistów, za pomocą których można im pokazać, że coś jest z ich kodem nie tak. Czasem pomaga to zmusić kogoś opornego do refaktoringu. Czy nowe języki programowania posiadają tego typu narzędzia? Z pewnością pomogły by im one zaistnieć.

To chyba tyle z mojej strony, jeśli chodzi o zbilżającą się rewolucję w programowaniu. Pewnie jeszcze jakieś interesujące powody by się znalazły, dlaczego ciężko jest się wybić innym językom na tyle, aby aktualny świat programowania obiektowego, wywrócić do góry nogami. Czekam na Wasze komentarze, jakie Wy macie poglądy na ten temat, jak i bacznie wypatruję następcę Javy. Jak będziecie wiedzieć, kto będzie następny, koniecznie dajcie znać!

piątek, 30 marca 2012

Nowa ksiazka o testowaniu jednostkowym


Dnia 28 marca 2012 pojawiła sie oficjalnie książka: Practical Unit Testing with TestNG and Mockito napisana przez Tomka Kaczanowskiego. Wspominałem w jednym z poprzednich wpisów (na temat testowania wyjatków), że ta książka nadchodzi. Już oficjalnie jest dostępna do kupienia na practicalunittesting.com do czego zachecam.

Dlaczego o tym pisze?

Powodów jest kilka.

Po pierwsze jest to książka polskiego autora (co prawda po angielsku, ale spolszczenie jest w przygotowaniu), a tych należy wspierać. Łatwiej (podobno) jest napisać książkę techniczną po angielsku i później ją przetłumaczyć na nasze, niż pisać po polsku i później się męczyć.

Po drugie jest to kompletny, uporządkowany i aktualny zbiór technik z przykładami, jak pisać dobre testy. Książka wyjaśnia wszelkie wątpliwości związane z nazewnictwem, konwencjami i dobrymi praktykami, jak i daje wiele cennych wskazówek.

Dla kogo jest ta książka?

Książka jest bardzo dobra dla osób, które chcą właśnie zacząć pisać testy jednostkowe do swojego kodu i nie wiedzą jak wystartować. Książka wprowadza krok po korku do lepszego świata kodu pokrytego testami. Również dla startych wyjadaczy znajdzie się sporo cennych informacji. Dalsze rozdziały książki omawiają zaawansowane zagadnienia ze świata testowania. Tomek wskazuje również dobre praktyki jak pisać testy, a także prezentuje narzędzia powiązane z nimi(jak catch-exception czy testy mutacyjne).

Dlaczego więc się wypowiadam o tej książce, skoro dopiero co się ukazała?

Dobra, dość tej krypto reklamy, czas na konkrety ;)

Powodem dla którego piszę na blogu o tej książce, jest fakt, że brałem udział w jej powstawaniu. Mianowicie robiłem korektę (review) książki, za co dostałem podziękowania uwiecznione na jednej ze stron w książce:
In various different ways a number of people have helped me with writing this book – some by giving feedback, others by comforting me in times of doubt.
Marcin Stachniuk was the first person to offer to review the book in the early stages of its being written, and at the same time the most persistent of my reviewers. He read every part of the book and gallantly overcame the obstacles I frequently put in his way: frequent releases, constant juggling of the contents, minor piecemeal adjustments, etc.
Nadszedł teraz czas podzielenia się moimi wrażeniami ze wspólnej pracy z autorem.

Wszystko zaczęło się na konferencji GeeCON 2011 w Krakowie, Podczas (za)ostatniego dnia konferencji (tzw. Community Day) Tomek miał swoją prezentację pt.: Who watches the watchmen? - on quality of tests. Na prezentacji trochę się wynudziłem, gdyż otarłem się już o większość omawianych tam zagadnień. Pod koniec jednak prelegent pochwalił się, że właśnie pisze książkę o testach. Wówczas jeden z uczestników (nazwisko do wiadomości redakcji) zaproponował, że chętnie by zrobił review jego książki. Bardzo zaciekawiła mnie ta inicjatywa, i mimo iż wszyscy już wychodzili z sali, zostałem chwilę dłużej, aby przysłuchać się rozmowie na temat recenzowania książki.

Tomek zaproponował aby chętni się do niego zgłosili mail’owo, aby ustalić szczegóły współpracy.  I tak to się zaczęło. Stwierdziliśmy, że najlepszą formą wymiany informacji będzie założona na Google prywatna grupa dyskusyjna, poprzez którą Tomek będzie podsyłać nowe wersje książki. Tym kanałem można również podyskutować i wyjaśnić ewentualne kwestie sporne. Rozwiązanie to sprawdziło się.

Preferowanym sposobem zgłaszania uwag, było odsyłanie aktualnego pdf’a ze wstawionymi komentarzami w teksie, w formie żółtych karteczek. Funkcjonalność taką daje nam Foxit Reader. Dzięki temu Tomek widział dokładnie, którego miejsca dotyczy uwaga. Było to również wygodne dla mnie, gdyż fragmenty czytałem na ekranie komputera. Niektórzy zgłaszali swoje uwagi w postaci wiadomości na grupie, ale dla mnie żółte karteczki i tak były lepsze, gdyż dokładniej wskazywały miejsce, gdzie jest coś nie tak.

Na podstawie e-maili naliczyłem jakieś 20 „release’ów” książki, tzn. fragmentów, które Tomek podsyłał do korekty. Początkowo przychodziły pojedyncze rozdziały do czytania, ale lepszym wyjściem, jak się później okazało, było podsyłanie całości. Dzięki temu nie było rozdziałów wyrwanych z kontekstu i było widać ogólnego zarys całości książki, w którą stronę ona dąży.

Koleje wersje pojawiały się z różną częstotliwością. Czasem było kilka w tygodniu, a czasem była cisza przez dłuższy czas. Ale to już była kwestia Tomka jak sobie organizuje pracę nad książką. Ze swojej strony mogę powiedzieć, że często nowe wersje się pojawiały, jak akurat mocno byłem zajęty innymi sprawami i niemiałem możliwości aby usiąść od razu do lektury. Kilka razy dogoniła mnie kolejna wersja i wtedy już trzeba było się zmobilizować i przeczytać to co tam Tomek naskrobał :)

Co do zgłaszanych uwag, to Tomek zazwyczaj je akceptował. Jak nie widziałem poprawy w następnej wersji, to początkowo się czepiałem, że moje sugestie są nieuwzględniane, ale w późniejszym czasie doszedłem do wniosku, że nie powinienem się tym przejmować. W końcu to książka Tomka i Jego koncepcja, a nie moja. Jedynie sprawy edytorsko/estetyczne (zła czcionka, rozjeżdżające się tabelki) były dla mnie bardzo irytujące, ale to chyba przez spędzenie dawniej sporej ilości czasu z LaTeX’em. Tomek postanowił zostawić to sobie na sam koniec, przez co ciągle widziałem te niedoskonałości. To była chyba jedyna pierdółka, która mi troszkę przeszkadzała w naszej współpracy.

Moje zaangażowanie zostało wynagrodzone cytowanymi wyżej podziękowaniami w książce (Dzięki Tomek!). Właściwie to nie nawet nie ustaliliśmy szczegółów współpracy, tzn. co ewentualnie będę z tego miał. Do samego końca nie wiedziałem nawet, czy pojawią się te podziękowania w książce (po cichu na nie liczyłem). W końcu w jednej z ostatnich wersji książki zobaczyłem, że są :) Świadczy to o tym, że moje zaangażowanie było kompletnie non-profit.

Podsumowując współpracę cieszę się, że wziąłem udział w tym przedsięwzięciu. Było to bardzo ciekawe doświadczenie i mogłem przez to poznać proces powstawania książki. Robienie review sprawia wielka frajdę, czego zwieńczeniem jest oczywiście ukazanie się książki „na produkcji”. Szczerze polecam każdemu zaangażowanie się w tego typu akcję.


Btw. Co do relacji z 33 degree (kilka osób już o nią pytało), to musi ona jeszcze poczekać kilka dni, z powodu natłoku innych zajęć (w tym korekty ostatecznej wersji książki Tomka), jak i obecnych sporych zmian życiowych.

niedziela, 20 listopada 2011

Problem sponsoringu konferencji


Wielu znajomych (i tych mniej znajomych) pyta mnie czasem o to, czy skoro tak licznie jeżdżę po konferencjach Javowych (w tym roku już 4 a to jeszcze nie koniec), to czy są to wyjazdy sponsorowane przez kogoś (pracodawcę / babcię), czy po prostu sam sobie je opłacam?

Otóż różnie to z tym bywa: czasem jadę z ramienia pracodawcy, a czasem za swoje (nie za mszowe) pieniądze. Uzasadniając takie postępowanie, podeprę się słowami Wujka Boba zapisanymi w książce The Clean Coder [str. 16].

“Your career is your responsibility. […]It is not your employer’s responsibility to train you, or to send you to conferences, or to buy you books. These things are your responsibility. Woe to the software developer who entrusts his career to his employer.”

Nie jest zadaniem / odpowiedzialnością pracodawcy płacić za Twój rozwój! Pracodawca daje Ci pracę, kupuje twoją dostępność, twoją wiedzę i umiejętności, dając Ci w zamian co miesiąc wypłatę przelewem na konto. Pracodawca „kradnie” z Twojego życia 40 godzin tygodniowo, oczekując w zamian rezultatów: skończonego, działającego projektu, udanego wdrożenia, zadowolenia klienta…

Pracodawca chce, aby u niego pracowali tylko najlepsi, ale najlepiej nie ponosząc przy tym żadnych kosztów związanych ze szkoleniami, wyjazdami na konferencje, czy z chociażby kupnem książki. Po prostu rozwój pracowników nie jest głównym celem / zadaniem pracodawcy. Od tego są uczelnie wyższe i instytucje prowadzące szkolenia. Te pierwsze mogą być bezpłatne (zależnie od państwa), a za szkolenia trzeba już sobie płacić.

Rozumiejąc taką politykę firm, powinniśmy tym bardziej doceniać swojego pracodawcę, jeśli ten wspiera nasz rozwój. Nie możemy jednak zapominać, że to My bierzemy odpowiedzialność za nasz rozwój i że to My musimy znajdować czas w swoim życiu, aby przeznaczyć go na swój rozwój.

A ile czasu powinniśmy poświęcać na samodoskonalenie?

Wujek Bob w przytaczanym fragmencie jego książki pisze o takim podziale tygodnia:

  • 40 h pracy dla pracodawcy (według ustawy)
  • 20 h pracy dla siebie (samodoskonalenie)
  • 56 h na sen (8h dziennie) 

No i jeszcze zostaje 52 h na wszystko inne: rodzina, przyjaciele, znajomi, aktywność fizyczna, odpoczynek. Myślę, że jest to bardzo optymistyczne oszacowanie. Wiadomo, nie jesteśmy robotami i możemy czasem mieć gorszy dzień lub tydzień, kiedy nic się nie chce. Ja te „zalecane” 20 godzin traktuję, jako oszacowanie, ile mniej więcej powinienem w tygodniu robić coś pożytecznego dla siebie. Czy osiągam te 20 godzin – nie wiem, nie mierzyłem tego.

A co robić w tym czasie?

No cóż, możliwości jest sporo i można o tym napisać osobny artykuł. Uczestnictwo w konferencjach / warsztatach branżowych jak najbardziej się zalicza do tych aktywności. Konferencje są różne i różne są ich poziomy, ale zawsze można się czegoś nauczyć. Nawet jak idziemy na prezentację, która nie do końca jest związana z naszym obszarem zainteresowań, możemy się dowiedzieć, że w ogóle coś takiego jest, jak działa i jak używać. A gdy mamy poznać nową technologię, to lepiej posłuchać kogoś kto miał z tym styczność, niż samemu rozkminiać tutoriale. Sam siłę i potęgę wykładów (chociażby studenckich) doceniłem dopiero na 4tym roku studiów, jak w końcu były one w miarę konkretne i gdy ktoś sensowny je prowadził.

Inną zaletą, jakie dają nam konferencje to możliwość pogadania i poznania ludzi z tymi samymi zainteresowaniami, co za sobą niesie wymianę doświadczeń, opinii itp. Inną bardzo miłą kwestią są wszelkie towarzyszące konkursy z nagrodami. Jak się już nie raz przekonałem, w cale nie jest tak ciężko coś wygrać (myszka Logitech’a na 4developers 2010, zniżki na zakupy w Helionie na Javarsovi 2010, pendrive'y i bilety do kina na Confiturze 2011). Ostatni konkurs po Warsjawie 2011 był bardzo fajny. Do rozlosowania były 2 książki ufundowane przez firmę TouK dla osób, które napiszą relację na blogu z konferencji. No i jedna z książek (Czysty Kod) przypadła mi, co pokazuje, że prowadzenie bloga może być przydatne ;)

Tak więc jak by ktoś jeszcze w tym roku chciał porobić coś ciekawego, to 3ciego grudnia jest Global Day of Coderetreat, czyli w ponad 80 miastach na świecie odbywać się będą warsztaty CodeRetreat. W Polsce taka impreza będzie w Krakowie na którą oczywiście się wybieram.

Szykuje się jeszcze Agile Development Day w Warszawie na który jeszcze można się próbować zapisać, a także w tym samym czasie Cracow.Mobi w Krakowie. A dla mieszkańców Wrocławia powstaje właśnie: Wrocław Google Technology User Group. Pierwsze spotkanie na temat Chrome Apps odbędzie się 29 listopada 2011 o godz. 19:00.

Prawdziwa gradka szykuje się jednak w pierwszym kwartale przyszłego roku, a mianowicie 33 degree. Ja już się zarejestrowałem, mimo że nie wiem czy sam będę musiał sobie ją opłacić, czy pracodawca mi ją zasponsoruje. W każdym bądź razie proszę Was, drogi czytelniku / czytelniczko, abyście podczas rejestracji podali mój adres email mstachniuk gmail com, dzięki czemu Wy nic nie tracicie, a ja zyskam zniżkę na tę konferencję. Szczegóły promocji: 33rd Degree Buzz - get 20% off.

Do zobaczenia na konferencjach!

czwartek, 24 lutego 2011

Hamburg wrażenia po miesięcznym pobycie


W ostatnim przebywam tymczasowo w Hamburgu (już miesiąc), więc już najwyższy czas aby swoje przemyślenia wyrazić, co mi się tutaj podoba, a co nie. To co na samym początku, zaraz po przyjeździe tutaj mnie zachwyciło, to możliwość legalnego, bezstresowego spożywania alkoholu w miejscach publicznych. Zaraz po zameldowaniu się w hotelu, poszedłem z kolegami na piwko, oczywiście w plener. I nawet pogoda nie przeszkadzała (przynajmniej mi), a był zimny styczeń w tym roku. Szczęściem naszym było, że znaleźliśmy otwarty sklep. Ogółem w Niemczech wszystko w Niedziele jest zamknięte. Wyjątkiem są piekarnie (zazwyczaj czynne od rana do popołudnia), muzea i inne instytucje, które muszą być otwarte. Nawet wielkie centra handlowe i budki z kebabem są pozamykane. Znaleźć sklepy czynny w Niedzielę, to naprawdę trzeba mieć szczęście. Muszę przyznać, że w Niemczech jest duża różnorodność jeśli chodzi o gatunki piwa. Jest w czym wybierać i smakują dobrze. Zazwyczaj dla każdej marki piwa są 3 gatunki: pszeniczne, porter i pils. A często jest ich więcej. Inną typową sprawą w Niemczech są drzwi do mieszkań w bloku. Nie montuje się tutaj klamek od strony zewnętrznej i aby otworzyć drzwi potrzebne są klucze. Biada temu, kto zapomni klucza wychodząc z mieszkania. Mi się raz prawie to zdarzyło (chciałem tylko światło na korytarzu zapalić), ale na szczęście zdążyłem „złapać” zamykające się drzwi. Inaczej było by po imprezie ;) Inną ciekawostką, jest pralka, która zazwyczaj znajduje się w piwnicy. Ja akurat mam małą kawalerkę i jeszcze to jakoś rozumiem, ale podobno tutaj to typowe. Dodatkowo, aby skorzystać z takiej pralki, trzeba wrzucić pieniążki do skrzynki doprowadzającej prąd. W moim przypadku jest to 1,5 Euro. Dodatkowo zazwyczaj w takiej pralni znajduje się jeszcze mechaniczna suszarka (również na pieniążki). Co ważne, to to aby wrócić do pralni przed końcem czasu wyświetlanego na urządzeniu połykającym monety. Ja za pierwszym razem tego nie wiedziałem i musiałem dodatkowe monety wrzucić, aby przywrócić zasilenie na chwilę i otworzyć drzwi od pralki. Rozumiem, że Niemcy są skąpi, że cię nie opłaca itd, ale takie rozwiązanie mi się niezbyt podoba. Kolejna sprawa to komunikacja miejska. W Hamburgu jest ona bardzo rozwinięta. Mamy tutaj U-Bahn, S-Bahn, A-Bahn (cokolwiek to jest), kolej regionalną, Metrobus(typowe autobusy), Schnellbus (szybkie połączenie z dzielnicami robotniczymi), Ellbus (dla terenów gdzie nie ma U-Bahn’a, czy S-Bahna), nocne autobusy no i ... statki miejskie. W końcu to miasto portowe (drugi w Europie pod względem wielkości port obsługujący kontenerowce). Niestety za taką sieć komunkacyjną trzeba sporo płacić. Miasto jest podzielone na sporo stref, które decydują o cenie przejazdu. Przykładowo bilet miesięczny na 2 strefy to 58 Euro. Dodatkowo trzeba mieć zdjęcie, aby taki bilet kupić. Warto o tym pamiętać przed przyjazdem tutaj. Ponadto w autobusach panuje dziwny zwyczaj / obowiązek. Codziennie po 21 i w przez całą Niedzielę, wchodzi się przednimi drzwiami i pokazuje bilet kierowcy. Czasami niektórzy wchodzą środkowymi drzwiami, ale jak będzie upierdliwy kierowca, to będzie przez mikrofon prosił aby podejść do przodu i pokazać przejazdówkę. W przeciwnym przypadku będzie stał na przystanku, aż do skutku. No i kierowcy są tutaj bardziej uprzejmi i zawsze czekają na pasażerów biegnących z daleka na autobus i otwierają im drzwi. Bilet jednonarazowy można również kupić u kierowcy. Spodobał mi się ich sprzęt. Mają niewielki terminal, który drukuje bilet i fajny automat do wydawania reszty. Są na nim przyciski, które po naciśnięciu wypluwają daną monetę do „kubeczka”, z którego bardzo łatwo i wygodnie można zabrać drobne. Również informacja, o tym gdzie autobus jedzie i gdzie się zatrzymuje jest łatwo dostępna w autobusie. Przy ważniejszych przystankach, po za słownym komunikatem po Niemiecku, jest on również po Angielsku. No i oczywiście są wyświetlacze diodowe, wypisujące nazwę następnego przystanku. Nie lecą tam przesuwające się reklamy tekstowe jak np. we Wrocławiu. Również na większości przystanków są zamontowane tablice, informujące za ile minut będzie autobus / metro. Bardzo dobre rozwiązanie i co najważniejsze działa. Nie jest to zwykły plan rozkładu jazdy, a dokładna informacja co za jaki czas przyjedzie. Nie zdażyło mi się zauważyć, aby to błędnie funkcjonowało. Kiedy doczekamy się czegoś takiego w Polsce? Nie mam pojęcia. Standard komunikacyjny jest więc tutaj wysoki. Dodatkowo niedawno instytucja zajmująca się transportem miejskim, wprowadziła ciekawą „usługę”. Jeżeli transport spóźni się więcej niż 20 minut, to oddają połowę ceny biletu. Świadczy to o wysokim standardzie tych usług. Podobna promocja w Polsce mogła by zrujnować komunikację miejską w większych miastach. Dla tych którzy nie lubią komunikacji miejskiej, jest w Hamburgu ciekawa alternatywa. Otóż w wielu punktach miasta, są stojaki z rowerami. Po wcześniejszym zarejestrowaniu się, można taki rower wypożyczyć, przejechać potrzebny kawałek i oddać go na innym „przystanku”. Podobne rozwiązanie chce wprowadzić Wrocław. Tutaj to się sprawdza i ludzie korzystają z tego. No i pierwsze pół godziny gratis :) Jest tu sporo ścieżek rowerowych, albo wydzielonych pasów na ulicy, więc jest gdzie jeździć. Co zauważyłem, to sporo osób tutaj biega dla sportu, zwłaszcza w okolicach Alster. Aż głupio mi było tamtędy ostatnio iść. Czułem się jak jakbym biegał na autostradzie pomiędzy samochodami. Największe wrażenie zrobił na mnie mężczyzna, biegający razem z wózkiem dziecięcym (taka wyższa forma spaceru). W Hamburgu jest sporo mostów. Kiedyś myślałem, ze we Wrocławiu jest dużo mostów (220 wg Wikipedii). A tu jest 2500 mostów (również wg. Wikipedii)! Tak, to więcej niż w Wenecji, Amsterdamie i Londynie razem wziętych. Naprawdę, zazwyczaj z każdego mostu widać kilka następnych i czasem są kilka metrów od siebie. Co mnie jeszcze tutaj zaskoczyło, to spora liczba b-boy’i tańczących na ulicach, zbierając przy tym drobne. Poniżej linki do YouTube’a: B-boys aus Hamburg prt. 1 B-boys aus Hamburg prt. 2 Hamburg dance show Po za b-boy’ami spotkałem na ulicy jeszcze raperów, sprzedawających swoją muzykę. Po prostu szedłem sobie ulicą i ktoś się mnie pytał czy słucham hip-hopu. Odpowiadałem że tak i w tym momencie dawali mi swoje słuchawki i puszczali swój kawałek do posłuchania. Ich płyty można również kupić w normalnych sklepach, ale widocznie nie mają dużego popytu, skoro dodatkowo rozprowadzają je tą metodą (trochę jak nielegale). Co ważne są one po niższej cenie niż w sklepie. Jedna taką płytę kupiłem i dzięki temu mam rzadką okazję posłuchania rapu z Gujany. Odnośnie zakupów, to warto sprawdzić jaką ma się kartę płatniczą, przed przyjazdem tutaj. Otóż karty Visa, nie są akceptowane we wszystkich sklepach. Pytałem jednego Niemca dlaczego, to twierdził, ze to ze względów bezpieczeństwa. Na karcie Visa (i paru innych) widnieje numer, za pomocą którego można dokonywać zakupów, jak kartą kredytową. No i jak się płaci w sklepie to ktoś może zapamiętać ten numer i użyć w niepowołanym celu. W sumie to dobre myślenie. Mi ogółem cały ten pomysł robienia zakupów jedynie za pomocą numeru karty kredytowej bez dodatkowej autoryzacji się nie podoba, ale to już osobny temat. Upewnijcie się więc najpierw, czy w danym sklepie możecie płacić swoją kartą. Na koniec jeszcze mała ciekawostka. Jest piosenka o tym, jak w Hamburgu mówi się na „do widzenia”: In Hamburg sagt man Tschüss. O ile „Tschüss”, mówione na pożegnanie, jest ogólnie znane i używane w całych Niemczech, tak na przywitanie mówi się tutaj „Moin”. Jest to tutaj bardzo popularna forma przywitania, ładnie to brzmi, a w szkołach tego nie uczą. A szkoda.

niedziela, 9 stycznia 2011

Co najbardziej boli przy poznawaniu nowych technologii?

Chciałbym się w poniższym wpisie podzielić swoimi przemyśleniami na temat tego, co sprawia, że siadając do poznawania nowej technologii, bardzo często tracimy dużo czasu nad jakąś „pierdołą”. Ostatnio musiałem / chciałem napisać sobie coś w JavaScript. Miał to być pewien gadżet na bloga, gdyż brakowało mi pewnej funkcjonalności na blogerze. Nigdy wcześniej nie korzystałem z JavaScript i nie znałem podstaw, ani dokładniejszych założeń języka. Jako że nie było to zajęcie na dłużej, postanowiłem szybko znaleźć jakieś rozwiązanie, zaimplementować, potestować, zastosować i zapomnieć. Nie chciałem więc się mocno w ten język zagłębiać.

Poszedłem, więc do Empika w poszukiwaniu natchnienia. Znalazłem pierwszą lepszą książkę do JS i zacząłem przeglądać. No dobra mamy zmienne, pętle, operacje matematyczne, możemy zmieniać widoczność elementów na stronie, modyfikować ich style, itd. Po szybkim rozeznaniu i konsultacji z ziomkiem bawiącym się kiedyś tym językiem, przystąpiłem do pracy.

Po niedługim czasie pierwsza wersja skryptu zaczęła już działać. Przy testowaniu jednak zauważyłem, że dla pewnych danych wejściowych coś nie działa. Przyczyną tego stanu było dynamiczne typowanie które powodowało, że operacje matematyczne wykonywały się na liczbach zmiennoprzecinkowych (a nie na wartościach całkowitoliczbowych jak oczekiwałem). Po usunięciu tego problemu dalej jednak coś nie grało.

Okazało się że JavaScript domyślnie przy konwersji float -> int zaokrągla liczby do najbliższej, a nie bierze części całkowitej. Konieczne okazało się zastosowanie funkcji Math.floor(), aby było po mojemu.

Problem miałem jeszcze, po dodaniu skryptu do bloga, bo w FireFox'ie nie chciało działać. Znalazłem wtedy w tej przeglądarce ciekawą opcję „Konsola błędów” w menu „Narzędzia”. Dzięki temu szybko dowiedziałem się o co chodzi i po szybkiej podpowiedzi od ziomka poprawiłem skrypt.

Moje pytanie brzmi co sprawiło, że napotkałem na takie problemy? Otóż brak wiedzy na temat podstaw języka JavaScript. Nie wiedziałem, że domyślnie operacje liczbowe dokonywane są na typach zmiennoprzecinkowych, że zaokrąglanie liczb jest do najbliższej i jeszcze parę innych drobiazgów. Są to niby drobnostki, ale powodują one, że nasz kod robi coś innego niż się spodziewamy. Sporo czasu poświęciłem, aby dojść do tego, dlaczego mój kod działa tak a nie inaczej. Takie drobnostki / szczegóły / detale przy używaniu języka, którego się nie zna, prowadzą do dużej straty czasu na szukanie błędu i rozwiązania.

Z podobną sytuacją spotkałem się już wielokrotnie. Np. tablice w Matlabie są numerowane od jedynki, co dla wieloletnich programistów C\C++, Javy początkowo irytuje. Przypomina mi się również sytuacja znajomego, który jest fanem C#, a musiał coś w Javie zrobić. Pytał mnie się: „Dlaczego kolekcje nie działają mu tak, ja sie tego z dokumentacji spodziewa? Przeciążył przecież metodę equals()”. Od razu zapytałem, czy przeciążył też metodę hashCode(), gdyż znałem kontrakt jaki obowiązuje te dwie metody i wiedziałem jak działają kolekcje. Sytuacja od razu stała sie jasna.

Jaka z tych przemyśleń nauka na przyszłość? Niewielkie niuanse pomiędzy poszczególnymi językami programowania bardzo dają się we znaki. Warto dlatego, zanim co kol wiek w danym języku napiszemy, poczytać trochę o podstawach i założeniach danego języka. Z drugiej strony długo szukając rozwiązania jakiejś drobnostki, albo się zniechęcimy do danego języka, albo zapamiętamy o co chodziło na bardzo długo.