16 stycznia 2009

Relacja z pierwszych rozdziałów Beginning Groovy and Grails: From Novice to Professional

Zabrałem się za książkę Beginning Groovy and Grails: From Novice to Professional. Przy lekturze specyfikacji EJB 3.0 przekonałem się, że relacje z jej lektury na blogu, przykłady, wykłady/prezentacje w obu rolach, jako mówiący i słuchający, rozmowy z zainteresowanymi, odpowiedzi na grupach i tak w kółko to najlepszy sposób na dogłębne poznanie tematu. Zauważyłem również, że to właśnie publiczne relacje i prezentacje były odpowiedzialne za utrzymanie tempa rozpoznawania tematu EJB 3.0. Powinno sprawdzić się również przy Grails. Nie inaczej zamierzam podejść do Groovy & Grails. Pierwsze rozdziały książki niejednokrotnie kończyły się "ochami" i "echami", i nie ukrywam, że poddałem się euforii języków skryptowych i ich możliwości. W tym przypadku jest to Groovy, ale pewnie nie inaczej byłoby z JRuby (przyszło mi pracować swego czasu z Jythonem i nie zrobił on na mnie takiego wrażenia). Jedno, co mnie martwi to brak możliwości wykorzystania możliwości Grails w publicznej odsłonie - brakuje hostingu. Podobnie jak sprawa hostingu aplikacji javowych. Generalnie posucha w Polsce i co bardziej zaradni migrują na serwery zachodnie. Coś należałoby w tej materii zdziałać, bo nie wierzę, że nie ma zainteresowania firm hostujących dodatkowym zarobkiem w nowym segmencie rynku hostingowego. Przytłacza wszechobecność rozwiązań LAMP (Linux+Apache Web Server+MySQL+PHP), a tak niewiele ofert javowych. To powinno być zadanie #1 dla wszystkich polskich JUGów, aby wesprzeć inicjatywy lokalnych firm hostujących. Może jakaś firma hostująca umożliwiłaby próby za niewielką opłatą? Chętnie skorzystam i poreklamuję oferenta ;-)

Pierwszy rozdział książki "Introduction to Groovy" to opis instalacji Groovy i poznanie niektórych jego cech na przykładzie migracji klasy javowej z main na odpowiednik w Groovy. Niewiele do relacji, a dodatkowo można go przeczytać samodzielnie. Po prostu jest dostępny bezpłatnie - Ch. 01 - Introduction to Groovy. Pierwsza cenna wiedza jaka płynie z tego rozdziału to taka, że wszyscy programujący w Javie są programistami Groovy. Wystarczy po prostu zmienić rozszerzenie dowolnej klasy javowej na .groovy i uruchomić przez interpreter groovy. Jednak to dopiero początek. Podobnie jak w Javie import java.lang.* jest domyślny, tak w Groovy domyślnie importowane pakiety to java.lang.*, java.util.*, java.net.*, java.io.*, groovy.lang.* oraz groovy.util.*. Pojawiła się wzmianka o GString, który za pomocą ${obiekt.pole} pobiera wartość do pola obiektu. Ciekawym porównaniem słabego typowania w Groovy jest tzw. "duck typing", tj. automatyczne rozpoznawanie typu obiektu na podstawie jego zachowania - jeśli chodzi się jak kaczka (ang. duck) i wydaje głos jak kaczka, to musi być kaczką. Po raz pierwszy można spotkać niejawne użycie domknięć w konstrukcji .each{}. Dla uczących się angielskiego, szczególnie 3rd conditional, warto zwrócić uwagę na ostatne zdanie w rozdziale (zaraz przed Summary):

If we had started with the Groovy idioms to begin with, the Groovy approach would have been much more productive.

