28 lutego 2012

Harmonogram moich wystąpień konferencyjnych z Clojure w roli głównej

0 komentarzy
Właśnie dostałem zaproszenie na 4Developers 2012 w Poznaniu, 18 kwietnia, na którym wystąpię w roli prelegenta z tematem dotyczącym Clojure - "(map Clojure everyday-tasks)-praktycznie (wyłącznie) Clojure praktycznie". Jest to temat, którego zarzewia będzie można doświadczyć podczas następnego spotkania Warszawa JUG - 6 marca. Poprzednie spotkanie było pierwszym etapem "zbierania wymagań", tj. badaniem zainteresowania tematem i kolejne będzie jego naturalną kontynuacją. Czuj się zaproszony i daj poznać swoje potrzeby poznawcze w aspekcie programowania funkcyjnego na JVM z Clojure.

Wracając do 4Developers, co mnie najbardziej uderzyło (jak najbardziej pozytywnie!), to nazwiska prelegentów. Proszę o uważne ich przeczytanie, a od razu stanie się jasne, skąd u mnie takie (samo)zadowolenie.

"Zaproszenie na 4Developers 2012 - 18 Kwietnia Poznan

Witaj Jacek,

Piszę ponieważ brałeś udział w poprzednich edycjach JDD. 18 kwietnia organizujemy w Poznaniu konferencję 4Developers, której tematyka może Cię zainteresować.

...wyciąłem..

Wśród naszych prelegentów będą: Stefan Koopmanschap, Uberto Barbini, Joshua Thijssen, Derick Rethans, Ben Longden, Wim Godden, Jacek Laskowski, Rowan Merewood i wielu innych."


Świadomie podświetliłem to imię i nazwisko, które połechtały moje ego :) Dziękuję organizatorom za tak ciepłe przyjęcie.

Na potwierdzenie słuszności umieszczenia mnie w gronie prelegentów wartych uwagi, przytoczę wypowiedź dwóch uczestników mojego ostatniego wystąpienia o Clojure podczas zeszło tygodniowego spotkania grupy Warszawa JUG.

2012/2/26 medyk napisał:
"1) O prezentacji Jacka mogę się wypowiedzieć w samych superlatywach, ciekawa, od dobrej strony i w odpowiedniej wielkości kęsach ugryziona. Wprost nie mogę się doczekać następnego JUGa, mam nadzieję, że poza obiecanym kodem Jacek powie też kilka słów o tym jak to pożenić z Javą."

2012/2/24 Łukasz Żuchowski napisał:
"Mi się prezentacja Jacka podobała. Choćby dlatego, że nie skupiała się na porównywaniu jak prezentacja poprzednika. Fajne było założenie, że słuchacze znają tylko Javę. Na pewno sprawia to, że łatwiej jest znaleźć wspólny język i trudniej zgubić się gdzieś po drodze, przy porównaniach do innych języków (zwłaszcza do ich funkcyjnej części). Jestem ciekawy drugiej części.
...
Ciekawe i prowokacyjne było przez Jacka podważenie sensu programowania obiektowego, w które ja mocno wierze i myślę, że to coś więcej niż tylko enkapsulacja. Ale to już temat na osobne rozważania."


Czy potrzeba lepszych zachęt, jak te, dwa komentarze? "Niestety" nie mogę pochwalić się kontrprzykładami. Ufam, że to samozachwalanie się sprowokuje niezdecydowanych :) Zachęcam.

