13 kwietnia 2013

Podkreślnik jako substytut parametrów funkcji w Scali

2 komentarzy
Zacząłem bawić się podkreślnikiem "_" w Scali jako substytut parametrów funkcji.

Jakoś tak się potoczyło, że trafiłem na stronę Wikipedii o literałach funkcyjnych w Scali, na której znalazłem poniższy przykład (zmodyfikowałem go nieznacznie na potrzeby tego wpisu):
List(1, 2, 3, 4).reduceLeft(_ + _)
A pod nim komentarz:

"// Each underscore stands for a new unnamed parameter in the anonymous function.
// This results in an even shorter equivalent to the anonymous function above."


Zwykle tak właśnie u mnie bywa, że drobne rzeczy mają niebagatelny wpływ na moje rozumowanie sprawy i ten, z pozoru błahy, komentarz przypomniał mi o moich dokonaniach w serwisie Coursera w kursie o Scali.

Nie mogę narzekać na ostatnie wyniki z zadań w Functional Programming Principles in Scala.

Idzie całkiem gładko i niezwykle przyjemnie. Nie raz już pisałem o tym szkoleniu i polecam je każdemu - choćby dla poszerzenia horyzontów.

W sekcji Extra Hints do zadań w Week 2: Higher Order Function można było znaleźć taką podpowiedź:

"Most of the solutions for this assignment can be written as one-liners. If you have more, you probably need to rethink your solution. In other words, this assignment needs more thinking (whiteboard, pen and paper) than coding ;-)."

Największym wyzwaniem intelektualnym było wyrażenie exists przez forall, ale coś mi mówiło, że mogę więcej przy definicji funkcji podobnych do poniższej:
def funkcjaZwracajacaFunkcje(arg: Int): Int => Int = e => e + arg
Wywołanie funkcji funkcjaZwracajacaFunkcje zwraca funkcję jednego parametru, który dodawany jest do poprzedniego.
scala> funkcjaZwracajacaFunkcje(5)(4)
res9: Int = 9
Nic odkrywczego, poza podstawową znajomością składni Scali.

I kiedy przeczytałem o podkreślniku jako symbolu zastępczym dla kolejnych parametrów funkcji w 8.5 Placeholder syntax (z książki Programming in Scala, First Edition) wiedziałem już, czego brakowało mi w moich jednolinijkowcach na courserze!

Zamieniłem definicję funkcji na korzystającą z podkreślnika!
def funkcjaZwracajacaFunkcje(arg: Int): Int => Int = _ + arg
To jest znacznie przyjemniejsze dla (mojego) oka. Tu dostrzegam wartość stosowania Scali nad odpowiednikiem w Javie (który nota bene wymagałby zastosowania dodatkowych bibliotek i/lub klas anonimowych!)

11 kwietnia 2013

Wrażenia z WJUGowych flashtalks o testowaniu

6 komentarzy
Bardzo liczne i ciekawe tematycznie spotkanie grupy Warszawa JUG.

TL;DR

Nie sądziłem, że o testowaniu można mówić tak wiele i tak ciekawie, a prelegenci - (w kolejności występowania) Michał Lewandowski, Paweł Lipiński, Jakub Nabrdalik, Tomasz Kalkosiński, Marcin Zajączkowski i Paweł Cesar Sanjuan Szklarz - gwarantowali najwyższą merytorycznie wiedzę praktyczną. Trudno było się zawieść (chociaż wielu prelegentów nalegało).

Od strony warsztatu prezentacyjnego nie znałem jedynie Michała i Tomka, i chyba to właśnie oni zasłużyli na najwyższe noty. Może to niewygórowane oczekiwania (pewnie ze względu na ich nieznajomość i samego tematu), a może, że są po prostu dobrzy, ale jedynie brak "oszlifowania" prezentacyjnego pozwalał mi na wyłapanie miejsc do poprawki. A skoro o nich, to nadmienię, że prelegent musi utrzymywać kontakt wzrokowy z publicznością (i potraktować slajdy jako wsparcie a nie przewodnik) oraz pozwolić sobie na większą pewność w głosie. Poza tym, temat i sposób prezentacji wzorowy! Brawo!

