czwartek, 28 czerwca 2012

Mój pierwszy publiczny screencast z programowania w J2ME


Jakiś czas temu wspominałem, że opublikuje filmik z tworzenia implementacji gry tank2012 (klonu tank1990). I o to jest (oglądać w HD):


Post produkcja zajęła mi więcej niż przypuszczałem. Musiałem trochę powycinać, gdy gdzieś pod koniec nagrywania musiałem zaglądać do ściągawki. Jednak jak popełniałem jakieś błędy w kodzie, to je naprawiałem. Teraz każdy może sobie popatrzeć jak programuję. Nie jest to może najefektywniejsze wykorzystanie możliwości jakie daje IDE, ale już dawno nie siedziałem na NetBeansie.

Opublikowałem również pełen kod na githubie. Jest on nie bardzo obiektowy, ale nie to było celem ćwiczenia, a pokazanie jak można tą grę zaimplementować. Co prawda w oryginalnej wersji cegły można było niszczyć stopniowo, ale w przypadku j2me wymagało by to sporo wysiłku. No i zapomniałem po każdym zadaniu wykonać commita, więc mamy rewizję początkową i końcową.

Wszelkie uwagi odnośnie kodu / screencast'a mile widziane. A teraz czas się zwijać na Confiturę.

piątek, 15 czerwca 2012

Integracja IBM Synergy z kdiff3

Mała porada dla osób korzystających (a raczej zmuszonych do korzystania) na co dzień ze "wspaniałego" narzędzia „configuration management solution for global software development”, jakim jest IBM Rational Synergy. O wadach tego narzędzia nie będę się tutaj rozpisywał, bo bym potrzebował osobny post na to, a artykuł na temat zalet zostawiłbym pusty. Sparafrazuję jedynie zdanie ziomka: „IBM sprzedał Synergy ludziom, którzy tak naprawdę w ogóle go nie potrzebują”. I rzeczywiście jest to prawda.

Można na całe szczęście przynajmniej wymienić narzędzie do porównywania i merge'owania plików. Poniżej instrukcja.

  • Ściągamy i instalujemy kdiff3 (jeśli jeszcze nie mamy)
  • Odszukujemy plik ccm.properties w katalogu instalacyjnym Synergy\etc.
  • Robimy kopię
  • Otwieramy oryginał i zamieniamy
    windows.tool.compare.ascii  = %ccm_compare

    na
    windows.tool.compare.ascii  = "C:\\Program Files (x86)\\KDiff3\\kdiff3.exe" -cs EncodingForA=UTF-8 –cs EncodingForB=UTF-8 "%file1" "%file2"
  • a także
    windows.tool.merge.ascii    = %ccm_merge

    na
    windows.tool.merge.ascii = "D:\\Program Files (x86)\\KDiff3\\kdiff3.exe" --cs "EncodingForA=UTF-8" --cs "EncodingForB=UTF-8" --cs "EncodingForC=UTF-8" --cs "EncodingForOutput=UTF-8" --L1 "%ancestor_label" --L2 "%file1_label" --L3 "%file2_label" "%ancestor" "%file1" "%file2" -o "%outfile"
    

Trzeba jeszcze uwzględnić gdzie rzeczywiście mamy zainstalowanego kdiff’a. Gdy jest on dodany do path’a to możemy po prostu kdiff3 w powyższych miejscach wpisać. Jak nie, to trzeba jedynie pamiętać, aby podwójnych backslash’ów użyć. Dodatkowo skorzystałem z flagi -cs EncodingForA=UTF-8, aby z kodowaniem nic mi się nie powaliło.

Jeśli nic nie popsuliśmy to po zrestartowaniu klienta Synergy, możemy się cieszyć kdiff’em przy porównywaniu i merge'owaniu zmian. Co prawda nie robią się one automatycznie jak w przypadku integracji z SVN’em lub GIT’em (nie wiem dlaczego), ale i tak mi lepiej odpowiada to narzędzie, niż standardowe załączone w kliencie Synergy.

Jak się nie podoba, to zawsze można wrócić do starego, standardowego narzędzia dostarczonego razem z Synergy.

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.

poniedziałek, 4 czerwca 2012

Code Retreat w Berlinie

W Niedzielę 3ciego czerwca wziąłem udział w warsztatach Code Retreat w Berlinie. Był to mój nie pierwszy udział w tego typu „imprezie”, ale pierwszy raz było to za granicą i w otwartej formie jednoczenie (wcześniej zorganizowaliśmy sobie CR w pracy). Co mnie bardzo zaskoczyło to wielka różnorodność kulturowa. Spodziewałem się, że event będzie prowadzony w języku niemieckim, ale jak się okazało w Berlinie mieszka sporo ludzi, którzy nie mówią w tym języku. Z drugiej strony, jak się okazało, łatwiej jest mówić o typowo technicznych sprawach w języku angielskim.

Pierwszą sesję kodowałem z Carlosem z Portugali. Przykładowo on mimo prawie rocznego już tutaj pobytu nie używał Niemieckiego, a w pracy oficjalnym językiem jest angielski, ze względu na sporą różnorodność kulturowa. Kodowaliśmy w Rubym, tzn. miałem okazję zobaczyć jak to można robić i poznać podstawy podstaw, ale ogółem nic konkretnego. Generalnie w Portugalii jest podobna sytuacja jak w Polsce, tzn. projekty są, praca jest, ale lepiej być gdzieś indziej.