Najbliższe konferencje, na których prezentuję stan swojego zrozumienia Clojure to:
Zgłosiłem swój udział w GeeCONie w Poznaniu (17-18.05.2012), ale niestety wciąż nie mam odpowiedzi - pozytywnej, jak i negatywnej. Czyżby organizatorzy nie domyślali się, ile to stresu kosztuje zgłaszającego temat i oczekującego odpowiedzi?! Codziennie sprawdzam skrzynkę - czy mgła, czy śnieg, czy ulewa, ja niezrażony sprawdzam, a w niej wciąż brak odpowiedzi :(

Próbuję wpasować czasowo DevCrowd w Szczecinie (14.04.2012) oraz rozważam EuroClojure w Londynie, Jazoon w Zurychu oraz JavaZone w Oslo. Oczywiście zgłoszę swój temat na Confiturę w Warszawie.

Zobaczymy, na ile uda mi się zrealizować swoje plany rozwojowe w postaci wystąpień konferencyjnych. Zagraniczne wciąż poszukują sponsora.

26 lutego 2012

IBM WebSphere Application Server V8: Developing RESTful Web Services (JAX-RS)

0 komentarzy
To zawsze było moje prywatne postanowienie, aby usiąść nad tematem nagrywania skrinkastów i ze zmianą grupy na IBM Worldwide WebSphere Competitive Migration Team, nagrania stały się całkiem wartościowym narzędziem reklamy, a wręcz mój szef dopytuje się o nie (!)

Tym samym znalazłem trochę czasu, aby się zebrać i opublikować kolejny odcinek z serii "Jak to się robi w Java EE 6, IBM WebSphere Application Server 8 i IBM Rational Application Developer 8".

W "IBM WebSphere Application Server V8: Developing RESTful Web Services (JAX-RS)" poznasz jak stworzyć usługę RESTową korzystając z JAX-RS i IBM Rational Application Developer V8. Aplikacja jest wdrażana na IBM WebSphere Application Server V8.


Mimo, że starałem się wykorzystać możliwie jak najwięcej uproszczeń WAS V8, to i tak przegapiłem możliwość skrócenia klasy ConferenceApplication jak opisano w Configuring JAX-RS applications using JAX-RS 1.1 methods. Można spodziewać się kolejnego nagrania już niebawem.

Chętnie dopasuję nagrania do Twoich uwag. Daj mi tylko je poznać, aby kolejne odcinki były jeszcze lepsze i bardziej dopasowane do Twoich potrzeb. Pewnie jest też obszar w Java EE 6, który chciałbyś poznać przez skrinkasty. Jaki?

20 lutego 2012

88. spotkanie Warszawa JUG - Maciej Jaśkowski o Scali i Jacek Laskowski o Clojure

2 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)
Warszawska Grupa Użytkowników Javy (Warszawa JUG) zaprasza na 88. spotkanie, które odbędzie się w najbliższy wtorek, 21 lutego o godzinie 18:00 w sali 3180 Wydziału MIM UW przy ul. Banacha 2 w Warszawie.

Spotkanie składa się z dwóch prezentacji.

Temat #1: Scala na tle Java EE i Lift
Prelegent: Maciej Jaśkowski

Na spotkaniu będziemy się bawić językiem Scala, żeby stwierdzić, czy może być przydatna w codziennej pracy programisty Java. Zatem będziemy patrzeć nie tylko na ciekawe własności tego języka (przede wszystkim obiektowe i związane z lukrem syntaktycznym), ale również na możliwości integracji Scali z Javą i ewentualne problemy z tym związane. Wszystko to na przykładach standardowych bibliotek oraz J2EE ze szczyptą Lifta.

Maciej Jaśkowski jest absolwentem MIM UW, współorganizatorem konferencji Flaszki, byłym przewodniczącym Samorządu MIM UW, programistą Java od 18 miesięcy. Wierzę w testy jednostkowe i TDD, lubię NoSQL/Hadoop i języki funkcyjne, uznaję tylko metodyki SCRUM-opodobne.

Temat #2: Krótko i zwięźle o Clojure
Prelegent: Jacek Laskowski

W trakcie wystąpienia przedstawię programowanie funkcyjne na JVM z językiem Clojure. Zaprezentuję kilka interesujących cech języka, które sprawią, że programowanie obiektowe w Javie może wydać się czasami irytujące oraz zaprezentuję, co należy posiadać, aby rozpocząć swoją przygodę z programowaniem funkcyjnym na JVM, aby stało się równie funkcjonalne jak inne języki, z których obecnie korzystasz i uważasz za takowe. Wystąpienie traktuję jako możliwość podsumowania moich dotychczasowych doświadczeń z Clojure, aby zostać ukierunkowanym na praktyczne problemy, z którymi się stykasz w projektach, a dla których Clojure mógłby być ciekawym rozwiązaniem. W końcu to wciąż bajtkod JVM.