Najciekawszą atrakcją spotkania była formuła sześciu piętnastominutowych prezentacji. Prelegenci sprawnie zamieniali się miejscami - wkraczali na scenę i schodzili z niej o czasie, więc trudno oczekiwać, że reakcje mogą być inne niż pozytywne.

Niestety wśród prelegentów pojawili się maruderzy - Paweł Lipiński, Jakub Nabrdalik oraz Tomasz Kalkosiński, którzy skutecznie zakłócili panujący porządek czasowy. Składam petycję, aby maruderów "nagradzać" kolejką piwa podczas wspólnych wyjść grupowych po spotkaniu, np. 1 kolejka dla każdego na każde 2 minuty.

Pawle, Kubo i Tomku, jako uczestnik oczekuję (stonowanej, ale zauważalnej) wrażliwości dla czasu uczestników (i mimo, że samemu niejednokrotnie przekraczałem powierzony mi czas, napiętnowanie jest podyktowane również próbą wymuszenia właściwego zachowania u samego siebie!). Wiem, że to rzutuje na późniejszy odbiór kolejnych wystąpień i czas jest równie ważny co strona merytoryczna.

Zabrakło mi dyskusji między prelegentami a publicznością. Sądzę, że to największa wada naszych spotkań, podczas których wciąż nie potrafimy wywiązać dyskusji, które prowadzone byłyby taktownie (JEDEN mówi, reszta słucha) oraz dynamicznie (jeden mówi KRÓTKO). Tu liczę na większe zaangażowanie organizatorów - utrzymanie czasu i animowanie dyskusji między uczestnikami.

Spotkanie otworzył Tomek Kucharski z Decerto, które przywdziało szaty sponsora spotkania. Dziękuję Decerto za zadbanie o stronę cielesną uczestników (pizza) oraz materialną (dysk SSD). Mimo, że początkowo sądziłem, że to może właśnie nagroda - dysk SSD - była głównym powodem dla takiej liczności uczestników (ponad 100!), to słówko z kilkoma uczestnikami po spotkaniu rozwiało wszelkie wątpliwości - to na pewno tematyka (chociaż dysk też nie był wielu obojętny).

Wschodzącą gwiadą tego spotkania Warszawa JUG okrzyknąłbym Tomka Kalkosińskiego, który sprawnie i rzeczowo przedstawił Geba. Ładne slajdy (też takie chcę!) i opanowany głos doskonale wpasowały się w moment spotkania (za sobą mieliśmy już kilka prezentacji i zmęczenie mogło być już zauważalne). Podobał mi się również styl graficzny demonstracyjnej aplikacji. Na minus rzuciłbym słownictwo (dewelopowany, trawersowanie), ale szczęśliwie pojawiło się "na pierwszym planie" (chociaż czułem, że blisko było do foreground). Na minus dorzucę również IntelliJ IDEA jedynie w wersji 12.0.4 :-) I to przekroczenie czasu - niedopuszczalne! Cierpiałem intelektualnie, kiedy Tomek omawiał przykład z koszykiem zakupowym, który niestety nie był prezentowany na slajdzie - zamiast machać rękoma i oczekiwać wyobraźni u uczestników, lepiej posłużyć się diagramem na slajdzie. To trudna sztuka, ale warto się nad tym pochylić.

Na kolejnym miejscach postawiłbym Marcina Zajączkowskiego. Jak tylko przekona się do nawiąz(yw)ania kontaktu wzrokowego z publicznością, będzie cacy! Trochę mi tego brakowało. Vym wymiata w roli narzędzia do prezentacji i dzięki niemu było bardzo dynamicznie. Miejscami nawet zbyt dynamicznie, bo pływanie po stronie z lewej na prawą, aby później na górę i gół, i tak na okrągło, przyprawiało o ból głowy. Może to był jednak jedyny sposób na utrzymanie widzów przy życiu o tej porze?! Pozbycie się tych "rogów" pozwoliłoby Marcinowi na zdobywanie kolejnych nagród publiczności! Trochę więcej wiary, Marcin! Jest dobrze, a wręcz prawie doskonale!