Kolejny rozdział "Groovy Basics" to przegląd języka. Możnaby zaliczyć go do kwintesencji specyfikacji języka, ale od czasu do czasu pojawiają się ciekawostki w formie przykładów. Zdecydowanie nie warto przechodzić do kolejnych rozdziałów bez jego lektury, aczkolwiek zapewne wielu doświadczy zawiłości^H^H^Hodmienności języka Groovy już podczas pracy z nim. Ważne - skrypt Groovy można skompilować do postaci klasy javowej z użyciem kompilatora groovyc (odpowiednik javowego javac). Następnie uruchomienie tak skompilowanego skryptu Groovy następuje jak każda inna klasa z java z podaniem biblioteki Groovy - embeddable/groovy-all-*.jar. Pojawił się przykład połączenia klasy w Javie z Groovy i tutaj "zwykłe" javowe IDE nie ma szans - koniecznie musi być wsparcie dla typów definiowanych w Groovy, aby można było bez komplikacji z nich korzystać w silnietypowanych klasach javowych. Konwencją Groovy jest zawsze zwracanie wyniku działania metod. Pojawił się przykład z assert w Groovy, który ma składnię dokładnie jak w Javie, a jego wprowadzenie było wymuszone przez udostępnienie w nim użycia możliwości Groovy - konstrukcji, które nie są znane assert w Javie. Dodatkowo assert zwraca warunek w komunikacie przy jego niespełnieniu (false). Następnie autorzy przeszli do typu znakowego - w cudzysłowach, pojedyńczych cudzysłowach i (inaczej niż w Javie) ukośnikach zwanych "slashy strings" (cięte ciągi? - a może po prostu cięgi). W ciętych ciągach niekonieczne jest używanie wstecznych ukośników do pozbycia się specjalnego znaczenia specjalnych symboli, np. $, poza samym ukośnikiem. Poza ciągami z pojedyńczymi cudzysłowami korzysta się z konstrukcji ${obiekt.pole} (czego nie ma w Javie). Można również tworzyć wielolinijkowe ciągi przy pomocy potrójnych cudzysłowów lub pojedyńczych cudzysłowów. Kolejna odmiana od Javy. I w końcu przychodzi pora na domknięcia (ang. closures). Nigdy do końca nie mogłem zrozumieć ich siły, ale mam to już za sobą - w końcu dostrzegłem ich zalety. Domknięcie jest blokiem z pewną liczbą konstrukcji językowych Groovy, który można przypisać do pola, zmiennej lub przekazać jako parametr metody. Szukając analogi do Javy, to jest to metoda bez nazwy i zwracanego typu, tj. samo ciało metody między nawiasami klamrowymi. Podobnie jak definiujemy metodę w Javie i możemy ją wykorzystywać w wielu miejscach, podobnie jest z domknięciami w Groovy. Domknięcie jest obiektem, a metoda nie. Jeśli domknięcie nie przyjmuje parametrów należy używać nawiasów, a przy podaniu parametrów nie są konieczne. Domknięcie może korzystać ze zmiennych w zasięgu (widocznych dla) jego definicji. Domyślnym parametrem dostępnym w domknięciu jest it. Po przykłady zapraszam do książki (albo należy uzbroić się w cierpliwość, bo zapewne niebawem pojawią się i u mnie). Później opisane są kolekcje, o których w następnej odsłonie. Książka zapowiada się niezwykle ciekawie.

Dla zainteresowanych wsparciem (moralnym) blogera nadmienię, że blog wystartował w konkursie Blog Roku 2008, który wszedł w etap II - nominowania blogów. Oddajemy głos na Notatnik przez wysłanie SMSa o treści B00204 (czytaj: be-zero-zero-dwa-zero-cztery) pod numer 7144. I tyle! Ja już wysłałem ;-) Zgodnie z informacją na stronie konkursu koszt SMSa to 1,22PLN brutto. Więcej formalności w Ogólne zasady tegorocznej edycji. Ciekawym jakim zainteresowaniem cieszy się Notatnik?!

7 komentarzy:

  1. SMS poszedł. Wprawdzie Groovy na razie mnie nie interesuje ale ciekawa notka.

    OdpowiedzUsuń
  2. A to dobre, bo "ciekawą notkę" pisałem trochę wbrew sobie, tzn. skracałem, gdzie możliwe i stąd np. brakuje przykładów. Ostatnio bardzo często czytam pRaSSówkę przez komórkę i strasznie denerwowały mnie wpisy, które były zbyt rozwlekłe i treść zajmująca 2-3 strony mogłaby zająć 1. Pisząc ten wpis miałem obawy, że jakkolwiek treść techniczna, to bez przykładów będzie bezwartościowa. A tu proszę - osoba niezainteresowana Groovy'm stwierdza, że jest to "ciekawa notka". Budujące. Dzięki! Krótki komentarz, a jaki wartościowy. Dzięki również za smsa.

    OdpowiedzUsuń
  3. Ależ nie ma za co :-)

    A notka owszem, jest ciekawa, ponieważ daje pewien obraz książki (w końcu to recenzja) oraz obraz (niewielki ale jednak) samego Groovy'ego. To wystarczy do tego, żeby wrócić do tej notki, kiedy będę szukał książki lub innych informacji na temat języka Groovy.

    OdpowiedzUsuń
  4. A co dokładnie widziałbyś na takim hostingu (jaki serwer usług) ?

    OdpowiedzUsuń
  5. Na początku na pewno niewielką przestrzeń dyskową, powiedzmy 1GB z 1GB RAMu z dostępem do powłoki. Postawiłbym na tym serwer Jetty i sprawdził możliwość hostowania aplikacji grailsowych dla zainteresowanych, na żądanie. Coś ala ~uzytkownik na Apache. Do tego jakaś bazka MySQL, albo podobnie i voila - hosting gotowy. Pewnie byłyby ze współdzieleniem portu 80 na wiele aplikacji jakieś problemy, ale jeśli nie zacznę, to ich nie poznam, a więc i im nie będę mógł zaradzić. Gdyby konteksty aplikacji nie nakładały się możnaby na początku uruchamiać wszystkie w ramach pojedyńczej instancji Jetty. Takie luźne pomysły na początek. Najważniejszy jest RAM - reszta mniejszego znaczenia.

    OdpowiedzUsuń
  6. Co do hostingu to moze by tak Amazon EC. Zobacz przy okazji cloudtools.

    OdpowiedzUsuń
  7. O! Proszę, co może zdziałać publiczna prośba o pomoc. Nawet nie wiedziałbym, o co pytać, a tu proszę - wydaje się, że dostałem wszystko na tacy i to całkowicie bezpłatnie. Pozostaje tylko rozpracować szczegóły. Masz jakieś doświadczenia z tym? Sugestie? Dzięki wielkie za namiary, lechique!

    OdpowiedzUsuń