10 stycznia 2013

Po spotkaniu Warszawa JUG o metaprogramowaniu w Javie

Nowy rok i nowe postanowienia, co? A skoro o tym, to z pewnym spóźnieniem...

Wszystkiego najlepszego w Nowym Roku 2013! Jedynie ciekawych projektów w 2013 bez Project Maruderów!

Chyba niektórzy postanowili odświeżyć znajomości i wiedzę w nowym roku, bo ostatnie, wczorajsze spotkanie Warszawa JUG przyciągnęło bagatela ponad 70 osób! Mnie osobiście poraziło, kiedy zobaczyłem ten tłum.


Kamera też była, nagranie jest, więc niebawem powinno pojawić się w sieci. +Paweł Cesar Sanjuan Szklarz już nad tym pracuje.

Temat spotkania szumny - Metaprogramowanie w Javie - i tutaj doszukiwałem się odpowiedzi, skąd się wzięło tylu ludzi. Niektórzy wspomnieli również doskonałą zapowiedź jako możliwy powód: "Ten wykład to absolutny "must" dla wszystkich developerów związanych z Javą (i w ogóle JVM)."

Mnie przyciągnął do spotkania cglib, z którym miałem już wcześniej do czynienia, a nawet swego czasu byłem wielkim fanem rozgryzienia tematu dynamicznego generowania bajtkodu (również z asm), w czym pomagał mi dzielnie +Piotr Kobzda. Stare to czasy i postanowiłem odświeżyć temat.

Zawiodłem się niestety i uważam wczorajsze spotkanie w dużej mierze za stracone (!)

Poza tym, na spotkanie szedłem również, aby wybadać skąd u +Wojciech Erbetowski stwierdzenie nt. makr:

"Zgadzam się, nie ma makr w Javie (i bardzo dobrze), to może urągać metaprogramowaniu w Javie."

które założyłem, że zrodziło się po (nieprzyjemnych?) doświadczeniach z makrami w C i, zupełnie niezrozumiale, niekorzystnie rzutuje na makra w Clojure, z którymi C i Clojure dzielą jedynie nazwę. Byłem dosłownie wściekły (nie, nie tak wściekły, jak dosłownie możnaby to odczytać), kiedy przeczytałem to zdanie i miałem trochę żalu do Wojtka za jego...nonszalancję i nieznajomość tematu w językach alternatywnych do Javy.

Z drugiej strony, właśnie to zdanie i kilka innych w tym wątku sprawiło, że odnotowałem zadanie opisania makr w Clojure na tym blogu, aby przybliżyć go szerszej publiczności i spróbować wyjaśnić wiele niedomówień i nieprawdziwych tez. Wojtek, +Irek Matysiewicz z "W Javie nie można dodawać nowych konstrukcji do języka (np. w Scali można dzięki pluginom a w Clojure podobno dzięki makrom)." oraz Waldek Kot z "Skoro przytaczane tu przykłady języków z "dobrym" metaprogramowaniem (Ruby, Groovy i JavaScript - dodałbym tu pewnie jeszcze Clojure, czyli Lisp) mają swoje implementacje na JVM, to widać, że bytecode Java jest co najmniej "wystarczający"." uzasadnili potrzebę wprowadzenia do makr w Clojure. I to im się chwali!

Na plus spotkania dałbym tematykę oraz liczbę uczestników. I na tym niestety poprzestałbym.

Przez pierwsze 45 minut doświadczyłem "biegania" po wielu, często nieprzystających tematach, co mało brakowało, aby zakończyło się niemałą zadyszką. Trudno było znaleźć punkt zaczepienia i zacząłem się lekko nudzić.

Wojtek to człowiek, którego wszędzie pełno i rozumiem jego chęć podzielenia się wszystkim, począwszy od decyzji związanych z działalnością grupy Warszawa JUG, a skończywszy na jego zaskoczeniach przy tworzeniu RoboSpocka. Dodając do tego ochy i echy w temacie metaprogramowania w Javie i mamy niezły bigos.

Przy RoboSpocku należą się słowa pochwały za "udział" +Polidea we wczorajszym spotkaniu. Przemek przedstawił firmę i zachęcał do bliższego zapoznania się z nią. Peany na jej temat przywoływały mi na myśl konkurencję +SoftwareMill i TouK. Jeszcze stosunkowo niewiele jest firm, którym zależy na prospołecznościowym wizerunku i udzielają się bezpośrednio (wsparcie konferencji, spotkań Warszawa JUG) czy pośrednio (pracownicy są organizatorami konferencji, spotkań JUGów i często występują jako prelegenci na konferencjach) w budowanie lokalnych społeczności javowych. Ostatnio znaczenie nabrało dla mnie istnienie firmy i jej pracowników na Githubie, w czym również Polidea nie odstaje. Gratulacje!

Na minus prezentacji Wojtka przywołałbym "czytanie" ze smartfona. Pewnie gadżet miał wspierać i przypominać o agendzie, a sądzę, że ostatecznie przeszkadzał. Za mało naturalne było to wystąpienie, a z głową w smartfonie trudno było nawiązać kontakt wzrokowy. Próbowałem!

Później na scenie pojawił się +Maciej Jankowski z biblioteką CGLib. Merytorycznie dosyć ciekawie, ale zabrakło kilku sztuczek prezenerskich, aby mnie porwać i w pełni zaangażować w prezentację. Nudziłem się. Kod był, ale obaj panowie kilkukrotnie pozwolili mi sądzić, że jest w nim wciąż stosunkowo wiele nieznanego i zdumione miny pojawiły się kilkukrotnie. Pewnie niemniej zdumieni byli sami uczestnicy.

No i ten para-polski język! Czy mógłby prosić o zaprzestanie korzystania z "kastomizować" na rzecz "dopasowywać" lub malowniczo "kroić na miarę"?

Po Macieju na deskach ponownie zawitał Wojtek z Plastic. Zaczął doskonale, szczególnie, że pora (dobiegała 20:00) prosiła o podobne wejście - padł dowcip, który spróbuję sparafrazować:

"Wiele rozwiązań jest fajnych, a dołączone przykłady sprawiają, że szczęka opada. Nie można tego powiedzieć o Plastic'u!"

Cudo wejście! Od razu się poderwałem i...tyle. Było kilka przykładów z samego repo Plastic'a, ale chaos dał się poznać bliżej i skończyliśmy kwadrans później. Czasowo doskonale, merytorycznie niekoniecznie. Wyniosłem ze spotkania, że ten Plastic to nie dla mnie.

Możnaby odczytywać ten wpis jako negujący sensowność wczorajszego spotkania, ale nie takie jest moje zamierzenie. Bez solidnego treningu nie ma solidnych wyników, a właśnie temu ma służyć grupa Warszawa JUG. Wystąpienia na deskach WJUGa mają być przygotowaniem do wystąpień przed większą publiką podczas konferencji i pamiętając "tylko ten się nie myli, kto nic nie robi" należy czytać ten wpis z wyłącznie przyjacielskim nastawieniem (inne jest niedopuszczalne!)

Do następnego!