Ostatnie miejsce, ale wciąż na "pudle" i medalowe otrzymuje Michał Lewandowski. FEST Assert daje radę, a sposób, w jaki Michał to przedstawiał sprawił, że pamięć o nim (nich?) będzie żyła długo. Można było zauważyć, że narzędzie i prelegent zżyli się ze sobą, i to promieniowało. To trudna sztuka mówić tak przekonująco i ja to lubię! Szkoda, że Michał preferował kontakt wzrokowy ze slajdami niż uczestnikami (a wiem, że było również kilka kobiet, więc z pewnością jest czego żałować!)
Zaskakujące dla mnie były interfejsy z "I" na początku (wcześniej widziałem to w projektach Eclipse) oraz (i tutaj nagana dla prelegenta za przeoczenie) na slajdzie 14 użycie if do zwrócenia boolean - czyż, w tym przypadku, samo sprawdzenie w if to nie był właśnie wynik metody?! Proszę nie promować takiego stylu programowania. Proszę.
Poza tym slajdy przejrzyste z kolorowanym kodem, który skutecznie przykuł moją uwagę. Podobało mi się! Proponuję dodać na slajdzie Q&A namiary na prelegenta, bo slajd "wisiał" i poza 3 symbolami, nie pozostawiał wiele w pamięci. A szkoda, bo można było skorzystać na łatwej autopromocji ;-)

Dalsze miejsca dla panów Pawła Lipińskiego, Kuby Nabrdalika i Pawła Szklarza.

U Pawła Lipińskiego spodobał mi się slajd z cechami projektu w postaci chmurki tagów i podejście "Let the code speak". Szkoda, że Paweł nie dotrzymał czasu, bo tempo i wiedza pozwalały na wysokie noty. A tak, pozostał niesmak za zakłócenie porządku. Szkoda.
Brawa za aktualną IDEA 12.1, a najbardziej zdumiewające było umożliwienie utworzenia instancji klasy Book bez wymaganych parametrów, więc w modelu Pawła można było oczekiwać książek bez...tytułu, autora i innych oczekiwanych cech. Ciekawym wyjaśnienia (tylko proszę nie zaciemniać koniecznością wpasowania się w płynny interfejs).

U Kuby Nabrdalika ponownie IDEA - nie mam już złudzeń, że to najbardziej używane IDE podczas tego spotkania Warszawa JUG i pewnie szerzej. Skutecznie mnie przekonano do tego IDE, a właśnie nadarza się okazja połączenia przyjemnego (IDEA) z pożytecznym (WebSphere) w pracy.
Podejście "No slides just code" godne podziwu. Tempo zbyt intensywne, a pod koniec nawet zabójcze, bo pojawiła się walka z czasem (przekroczony o 11 minut!).
I proszę o uwagę na polskie tłumaczenie "invocation", które należałoby tłumaczyć jako wykonanie lub wywołanie. I od razu wiadomo, o czym do mnie mówią :-)

Na koniec spotkania - porażka. Wybacz Paweł Szklarz, ale Guice i Twoja osoba podniosły poprzeczkę tak wysoko, że efekt końcowy nie pozwala mi inaczej tego opisać. Zawiodłem się. Mój sąsiad (pan O.) skwitował wystąpienie stwierdzeniem "Ja dokładnie wiem, jak to działa, a nic nie rozumiem". Zbyt wiele, zbyt chaotycznie i jeszcze to niedopasowanie czasowe - zmęczenie publiczności sięgało zenitu i tutaj widziałbym raczej Twojego imiennika - Pawła Lipińskiego.
In plus, instalacja wtyczki do IDEA, która podpowiada skróty klawiszowe oraz sam temat rozpraszania usług z użyciem Guice. Chciałbym móc wysłuchać tej prezentacji ponownie, aby zrozumieć sens istnienia projektu, bo czuję, że może być pomocny. Na chwilę obecną pozostał niedosyt.

Warto również zapoznać się z komentarzami-opiniami na Meetup'ie.

09 kwietnia 2013

Spotkanie Warszawa JUG dzisiaj, 4Developers w piątek

6 komentarzy
Trochę mnie wiadomość o 4Developers w ten piątek w Warszawie zaskoczyła. Jakie tam trochę?! Bardzo wręcz. Niby coś gdzieś słyszałem, ale gdyby mnie zapytać o termin i miejsce, miałbym z tym nie lada problem. Czy tylko ja?

