18 kwietnia 2013

4Developers z Wojtkiem z Androidem i Kubą ze Spring Data w akcji

8 komentarzy
Wybrałem się na konferencję 4Developers wcześnie rano. Na miejscu pojawiłem się około 8:30.

Pierwsza niespodzianka to kolejka. Długa. Za długa, abym w niej stał, więc wszedłem bez rejestracji.

Korytarz długi i ciasny - z pewnością nie zachęca do dłuższej bytności. Samo usytuowanie budynku, w którym odbywała się konferencja umieszczam po stronie zalet konferencji, ale już same sale i dwa piętra idą na stronę wad. To bodaj najtrudniejsza część podczas organizowania konferencji - dobrego miejsca typu sala kinowa dorobił się jedynie GeeCON i za to wyróżniłbym tę konferencję. Pozostałe wciąż borykają się z doborem właściwego miejsca.

Rozejrzałem się po salach w poszukiwaniu +Bartek Zdanowski i +Wojtek Erbetowski. Właśnie ich wybrałem jako prelegentów z tematami jQuery kickstart (Bartek) oraz Testowanie Androida z mocą Grooviego i Spocka (Wojtek). Wybór nie był łatwy i trudno nawet było zdecydować się na pierwszego, tzn. z jednej prezentacji trzeba było wyjść w połowie, aby pojawić się na drugiej i wyjście z sali nigdy nie należy do przyjemnych dla obu stron.

W końcu trafiłem do sali Bartka. Słówko i miałem już ustawiony plan. Zostanę u Bartka, a w połowie ewakuuję się do Wojtka. Jak się później okazało, plan nie wypalił i kiedy już spotkałem się z Wojtkiem, tak już zostało i przesiedziałem całego Androida u niego.

Zanim jednak prezentacja się rozpoczęła, trafiłem do sali, w której zaplanowane były warsztaty z platformą .Net. Jeszcze nikogo nie było w sali poza prowadzącym i innym gościem - rozmawiali o czymś. Korzystając z chwili zapytałem o F# i programowanie funkcyjne na .Net. Odpowiedź jaką dostałem była najgorszą z możliwych - nie znam i nie korzystam z F#, bo…Microsoft tego nie promuje (!) Co?! To potrzeba firmy, aby poznać język, który swoim podejściem może zmienić rozwiązywanie problemów?! Zmroziło mnie.

Według obu Panów, C# daje wszystko, co może programista .Net potrzebować. Chcesz funkcje? Są w C#. Chcesz programowanie funkcyjne? Cóż, może nie jest takie, jakiego moglibyśmy oczekiwać, ale skoro nie oczekuję wiele, więc jest w porządku. Co za ludzie?!

Szczęśliwie, jeden z nich okazał się mniej potrzebującym wsparcia Microsoft, aby poznać F# i wspomniał nawet o Scali, którą porównałem do F# jako alternatywy. Moje postrzeganie platform .Net vs JVM jest takie, że Javę przyrównałbym do C#, aby Scalę przyrównać do F#. Nie twierdzę przy tym, że języki są zamienne, ale że dają podobne możliwości w swoich "środowiskach" - z pewnością pod kątem wsparcia dla programowania obiektowego (Java i C#) oraz funkcyjnego (Scala i F#). Osobiście nie przesiadłbym się na C#, ale gdyby zaproponowano mi projekt z F#, miałbym problem z odmówieniem. Zresztą to samo tyczy się Scali, Clojure i F#.

Byłbym zapomniał, ów prowadzący warsztaty stwierdził coś jeszcze (spróbuję przytoczyć dosłownie): "W C# jest Linq, więc jest dobrze i mam trochę smaczku funkcyjnego, a F# nie potrzebuję, bo klientów to nie obchodzi i…jest mało programistów znających temat". Cóż, wyczułem opór i nie parłem do przodu.

U Wojtka Erbetowskiego o RoboSpock'u


Poszedłem szukać Wojtka. A ostatecznie to Wojtek mnie znalazł przechodząc do swojej sali.

Zaczęliśmy z lekkim opóźnieniem oczekując liczniejszej publiki - naliczyłem 7 osób na sali, a że temat ciekawy - RoboSpock - to można było oczekiwać kilku więcej. Niestety, zostaliśmy w kameralnej atmosferze do samego końca. W końcu, jak to ujął Wojtek, co 4 uczestnik to prelegent, więc trudno było oczekiwać większej frekwencji w salach.

I to była zaleta tej prezentacji. Poczułem się trochę, jakby Wojtek przygotował się specjalnie dla mnie. Szczęśliwie była jeszcze jedna osoba, która próbowała zawłaszczyć spotkanie dla siebie i wspólnie nakręciliśmy interakcję z prelegentem.

Pierwsza rzecz, którą dostrzegłem w prezentacji Wojtka to przeraźliwy brak pewności w głosie. Rano daje się to specjalnie odczuć, kiedy ludzie potrzebują pewniaka. Wojtkowi zabrakło tego, choć nadrabiał pewnością znajomości tematu. Tutaj nie miałem złudzeń, że jesteśmy u najlepszego!