Jacek Laskowski jest założycielem i liderem Warszawskiego JUGa. Interesuje się Javą w wydaniu podstawowym (Java SE) i korporacyjnym (Java EE), a od ponad roku zadużony w programowaniu funkcyjnym z Clojure (i w tle F#). Swoje przemyślenia publikuje na polskojęzycznym blogu Jacek Laskowski jawnie oraz angielskojęzycznym Japila :: verba docent, exempla trahunt. Krótkie myśli znajdziesz na kanale @jaceklaskowski. Występuje podczas polskich konferencji, co traktuje jako wyróżnienie i miejsce prezentacji własnych poglądów. Będzie wdzięczny za wszelkie komentarze do jego publicznych aktywności.

Planowany czas prezentacji to 45min (każda), po których planuje się 15-30-minutową dyskusję.

Sponsorem spotkania jest firma SMT Software S.A., która nas przywita, zapewni strawę i coś dla ducha - zaprezentuje swój profil.

03 lutego 2012

Clojure na kanwie zmiany cen w sklepach

0 komentarzy
Na twitterze napisałem, że może być dzisiaj ciężko posiedzieć przy Clojure, a tu podczas dyskusji na Warszawa JUG pojawiła się niezwykle interesująca propozycja zmiany planów! (proszę nie sugerować się tematem wątku, bo niezwykle szybko podryfował w innym kierunku)

Wystarczyło przespać się z tematem i rozwiązanie samo przyszło. Nie jest to specjalnie czysto funkcyjne podejście do problemu, ale ma pewne zaczątki funkcyjne, więc pozwala mi sądzić, że zaczynam czuć temat programowania funkcyjnego z Clojure.

Poniżej wycinek dyskusji, w którym przedstawiam moje funkcyjne rozwiązanie do zmiany cen w sklepie. Tym samym dziękuję całej społeczności Warszawa JUG, w szczególności Kubie Nabrdalikowi i Irkowi Matysiewiczowi za sprowokowanie mnie do bardziej wytężonej pracy umysłowej!

Korzystając z okazji, chciałbym zaprosić wszystkich zainteresowanych moimi doświadczeniami funkcyjnymi z Clojure oraz samym językiem na konferencje 33rd Degree w Krakowie w dniach 19-21.03.2012 oraz 4 Developers w Poznaniu w dniu 18.04.2012 na moje publiczne wystąpienia w temacie. Będzie duuużo dyskusji i rzeczywistego poruszania dotykanych problemów mentalnych przy rozpracowywaniu paradygmatu funkcyjnego z Clojure. Musisz tam być, jeśli temat Clojure choć w części Cię zaintrygował i akceptujesz moje, potencjalnie błędne rozumienie sprawy.

Wciąż czekam na potwierdzenie mojego udziału w konferencjach SFI w Krakowie i GeeCON w Poznaniu. Jeśli nie chcesz czytać na blogu, ani zawitać do stolicy, zaproś mnie do siebie, tj. przekonaj organizatorów wspomnianych konferencji do zaakceptowania mojego tematu wystąpienia.

To wypełnia mój polski harmonogram wokół publicznych wynużeń o Clojure i planuję w ten sposób przygotować się do wyjścia poza ramy konferencji polskich. Marzy mi się najbardziej EuroClojure w Londynie i Jazoon w Zurichu. To byłoby niezwykłe podsumowanie pracy z Clojure!

Pomożecie?

A teraz pora na wspomniany wycinek dyskusji o programowaniu funkcyjnym na forum Warszawa JUG.

2012/2/3 Jakub Nabrdalik <jakubn@gmail.com>:
> Na ziemi, developerzy robią software
> spełniający wymagania klienta. Z tych kilku sklepów które zrobiłem, w
> prawie wszystkich (w przeciwieństwie do systemów
> magazynowo-sprzedażowych/ERP, które robiłem), klient życzył sobie by
> towar nie był rezerwowany przy wkładaniu do koszyka i by cenę można
> było zmieniać w trakcie godzin pracy i by jej efekty były
> natychmiastowe (obejmowały także właśnie kupujących). Jeden wyjątek
> jaki miałem, wiosny nie czyni.

A teraz moje podejście do sprawy (podejście bardziej teoretyczne niżpraktyczne):

Klient: Chcę mieć możliwość aktualizacji ceny w trakcie transakcji (przez transakcję rozumiemy ciąg następujących po sobie czynności - od
wzięcia towaru z półki do podejścia do kasy)

Ja: Dobrze. Czy w trakcie wykonywania poszczególnych kroków powinienem informować świat zewnętrzny o potencjalnym zapotrzebowaniu na towar
(wysyłanie komunikatów)? (wersja dla nas, technicznych: czy są jeszcze nietransakcyjne operacje, których wycofanie nie będzie możliwe
korzystając z monitora transakcji? - tutaj transakcja ma znaczenie techniczne)

Klient: Nie

W tym momencie nie zakładam jeszcze, że będzie to Java, która da mi setPrice(...), albo Clojure, który zrobi to inaczej, np. {:cena ...}
(to miałem na myśli pisząc o patrzeniu na problemy przez pryzmat dostępnych narzędzi - będąc bardziej dosłowny - olewam narzędzia na tę
chwilę). Koncentruję się na wymaganiach.

I dalej rozmowa...staram się być upierdliwy^H^H^Hdociekliwy.

Ja: Co w sytuacji, kiedy podchodząc do kasy klient widzi różnicę między ceną na/przy towarze, a kasową/systemową? Chyba daje mu to
prawo do pozwania Was?

Klient: ???

Załóźmy, że klient mówi, że olewa to, co klient sobie myśli, albo, że w większości przypadków nie ma to znaczenia, bo będziemy się martwić
na miejscu.

Wtedy ja, mając tę informację, przy wystąpieniu takiej sytuacji obsługuję to jako sytuację wyjątkową (nie piszę o wyjątkach w Javie) i w razie zgłoszenia uwagi przez klienta...już w kodzie...podmieniam jego towar na nowy z nową ceną (tzn. jest to stary produkt z nową
ceną).

Sytuacja podobna jest do sytuacji, w której wszyscy wiedzą jaka jest wartość cyfry 8, ale akceptują jej zmianę, bo...cóż takie są realia
aka wymagania klienta. Cóż, ponownie, akceptuję to i jak to obsłużyłbym w Clojure:

(def basket (list)) ; koszyk jest pusty

;; towar
(def milk {:name :milk :price 10})

;; klient bierze towar z półki
(def basket (conj basket milk))

;; załóżmy, że teraz cena towaru się zmienia
(def milk {:name :milk :price 50})

;; klient ma wciąż starą wersję, bo struktury są niezmienne, stałe
;; My wiemy i chcemy, aby zmiana ceny musiała pociągać za sobą zmianę w systemie
;; najlepszą opcją, jest odłączenie ceny od towaru i wybranie jej z kasy (odłączamy atrybut cena od fizycznego towaru)
;; nasze rozumowanie wyżej jest niepoprawne
;; jeszcze raz

;; czyścimy koszyk
(def basket '())

;; zależy nam na strukturze, która ma kontrolowany dostęp (współbieżnie), ale odczyt ma być nieblokujący
;; Clojure STM przychodzi z pomocą, w końcu to malutka biblioteka do programowania współbieżnego
;; mamy do dyspozycji ref, atom i agent - http://clojure.org/atoms

(def milk-price (atom 10))

;; towar poprawniej
(def milk {:name :milk :price milk-price})

;; jaka jest teraz cena mleka w kasie?
@milk-price

;; a ta na etykiecie, na półce?
@(:price milk)

;; są równe
(= @milk-price @(:price milk))

;; wkładamy mleko do koszyka
(def basket (conj basket milk))

;; sprawdźmy cenę mleka w koszyku (idziemy do czytnika)
;; tutaj wychodzi, że możnaby pomyśleć o koszyku-mapie - identyfikator produktu i ich lista
;; wybaczcie niedbałość
(map deref (map :price (filter #(= (:name % :milk)) basket)))

;; w naszym przypadku możnaby krócej - duuuuże "skrzywienie" tematu
(def milk-price-in-basket (:price (first basket)))

;; są równe
(= @milk-price @milk-price-in-basket)

;; ZMIANA CENY w kasach
;; o jeden w górę (inc - to +1)
(swap! milk-price inc)

;; od tej pory wszystkie wątki aka klienci oraz kasy widzą to samo
;; to jest przykład uproszczenia współbieżności i cecha Clojure
;; sprawdźmy

@milk-price-in-basket

;; jeszcze podbijamy cenę
(swap! milk-price inc)

;; i jeszcze raz sprawdzmy
@milk-price-in-basket

;; koniec - Ctrl-C

Podsumowanie: All problems in computer science can be solved by another level of indirection [1]

[1] http://en.wikipedia.org/wiki/Abstraction_layer

Czekam na uwagi. Chciałbym tym samym podziękować wszystkim zaangażowanym w dyskusję za przedstawienie bardzo ciekawego problemu
do rozwiązania, który zamierzam wykorzystać w moich prezentacjach programowania funkcyjnego z Clojure. Jak się uda pierwsze będzie
podczas SFI w Krakowie 8-10.03.2012, ale spóźnionym był znacznie z rejestracją tematu, więc może być ciężko. Ale ciii, nie zapeszajmy :)