A to już w ten piątek, 12 kwietnia w Warszawie, w Centrum Konferencyjnym na Bobrowieckiej (tam, gdzie wcześniej była Confitura).

Powiem szczerze, że wiadomość w poniedziałek o konferencji w piątek, świadczy o mojej daleko posuniętej nieuwadze lub organizatorów...tu przemilczę możliwe pobudki. Ciekaw jestem, ile osób znalazło się w podobnej sytuacji?! Oczekiwałbym więcej troski organizatorów w temacie informowania potencjalnych odbiorców (która rywalizuje z innymi konferencjami, w której Confitura i GeeCON stanowią nośnik najlepszych cech społecznościowych i tematycznych). To jest, panie i panowie, konferencja płatna, a więc wymagania również kosztowne.

Nie zostawię tego jednak tak. Idę zobaczyć, jakie jeszcze przygotowano dla uczestników atrakcje.

Napisałem do organizatorów w sprawie udziału w roli uważnego i krytycznego obserwatora, i najwyraźniej pewni są swego, bo w rewanżu dostałem honorową wejściówkę! Dziękuję Marku. Dziękuję Andrzeju. Nie myślcie sobie, że mnie tym ugłaskacie! :-)

Agenda konferencji pozwoliła mi na ułożenie następującego harmonogramu:
Jak widać mam dwa sloty - 09:00 - 09:50 oraz 11:00 - 11:50 - z kolidującymi prezentacjami. Nie ukrywam, że ich wybór był bardziej podyktowany kredytem zaufania dla prelegentów (których większość znam osobiście) niż tematyką i będzie niezwykle trudno pogodzić dwie równolegle prowadzone wystąpienia z rana i przed południem. Muszę przeanalizować bacznie(j) opisy prezentacji.

Czego najbardziej żałuję w tematyce konferencji to prezentacji dotyczących programowania funkcyjnego (może za wyjątkiem "rodzynka" w postaci wykładu Tomka Kowalczewskiego o Java 8, ale, hola hola, programowanie funkcyjne to znacznie więcej niż wsparcie dla domknięć), tematów o językach programowania typu Clojure, Scala, Erlang oraz (mój faworyt konferencyjny) F#. Zabrakło mi również tematów związanych z HTML5 + Java EE 7, a szczególnie Web Socket, aby podsumować moje wymagania Androidem. Może to i lepiej, bo tylko miałbym większe problemy z harmonogramem.

Do zobaczenia w nadchodzący piątek.

A dzisiejszy wtorek to święto Warszawa JUG! Spragnionych wiedzy zapraszam na wspólny udział w dzisiejszym spotkaniu Warszawa JUG od 18:00 na MIMUWie. Zapowiada się ciekawie, bo prowadzących i tematów będzie kilku! Z pewnością będzie różnorodnie.

08 kwietnia 2013

Radość programowania == progfun - programowanie funkcyjne w Scali i Clojure

13 komentarzy
Tak mnie jakoś dzisiaj naszło. Pewnie to pogoda, bo słońce praży na zewnątrz, że aż trudno znaleźć zajęcie, które mogłoby przytrzymać człowieka na dłużej przy komputerze. Śmiem twierdzić, że człowiek to taka bestia, która zwykle dąży do poszukiwania zajęć, które łączą w sobie cechy bycia użytecznymi, a przy tym jeszcze niosą ze sobą ładunek pozytywnego myślenia i energii. Takie motywatory.

Po przydługiej zimie potrzeba rozruszać członki!

Nauka nowego języka programowania może być użyteczna i ucząca (pozytywnego) myślenia. Może jednak stracić swój blask, kiedy wokoło tyle równie ciekawych rzeczy. I jeszcze to słońce!

Podczas szkolenia na coursera.org - Functional Programming Principles in Scala - które polecam każdemu, zwróciłem uwagę na jego skrót - progfun. I wtedy przypomniałem sobie o owej radości programowania, o której tyle się czyta. Skoro już tworzymy oprogramowanie, to niech to będzie maksymalnie energetyczne zajęcie. I niech dostarcza radości!