Niespodzianką prezentacji były slajdy na github.io. Pamiętam pierwszy raz u Kuby Nabrdalika (podczas ostatniego spotkania WJUGowego), kiedy zobaczyłem tę domenę. Musiałem przegapić zmiany na GitHubie, bo nie wiedziałem, że na io można posadzić stronkę. Pewnie jeszcze można ją wersjonować. Jak to na GitHubie. Niczego innego nie oczekiwałbym. Robią to doskonale.

Kolejny prelegent z IntelliJ IDEA w użyciu. To chyba jakaś "plaga" w Polsce :-)

Do poprawki wrzuciłbym jeszcze slajdy - bardziej do czytania niż oglądania (czy to aby nie przez małą liczbę kotków?!) Tutaj widzę dużo do zrobienia w naszym warsztacie prezenterskim. Zwykle prelegenci to znawcy tematu (choćby w ograniczonym zakresie, ale wciąż przygotowani merytorycznie), ale oprawa leży - slajdy, gesty, mimika, głos, itp. Za mało nas publicznie wciąż. Może temat nagrywania skrinkastów mógłby to zmienić? Materiał krótki i możnaby dotrzeć do większej rzeszy osób, co sprawiłoby, że większy byłby strumień ocen.

Brawa dla Wojtka za utrzymanie czasu! Prezentacja poprowadzona sprawnie i z każdą minutą było widać coraz większe opanowanie w głosie. Możnaby jeszcze nad tym popracować. I proszę o zwrócenie uwagi na uwagę uczestników - oni patrzą nie tylko na slajdy, a Wojtek-prelegent niestety wciąż za rzadko na słuchaczy. Do poprawki.

Przypominam, że slajdy są nośnikiem najważniejszych treści - skoro mamy slajd z pytaniami, to czy nie byłoby bardziej wartościowe "usadowić" na nich danych o prelegencie, aby późniejszy kontakt był łatwiejszy? Do poprawki.

U Jakuba Kubryńskiego ze Spring Data


Poszedłem na prezentację +Jakub Kubryński o Spring Data. Zagadałem się na korytarzu z osobami przy stoiskach i wszedłem do Kuby już po rozpoczęciu.

Zasiadam w pierwszym rzędzie, a tu na ścianie widzę uruchomioną IDEA (znowu!) z testami, które...nie zadziałały. Wciąż nie wiem, czy to było zamierzone czy nie. Kuba, czytasz może?

In plus, opanowanie w głosie, wyważony ton i "czyste" slajdy - czcionka była cudna. Szkoda, że zabrakło obrazków, bo w pewnym momencie bardziej skupiłem się na czytaniu slajdów niż słuchaniu. Nie taka jest rola slajdów, co?!

A skoro o slajdach, to dlaczego były po angielsku?! Skąd pomysł, aby slajdy były po angielsku, podczas gdy językiem "urzędowym" był polski? Nie należałoby oczekiwać ujednolicenia - po angielsku lub polsku, whatever, ale jednolicie, please.

I to miętolenie butelki. Do wyrzucenia! Obowiązkowo korzystamy z rąk podczas prezentacji, ale ostatnią rzeczą może być wertowanie kartek, zabawa z długopisem czy butelką. Skutecznie przykuwało to moją uwagę i na pewno rozpraszało wielu.

Kolejny już prelegent, któremu bardziej zależy na kontakcie wzrokowym ze slajdami niż publicznością. To obniża u mnie chęć do zadawania pytań, bo trudniej zwrócić na siebie uwagę w takiej sytuacji. Proszę postawić się w mojej, uczestnika, roli - czekać na pauzę i wejść z pytaniem z impetem czy liczyć na uwagę prelegenta, który niestety nie wykazuje zainteresowania, i czekać na wywołanie? Zdecydowanie coś nad czym Kuba musi popracować.

Kiedy jednak pojawiła się uwaga Kuby na uczestnikach, to niestety, ale kończyła się na pierwszym rzędzie. Sala była długa i ciemna, więc mimo wczesnej pory, wielu mogło poczuć się w potrzebie zdrzemnięcia. Ja przez moment o tym pomyślałem, bo skoro brakuje mi uwagi Kuby, to wielokrotnie z zamkniętymi oczyma mogę wyłączyć niepotrzebne bodźce. To mógłby być dobry test przed wystąpieniem, aby sprawdzić, ile wnosi prelegent ponad lekturą slajdów - wystarczy nagrać siebie i odsłuchać później. Nigdy jednak tego nie próbowałem, więc trudno mi powiedzieć, jak bardzo jest to wartościowe.

Początkowo byłem zachwycony prowadzeniem prezentacji przez Kubę - było dynamicznie, treściwie i z pewnością w głosie - ale nie trwało długo (20 minut), kiedy zacząłem czuć zmęczenie. Dużo materiału do przeczytania na slajdach i to po angielsku, brak kontaktu wzrokowego, mało angażowania publiczności do dyskusji - nuda.

