pt>

środa, 11 kwietnia 2012

O LambdaJ i Guavie i mojej prelekcji na JUG

    Witam pod dłuższej przerwie. Dzisiejszy wpis będzie trochę inny niż pozostałe, dlatego iż nie będzie typowo technicznym wpisem. Przez ostatnie tygodnie, "po godzinach" przygotowywałem się do prelekcji którą wygłosiłem 03.04.2012. Dzięki mojemu osobistemu fotografowi, Annie Mazińskiej, mogę pokazać również parę zdjęć :)



    Nie obyło się bez pewnych perturbacji logistycznych - sala, w której mieliśmy się spotkać (3180 MIMUW) okazała się być zajęta i musieliśmy się przemieść piętro niżej.  Jednak mimo to przyszło 46 osób :) 4 osoby więcej i bym dostał licencję na Ideę , ale się nie udało :( 


    Pierwszą część prezentacji stanowiło przedstawienie większości konstrukcji z biblioteki LambdaJ, gdzie dużą uwagę poświęciłem domknięciom - zarówno w klasycznej wersji jak i domknięciom "leniwym" (delayed closures). Nie bez powodu poświęciłem temu zagadnieniu więcej czasu. Po pierwsze - domknięć nie ma w standardzie, przez co nie są naturalnym dla języka tworem, przez co są trudniejsze do zrozumienia. Drugi powód to konkurs a poniżej nagroda.


    Nagrodą była butelka wina własnej produkcji, wina "Rajskiego". konkurs dotyczył domknięć "leniwych". Klasyczna wersja domknięć z LambdaJ jest prosta, łatwa i przyjemna, gdyż domknięcia zostały tam stworzone po to by uniknąć definiowania nieczytelnych wewnętrznych klas anonimowych. Natomiast domknięcia "leniwe" odwracają kolejność i sposób definiowania. Najpierw definiujemy treść domknięcia, nie robiąc nic innego niż stworzenie anonimowej klasy wewnętrznej a dopiero później określamy zmienne, które będziemy domykać i wolne zmienne. Idea jest wyjątkowo pokrętna, jednak, z technicznego punktu widzenia udało mi się wszystkim wyjaśnić jak napisać taką konstrukcję i co wewnątrz się dzieje. Konkurs polegał na tym by do końca spotkania uczestnicy wymyślili praktyczne zastosowanie dla tej idei, wygra ten którego pomysł zdobędzie największe uznanie uczestników. Nie było łatwo, temat trudny oraz skomplikowana idea domknięć leniwych, postawiły poprzeczkę bardzo wysoko. Zwycięzca zaproponował by tej konstrukcji używać gdy potrzebujemy wykonać ciąg operacji na obiekcie/kolekcji, lecz w danym momencie nie znamy ani obiektu ani typu, dodatkowo, "produkt", który chcemy domknąć pojawia się w środku tego ciągu instrukcji. Przykład to obróbka iteracja po elementach grupy (grupa w LambdaJ jest czymś w rodzaju listy map) i zapisywanie wyników w różny sposób - czy to na dysku, czy do bazy lub wypisanie na ekran. Wiem że to nie jest proste, dlatego temu tematowi poświęcę osobny wpis. Wróćmy do prezentacji, po LambdaJ zaprezentowałem biblioteki Guavy gdzie omówiłem filtrowanie oraz transformacje - są to konstrukcje mające odpowiedniki w LambdaJ, jednak nie tylko gdyż Guava ma wiele innych funkcjonalności niedostępnych w LambdaJ. Ostatnią częścią prelekcji było rozstrzygnięcie konkursu.
 



    Czas na krótkie posumowanie. Była to moja pierwsza prelekcja przy publiczności innej niż ludzie z zakładu, co spowodowało pewną tremę - ale nie było źle ;) Popełniłem parę błędów. Wiem, dziwne że piszę o błędach, lecz po to by wykazać czego należy się wystrzegać będąc prelegentem. Pierwsza rzecz to zapomniałem się przedstawić. Każdy prelegent powinien się przedstawić, nawiązać kontakt z publicznością i stać się kimś więcej niż tylko "wykładowcą", warto powiedzieć choćby trochę o hobby swoim czy opowiedzieć anegdotkę związaną z prezentacją/jej genezą - powiedzieć dlaczego tutaj jestem. Kolejnym błędem było przeplatanie części teoretycznej z praktyczną. Otóż na prelekcji po pierwsze nie ma czasu na odszukiwanie konkretnych fragmentów kodu a po drugie zbyt niska rozdzielczość projektora skutecznie utrudnia przełączanie się  między treścią prezentacji a kodem w IDE. Co mi się udało? Hmmm cała reszta :)




4 komentarze:

  1. Z niecierpliwością oczekuję cyklu wpisów dot. LambdaJ, bo ciekawym, ile podobieństwa ma to cudo do funkcyjnego Clojure, albo do zmian wprowadzanych w ramach lambda w JDK 8.

    Piszesz ciekawie, więc tym bardziej nalegam :)

    OdpowiedzUsuń
    Odpowiedzi
    1. To żadne cudo, przekonasz się ;) to imitacja domknięć - np jakie pokazywałeś w Closure. Z najświeższej chwili, badam kwestię domknięć w C# Hmmm to jest dopiero coś :)

      Timer tmp = new Timer { Interval = 500 };

      tmp.Tick += new EventHandler((obj, evt) =>
      {
      if ((((TextBox)sender).Text == null || ((TextBox)sender).Text == "") && bool_validating)
      {
      e.Cancel = true;
      ((Timer)obj).Stop();
      MessageBox.Show("Pole nie może być puste");
      }
      });
      tmp.Enabled = true;

      może formatowanie nie teges... lecz pomijając formatowanie, to już bardziej przypomina domkniecie.

      Nawet mi się podobają te konstrukcje językowe - jednak zdaję sobie sprawę że mało praktyczne :( jaram się tym jako ciekawostką.

      Usuń
  2. Pewnie nie uwierzysz, ale wiem, o czym piszesz doskonale. Właśnie kończę lekturę Real-World Functional Programming (With examples in F# and C#) panów Tomas Petricek i Jon Skeet, i jestem zachwycony tym, co mogłem doświadczyć w F# i przy okazji w C#.

    Mogę Cię jednak uspokoić, bo domknięcia w Java 8 będą podobne. Niedługo przeczytasz na moim blogu. Stay tuned.

    OdpowiedzUsuń
    Odpowiedzi
    1. Hehehe raczej spodziewałem się że widząc kod nie będziesz miał problemu z kodem który zapodałem i nie będzie on zaskoczeniem. Ja strasznie się podjarałem domknięciami i traktowanie wywołania metod jak obiektów. Jednak z przykrością muszę stwierdzić że u mnie w zakładzie jedynie ja podzielam ten entuzjazm :( po prelekcji na JUG chciałem zrobić prezentację dla ludków z firmy ale nikt nie był zainteresowany mimo że głównie robi się w javie i oraclu.... tak więc ciężko mi jest znaleźć zastosowanie praktyczne tych konstrukcji. No ale może kiedyś... ;)

      Usuń