Jeśli pracujesz z Javą, a brakuje Ci trochę fun w pracy, pochyl się nad programowaniem funkcyjnym, które chociażby z nazwy pozwala sądzić, że będzie zabawne, zajmujące, a nawet może i pożyteczne (może i w karierze!).

Kiedykolwiek pojawi się wątpliwość, czy nauka Scali czy Clojure to dobra inwestycja w przyszłość, pomyśl o polskim skrótowcu dla PROGramowania FUNkcyjnego - progfun. Kiedy zaaplikuje się angielskie znaczenie do tego, zrobi się od razu przyjemniej. Pojawi się FUN!

Niektórzy mogliby również przetłumaczyć "functional" na funkcjonalne (!)

Czy trzeba więcej powodu poznania języka funkcyjnego niż ów "FUN" oraz użyteczność tworzenia aplikacji funkcjonalnych?! Pozwól sobie na chwilę z Clojure lub Scala, a z pewnością nie będziesz żałował(a).

I ciekawostka z pola poznawania Scali - różnica między def a val jest znacząca. Pierwszy - def - opóźnia wyliczenie wartości aż do miejsca faktycznego użycia (wywołania). Drugi - val - wymusza wyliczenie wartości w miejscu definicji, aby już od tego momentu nazwa wskazywała na wartość wyrażenia.

Może to i niuans, ale to właśnie takie sztuczki i kruczki pozwalają mi na znalezienie owego FUNu w programowaniu i nakręcają na poszukiwanie kolejnych.

Z tą wiedzą powinno być już łatwo określić czas działania poniższego kawałka kodu w Scali.
scala> import java.util.concurrent.TimeUnit.SECONDS
import java.util.concurrent.TimeUnit.SECONDS

scala> def trwa5sekundDef = { SECONDS.sleep(5); 5 }
trwa5sekundDef: Int

scala> trwa5sekundDef
res2: Int = 5

scala> val trwa5sekundVal = { SECONDS.sleep(5); 5 }
trwa5sekundVal: Int = 5

27 marca 2013

Java EE, Scala, Play 2 i WebSphere Liberty Profile

0 komentarzy
Wielu z Was już z pewnością miało okazję zapoznać się z moimi literackimi (po)tworami, które dotykają tematyki integracji Java EE ze Scalą, a nawet uruchomienia Play Framework 2.1 na WebSphere Liberty Profile. Z moimi poczynaniami poszedłem tak daleko, że wręcz pokusiłem się o kontakt z twórcami produktów, którzy wcale nie oponowali, aby użyczyć mi trochę swojej wiedzy ku wzmocnieniu merytorycznym artykułów.

W ten sposób udało mi się stworzyć trzy artykuły z serii o roboczym tytule "Java EE, Scala, Play 2 i WebSphere Liberty Profile":
Byłbym niezwykle rad, gdyby ktoś zechciał podzielić się wrażeniami z lektury i wskazać miejsca wymagające większego wysiłku umysłowego. Kto pierwszy?

14 marca 2013

Scala 2.10.1 wydana i hard lifting

0 komentarzy
The logo of the Scala language
Właśnie zajrzałem na stronkę scala-lang.org, aby sprawdzić, co nowego i dobrego tam podają, a tu taka niespodzianka - świeżutkie wydanie Scala 2.10.1. Nie żebym czekał specjalnie, bo nie trafiłem na niedogodności w korzystaniu z poprzednich wersji, ale kiedy proszą o pobranie, grzecznie wykonuję.

Ciekawie prezentuje się lista osób, które poświęciły swój czas na rozwój tej wersji z bardzo polskobrzmiącymi nazwiskami.
  • Grzegorz Kossakowski - tego gościa miałem okazję poznać osobiście i mam wrażenie, że wszyscy go teraz znają, więc przedstawiać nie trzeba. Sądziłem, że znajdę go na stronie zespołu TypeSafe, ale niestety nie widnieje na liście, aczkolwiek na swoim profilu na LinkedIn stoi jak byk: "Scalac hacker at Typesafe". Się Grześ zahackował i zapomnieli o nim. Chwała za zasługi!
  • Hubert Plociniczak - o nim wcześniej nie słyszałem, ale ze strony można wyczytać, że "is a member of the EPFL team working on Scala.", więc trudno się dziwić, że ma swoje miejsce na liście zasłużonych. Chwała się należy!