In plus, podparcie się gitem do zmiany kodu. Git na linii poleceń i przejście do IDEA, to coś, co lubię. Imponuje mi takie podejście do sprawy, które nazwałbym profesjonalnym. Ale hola, hola, skąd pomysł, aby uruchamiać gita z linii poleceń?! Czyżby IDEA nie była git?

Epilog


Niestety, prezentacja Kuby była ostatnią ze względu na "nieoczekiwaną zmianę miejsc" w moim terminarzu, więc jeszcze tylko słowo z organizatorem - Sławkiem Jabsem - i w drogę.

Gdybym był zapytany o wartość konferencji, napisałbym, że nie było nic, co uzasadniałoby jej cenę. Zabrakło mi tematów funkcyjnych (ogólnie i z językami typu Scala, Clojure i F#), współbieżności z java.util.concurrent, przetwarzania asynchronicznego w Java z java.util.concurrent.Future, nowości Java EE 7 z Web Socket w roli głównej. Zabrakło mi również dłuższej agendy na kilka dni z możliwością zamienienia słowa między kolejnymi dniami. Tutaj (kolejność przypadkowa) GeeCON i 33rd Degree wygrywa (przy założeniu, że trwają kilka dni). Dostrzegam wartość z możliwości rozmowy za kulisami z prelegentami, którzy mogą pokazać swój warsztat - sposób podejścia do problemu, skróty klawiszowe i ogólnie bieżące zainteresowania.

Zdecydowanie potrzeba mi konferencji, która byłaby na neutralnym gruncie - poza miastami typu Warszawa, Kraków, Poznań, Wrocław, Szczecin, Gdańsk. Taka teraz ładna pogoda - może Mazury? Na pewno część północno-wschodnia Polski wymaga uwagi. Anyone?

15 kwietnia 2013

Literały funkcyjne w Scali

0 komentarzy
Teorii nigdy za wiele, a przy nauce programowania funkcyjnego w Clojure i Scali zauważam duże jej braki u mnie. Nadrabiam pomału zaległości.

Nieustannie pojawiający się termin literał funkcyjny (ang. function literal) zmusił mnie w końcu do spędzenia kilku chwil, aby dowiedzieć się, cóż takiego ten termin znaczy. Czym różni się definicja funkcji od literału funkcyjnego? A może ma to związek z funkcją anonimową?! I jeśli w ogóle istnieje różnica, jakie są zalety stosowania jednego nad drugie, a może i trzecie?

W artykule Literal (computer programming) na Wikipedii napisano:

"In computer science, a literal is a notation for representing a fixed value in source code."

Początkowo nie było to zbyt wymowne. Szczęśliwie, stan ten nie trwał długo i dodatkowych kilka źródeł pozwoliło mi w końcu zrozumieć pojęcie literału funkcyjnego.

W artykule Anonymous function na Wikipedii (przekierowuje z artykułu o literale funkcyjnym) napisano:

"In computer programming, an anonymous function (also function constant, function literal, or lambda function) is a function (or a subroutine) defined, and possibly called, without being bound to an identifier."

I dalej, w rozdziale 8 "Functions and Closures" w dostępnej bezpłatnie książce Programming in Scala, First Edition znajdziemy taki paragraf:

"A function literal is compiled into a class that when instantiated at runtime is a function value.[2] Thus the distinction between function literals and values is that function literals exist in the source code, whereas function values exist as objects at runtime. The distinction is much like that between classes (source code) and objects (runtime)."

Zatem literał to wartość, co w przypadku literałów funkcyjnych jest wartością (instancją) funkcyjną. Podobnie jak 5 jest literałem liczbowym dla typu Integer, albo "ciąg znaków" dla typu String, tak x => x * 2 lub (x, y) => x * y jest literałem funkcji jedno- i dwuargumentowej. Scala wspiera programowanie funkcyjne przez możliwość operowania funkcjami - przekazywanie jako wartość wejściowa (parametr wejściowy funkcji), czy wyjściowa (parametr zwracany przez funkcję) lub przypisanie do zmiennej (nadanie funkcji nazwy) i literał funkcyjny (na wejściu, wyjściu i podczas przypisania) tworzy się przez użycie znaku implikacji =>.

Warto zauważyć, że wielu mogłoby przyrównywać literał do stałej lub wręcz zmiennej. Tutaj ponownie za pomoc można uznać artykuł Literal (computer programming) na Wikipedii:

"In contrast to literals, variables or constants are symbols that can take on one of a class of fixed values, the constant being constrained not to change."

Bardziej to teoretyczne rozważania niż praktyczna wiedza, ale kto wie, czy i gdzie przyjdzie nam ją użyć. Wiedza uskrzydla, a poznanie znaczenia dość powszechnie używanego pojęcia pozwoli na zrozumienie czytanego tekstu i sprawną komunikację. Powodzenia przy praktycznym użyciu literałów funkcyjnych w Scali!

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