Druga sesję miałem okazję po kodować z Grzegorzem Dziemidowiczem. W końcu była możliwość się poznania i sprawdzenia się przy klawiaturze. Była to moja najbardziej produktywna sesja podczas tego dnia jak i chyba podczas wszystkich Code Retreat’ów w jakich brałem udział. Obaj dobrze się poruszaliśmy po IntelliJ IDEA, była super komunikacja, zbliżone pomysły na design (czyli nie wiele konfliktów) i szybka ewolucja designu (ekstrakcja osobnych klas dla żywych i umarłych komórek, przeniesienie do nowych klas odpowiednich implementacji).

Udało mi się sprzedać fajnego hotkey’a do Idei. Mianowicie zamiast pisać assercję, można napisać warunek, jaki chcemy sprawdzić (tak jak by to był zwykły if), zaznaczyć tekst, wcisnąć Alt + Enter i wybrać opcję „Create JUnit Assertion”, aby zamienić porównanie w wywołanie odpowiedniej metody. Screen poniżej.


Podczas kolejnej sesji (tym razem z Łukaszem Balamutem) jak drugi raz pokazywałem ten skrót, to odkryliśmy, że nie zawsze on działa. Teraz jak to sprawdzałem, to doszedłem do tego, że jak zaznaczymy tekst od lewej do prawej, to popup pokazuje się bez tej (i innych opcji). Na szczęście ktoś już zgłosił ten błąd: IDEA-86707.

Z Łukaszem ćwiczyliśmy pisanie w Javie, przy czym na napisanie testu mieliśmy tylko dwie minuty. Jak stoper dochodził do końca, a my nie zdążyliśmy skończyć testu, to trzeba było usunąć kod i zacząć od nowa. Później analogicznie robiliśmy z implementacją. Ćwiczenie to miało na celu tworzenie małych prostych testów i prostej implementacji. Mi się kilka razy nie udało skończyć testu, gdyż nie była to moja klawiatura i bardzo ciężko mi się tworzyło test „na szybko”. Dla mnie pisanie testu, to czas w którym intensywnie myślę, co chcę testować, jak, jaką nazwę dobrać i czy test jest poprawny. Dwie minuty to troszkę za mało, nawet jak test jest niewielki.

Później trochę się posprzeczaliśmy na temat używania słówka should na początku nazwy każdej metody testowej. Łukasz twierdzi, że kiedyś było test (bo musiało być), a teraz ten „noise” zamieniliśmy na should i jak czytamy nazwy niedziałających testów, to i tak pomijamy ten prefiks.

Później wyskoczyliśmy całą grupą na obiad. Poszliśmy na jakieś burgery w pobliskim bistro. Panie z za lady bardzo się zaskoczyły nagłym zmasowanym atakiem żądnych mięsa programistów w Niedzielę, gdyż wcześniej nikogo w tym barze nie było. Co prawda nie była to pizza, ale taki lepszy fast food, smaczny i sponsorowany przez Nokię. Była w tym czasie możliwość pogadania z innymi uczestnikami.

Po obiedzie miałem jeszcze okazję pokodować z Janem. Tym razem rozmawialiśmy po Niemiecku.


Ostanie dwie sesje były bardzo szalone. Postanowiliśmy zrobić coś, z czym spotkałem się pierwszy raz. Mianowicie 6 par postanowiło zacząć kodować w Javie i wykonywać rotację jednej osoby co 10 minut. Do tego nie skasowaliśmy kodu pomiędzy sesjami. Bardzo smutne było, gdy trafiałem co chwila na tą samą trefną implementację jednego z uczestników, jednak ciężko było mi przeforsować jemu inny sposób spojrzenia na problem i odpuściłem. Ciężko, zwłaszcza podczas drugiej sesji, przebiegało wdrożenie w to, co się dzieje w projekcie, gdyż przez 10 minut ktoś musiał wytłumaczyć / pokazać w którym miejscu jesteśmy, jak to implementujemy i coś dopisać. W momencie gdy udało się już dopchać do klawiatury, to przychodziła już nowa osoba na sąsiednie stanowisko i role się odwracały.

O dziwo prowadzący stwierdził, że pierwszy raz widział, że ludzie podczas ostatniej sesji są tak mocno ożywieni. I rzeczywiście tak było. Te częste rotacje powodowały, ze trzeba było dawać z siebie wszystko, a stres z tym związany na pewno powodował wydzielanie się motywująco – pobudzających substancji w naszym ciele.

Na koniec oczywiście retrospekcja z całego dnia, podziękowania, wymiana kontaktami i wypad na piwko. Tam to dopiero całość spływa z człowieka i można jeszcze pogadać w luźniejszej atmosferze. No i jeszcze było sporo dzielenia się wrażeniami z Marcinem Saneckim i Rafałem w drodze powrotnej.

Podziękowania dla sponsorów @nokia@crealytics, @klosebrothers. Miejsce odbywania się imprezy było ciekawe, gdyż znajdowało się w niezbyt uroczej dzielnicy, a blok wyglądał jak była fabryka. Za to firma crealytics udostępniła małe przytulne biuro i Club Mate, które trzymało mnie cały dzień na nogach. Powinni wprowadzić ten napój w pracy obok / zamiast kawy. Ogółem organizacja była bardzo dobra, dojście oznaczone, a na ścianach wisiały ciągle reguły gry.


Podsumowując, poznałem ciekawą technikę wymiany rotacyjnej uczestników co 10 minut, z którą nie spotkałem się wcześniej. Podpatrzyłem kilka innych konwencji nazywania metod testowych i zorientowałem się jak wygląda praca w Berlinie (miasto start-up’ów), gdzie dominującym językiem jest angielski.

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.