Ostatnie moje dokonania rozwojowe ze Scalą pozwoliły mi na rozwiązanie trudnego zadania z książki Functional Programming in Scala, którą żyję prawie każdego dnia i jestem nią wprost zachwycony. Nieskromnie napiszę, że nie mniej niż swoimi dokonaniami przy jej aktywnym udziale. Przeczytałem ją tyle razy, że mógłbym ją teraz sam napisać.

"Exercises, answers, and hints to go along with the book "Functional Programming in Scala" znajdują się na GitHubie i można samodzielnie popróbować się z funkcyjnymi problemami w Scali.

Oto rozwiązanie pierwszego zadania oznaczonego jako Hard z rozdziału 2. Świadomie nie podaję treści zadania, bo liczę, że wszystko zaszyte jest w sygnaturze. Kto odgadnie, do czego służy funkcja lift3? Niezły mind twister.
object MyModule { 
  def lift[A,B,C,D](f: (B, C) => D)

                   (g: A => B,
                    h: A => C): A => D =
    a => f(g(a), h(a))

  // Exercise 11
  def lift3[A,B,C,D,E](f: (B, C, D) => E)
                      (g: A => B,
                       h: A => C,
                       i: A => D): A => E =
    a => {val f2: (C,D) => E = f(g(a),_,_)
          lift(f2)(h, i)(a)}
}
Początkowo zadanie mnie przygniotło, ale ostatecznie dałem sobie radę i to bez żadnych ściągawek (!) Wystarczyło dokładniej doczytać książkę i...pomyśleć. Jak zwykle zresztą. Teraz Twoja kolej.

09 marca 2013

Różnorodność kulturowa w Stanach - wrażenia z Chicago i Milwaukee

1 komentarzy
Wywiało mnie na drugi koniec Oceanu Atlantyckiego do Chicago i Milwaukee.


Organizacja wyjazdu trwała niewiele ponad 2 godziny (!) Szczerze powiedziawszy spodziewałem się dużo gorszego wyniku, a nawet przewidywałem całkowitą klęskę przedsięwzięcia. Zdumieniu mojemu nie było końca, kiedy wszystko domknąłem bez specjalnego stresu. W zasadzie więcej było ciekawości, co kryje przed sobą tak karkołomne załatwianie spraw w IBM i kiedy miałem w ręku rezerwacje, odetchnąłem z ulgą, że wciąż żyję - serce waliło mi z wrażeń!

A wszystko działo się przy słonecznym piątku, kiedy po rannej wizycie w biurze, zdecydowałem się na wcześniejszy powrót do domu i po malutku domykałem tydzień.

A tu bach! Jest piątek, godzina 14:00 i dostaję przez korporacyjny komunikator zapytanie o możliwość przyjazdu do Stanów. Właśnie odebrałem wizę amerykańską, więc nadarzyła się okazja przetrzeć szlaki.

Początkowo mnie ścisnęło, kiedy pomyślałem sobie, że na załatwienie spraw wyjazdowych mam kilka godzin - złożyć wniosek o wyjazd służbowy, zebrać podpisy, załatwić bilety, hotele, a wszystko przy założeniu wyjścia pracownika od spraw wyjazdowych przed 17. Sprawę włożyłem na półkę - "wyzwania".

Udało się bez specjalnego napinania. Dziękuję wszystkim zaangażowanym. Dojrzałem społecznie, bo współpraca popłaca, nawet jeśli jej wynikiem nie jest nauka kolejnej nowinki technologicznej, a zwykłe rezerwacje.

Wylot w południe następnego dnia, sobota, 2 marca bezpośrednim lotem do Chicago, IL. Miałem kartę kredytową, paszport z wizą, więc wszystko gotowe na wyjazd. Nie zapomniałem również o kompie i rzeczach.

Odprawa ekspresowa. Kolejne zdumienie. I po chwili jestem na pokładzie.

I tu zdumienie-porażka - nie ma telewizorków w siedzeniach naprzeciwko. Co ja będę robił?! Spodziewałem się, że przy przelotach ponad 6 godzin, samoloty wyposażone w telewizory w oparciach to norma. A tu takie zaskoczenie. Kolejny raz potwierdza się powiedzonko, że zawód jest wypadkową oczekiwań, a że były niemałe, więc i zawód niemały. Zabolało.

Później, podczas lotu, zapytałem o to obsługę i dowiedziałem się, że w LOTcie to dopiero Dreamlinery będą z takim wyposażeniem. Czekam zatem cierpliwie na ich przylot. Trzeba będzie uważać przy planowaniu kolejnych przelotów i zwrócić również i na to uwagę.

Zabrałem się za lekturę książki Functional Programming in Scala, więc po kilku godzinach lektury wyszło całkiem pozytywnie. W końcu miałem mnóstwo czasu na lekturę. 9 godzin rozłożyłem na czytanie, obiad, czytanie, spanie, chodzenie po pokładzie i zaczepianie kogo popadnie, śniadanie i znowu chodzenie po pokładzie. Wtedy też spotkałem polaka z Chicago, który zarabiał na życie jako kierowca, jak to się wyraził, truka (ang. truck). Nawet zapytałem go o tę wymowę i powiedział, że to polski żargon w Chicago na duże auta ciężarowe. Zrozumiałe. Nauki końca nie było widać.

Polaków na pokładzie cała masa. Zacząłem się nawet obawiać o stan osobowy w kraju przy takim zatłoczeniu na pokładzie.

Doleciałem do lotniska Chicago-O'Hare. Przysiągłbym, że na pokładzie mignął mi piosenkarz, którego nazwiska jednak nie pamiętam, a który (pewnie dla przyspieszenia przejścia granicznego) stał się nieoczekiwanie potrzebującym...wózka inwalidzkiego (!) One przechodziły przez inne bramki, do których kolejki były kilkuminutowe, a nie tak jak moje godzinne. Sposób warty wdrożenia przy następnym razie, bo kolejka do mojego przejścia koszmarna - ponad godzina oczekiwania (przy całkowitym braku dostępu do sieci, co sprawiało, że trzeba było cierpliwie stać i się rozglądać!).

I tu kolejne zaskoczenie - obsługa mówi po polsku! Aż mnie przetrąciło i nawet pomyślałem, czy przypadkiem wciąż może jestem w Polsce. Niesamowite wrażenie!

Do hotelu trafiłem międzynarodowo. Taksówkarz okazał się być pakistańczykiem z Islamabadu. Przyjechał do Stanów z rodziną i jakoś trafił do Chicago. On i ja straszne gaduły, więc przekrzykiwaliśmy się, aby dojść do głosu. Ciekawa podróż.

Przejeżdżając ulicami Chicago dostrzegłem znajomy budynek Chicago Board of Trade Building, który nie tak dawno widziałem w filmie dokumentalnym o mafiozach i ich związkach w Chicago. W końcu byłem w mieście Al Capone.

W hotelu Palmer House też mnie powaliła przestronność lobby i malowidła na suficie. Zdumienia nie było końca.


Zwiedzając hotel trafiłem na basen. Niezbyt imponujący po tym, kiedy kolega z zespołu rekomendował mi wybór tego właśnie ze względu na basen. Zapomniałem jednak, że po ostatnim zabiegu chirurgicznym pływalnia mnie nie interesuje zupełnie. Następnym razem.

Tu kolejne zaskoczenie. Po krótkiej rozmowie z panią obsługującą basen, zwróciłem uwagę na jej akcent, który wydał mi się niezwykle znajomy. Pani okazała się być bułgarką, która przyjechała do Stanów na zieloną kartę.

Wieczorny spacer po mieście był niezwykle nieprzyjemny - pobliskie jezioro Michigan nie dawało zapomnieć o swojej bliskości i wespół z zimową porą prowokowały temperaturę do zejścia poniżej zera. Było naprawdę zimno!

Po godzinnym spacerze trafiłem do pobliskiej restauracji, w której pozwoliłem sobie na zamówienie sałatki cezar z kurczakiem. I to był strzał w dziesiątkę, bo porcja okazała się być tak ogromnych rozmiarów, że zdołałem wdusić w siebie jedynie połowę. Chylę czoła przed zawodnikami, którym udaje się opanowąć całą. To musi boleć.

Na drugi dzień dołączył duńczyk, aby później połączyć siły z amerykaninem. W ten sposób w poniedziałek byliśmy już w pełnym składzie do podjęcia się wyzwań służbowych.


O pracy nie ma co wspominać. Przemilczmy. Ale wysoko było. Zresztą wiele budynków w Chicago sprawiało, że swoją wielkością ulice stanowiły swoiste kaniony. Niezapomniane wrażenie.


Jeszcze w niedzielę pozwolililiśmy sobie z duńczykiem na spacer do "pobliskiego" centrum handlowego.


Co mnie najbardziej porywało na mieście, to możliwość darmowej nauki angielskiego (wystarczyło wejść do sklepu i doskonalenie angielskiego w gratisie), a także smakowitość owoców - mango, bananów, a nawet jabłek. Co oni robią z tymi jabłkami, że są takie słodkie?! Banany i mango zrozumiałe, bo bliżej im od drzewa do sklepów, więc smakowały inaczej, ale jabłka?!

Bodaj we wtorek amerykanin zaciągnął nas na ribs - żeberka, z których Chicago słynęło.


Nie powiem, były przepyszne, ale wielkość porcji omal mnie zabiła. Jak można tyle zjeść?! Jak doświadczyłem, niektórym się udaje.

W środę wyjechaliśmy do Milwaukee, aby tam kontynuować turnee warsztatowe z WebSphere.

W trasie dotarliśmy na stację benzynową, na której, w 7 Eleven, nie mogłem oprzeć się, aby nie skosztować bananów, jabłek i Mango Smootie. Przepyszne! Co jednak zwróciło moją uwagę, to napis "Speak English or get the hell out!". Obsługa okazała się jednak być latynoska, a osoba za mną zamawiała po...meksykańsku! Nikt nie trafił do piekła (the hell).

Milwaukee jakieś "przewietrzone" - niewiele ludzi na ulicach, które swoją wielkością przypominały polskie autostrady. I te przestronne samochody.


Trafiliśmy z warsztatem na 31 piętro, na którym widok zapierał dech w piersiach (na zdjęciu, po prawej widać jezioro Michigan).


Choćby dla tego widoku warto było doskonalić się w WebSphere :-)

Milewaukee to kraina Harley-Davidsona, ale o muzeum dowiedziałem się za późno, aby wpaść na chwilę. Nie powiem, mieliśmy sporo czasu, aby to zrobić, tylko jakoś nikomu nie przyszło do głowy, aby poszukać czegoś wartościowego "na mieście". Następnym razem, jak mówią.

Powrót do Chicago był kolejną nauką życia - po raz pierwszy miałem okazję telefonicznie anulować rezerwację, aby otworzyć inną w innym hotelu, bliżej lotniska Chicago-O'Hare - tego samego, na którym lądowałem kilka dni temu. Niby nic nadzwyczajnego, ale przy hałasie w samochodzie, rozmowie i ledwosłyszalnym głosie pani z obsługi, uważam to za wyczyn.


Obługa hotelu ponownie różnorodna na maksa. Podczas śniadania zamieniłem słowo z meksykanką, którą prosiłem o wskazanie wartościowej restauracji meksykańskiej. W restauracji, której właścicielem był serb, pracowała bułgarka z zieloną kartą. A na koniec dnia miałem styczność z bośniakiem. Czyż nie nazbyt "kolorowo"?!

Mojej styczności z wielokulturowym Chicago nie było końca - taksówkarz do HIP Shopping Mall okazał się być palestyńczykiem (z Ramallah), a podczas zakupów trafiłem na polskie małżeństwo, które mieszkało na stałe w Chicago. Zwracanie uwagi na detale kulturowe w Stanach nie jest dobrym zajęciem, bo należy oczekiwać ciągłego pobudzenia.

Właśnie tutaj, w Chicago, dotarło do mnie, że Stany są jedynym znanym mi krajem, w którym żyje tak wiele różnych narodowości. Aż trudno uwierzyć, że dają radę. Mnóstwo różnorodności może przyprawić o ból głowy, ale powiedzmy, że jestem lekko zmęczony jedynie.

Pora udać się na zasłużony odpoczynek. Pospać trzeba, bo od ekscytacji serce wysiądzie.