Polecono mi przeczytanie książki Learning Agile. Stronię od takich pozycji ze względu na ich zerowe przełożenie programistyczne, ale najwyraźniej przyszła pora zmienić podejście, bo za często domaga się ode mnie umiejętności zbudowania i poprowadzenia zespołów programistycznych.
W lekturze tej książki nie byłoby nic nadzwyczajnego, gdyby nie zbieżność wydarzeń, która sprowadziła czytanie w wolnej chwili do czytania w czasie służbowym jako pełnoprawne zadanie projektowe (!)
Zaintrygowany? Ja byłbym, a nawet jestem!
Dzisiejszy dzień rozpocząłem od pożegnania zespołu, który przez ostatnie tygodnie borykał się z dostarczaniem oprogramowania na czas. Mój czas dobiegł końca - zespół działa i jest gotowy do samodzielnego podejmowania decyzji z pomocą osób odpowiedzialnych za docelową postać wytwarzanego produktu. Można by o tym pisać całe tomy - kto, kiedy, dlaczego, po co, itp. - ale istota sprawy to aż kłujący w oczy brak doświadczenia mojego i zespołu w planowaniu i późniejszym realizowaniu założonego harmonogramu. W zasadzie nałożyły się na to młodość zespołu oraz brak myślenia startup'owego (w którym w moim wyobrażeniu zakłada się czas finansowania, a jego niedotrzymanie skutkuje natychmiastowym rozwiązaniem zespołu -- takie myślenie bardzo pomaga mi w podjęciu decyzji co jest aktualnie ważne i czy zespół ma dane zadanie robić).
Leżeliśmy na całego.
I wtem kolega z zespołu postanowił "wyposażyć" się we wspomnianą książkę Learning Agile. Super, ekstra i fajnie byłoby poczytać, ale jak tu poradzić sobie z "delivery" po nocach i jednocześnie czytaniem książki?! I tak sobie książka poleżała tydzień na moim biurku, a my jak w ukropie lataliśmy łatać dziury. Pewnie popełnialiśmy wszystkie możliwe błędy prowadzenia projektu informatycznego wytwarzania oprogramowania biorąc dowolną metodykę jego prowadzenia.
Już sama obecność książki dodawała nam jednak otuchy, że jak już wszystko się skończy, to po tym całym zamieszaniu przyjdzie w końcu czas, kiedy choćby nieznacznie, ale odetchniemy i będzie można upajać się zawartością książki ("nadzieja umiera ostatnia", co?)
Jakoś tak się złożyło, że z tym zespołem upajać się zawartością tej książki już nie będę, ale książka została ze mną.
Tego samego dnia pojawiłem się w innym zespole programistycznym, w którym metodyki lekkie agile brano poważniej pod uwagę i wytwarzanie "softu" jest u większości w DNA. Chce się go przez wszystkich, ale brakuje lidera agilisty, który przeprowadziłby zespół przez zaułki wdrażania tego narzędzia zgodnie ze sztuką. Przyjdzie pewnie borykać się nam z antywzorcami wdrażania agile nie raz i nie dwa. Bywa (chociaż wierzę, że ten wpis wzbudzi litość u kilku agilistów, którzy odezwą się z propozycją komercyjnej pomocy we wdrożeniu procesu - będę zobowiązany!)
Książka w mojej dłoni powędrowała do wszystkich osób w zespole, które wprawdzie wyraziły zainteresowanie agile i książką, ale niekoniecznie samym sposobem pozyskania odpowiedniej wiedzy w temacie czyli czytaniem. To kolejny zespół, który jest przeładowany zadaniami i ni jak nie można znaleźć miejsca na czytanie książki. Bywa.
Jako, że doświadczenia ostatnich 2 lat pokazują, że czeka mnie "kariera" osoby zestawiającej zespoły informatyczne celem uruchomienia linii produkcyjnej do wytwarzania oprogramowania, to ta właśnie książka okazuje się być lekturą obowiązkową dla mnie. Trafiłem z nią w końcu do pokoju podatnego na moje sugestie i w którym zgodziliśmy się na...podsumowania rozdziałów!
Okazuje się, że jakkolwiek samo czytanie książek nie jest pożądane przez kogokolwiek z zespołu programistycznego, to już wspomniane podsumowania w postaci listy najważniejszych rzeczy z kilkoma słowami wyjaśnienia, już tak. Można by potraktować to jako porażkę "systemu" edukacji informatycznej, ale dla mnie to była szansa zrobienia czegoś zamiast lamentowania i zrobienia niczego.
I tu zaczęło się moje zdumienie, bo owe podsumowywania zaproponowano umiejscowić na Wiki zespołu! Pomysł nabrał rumieńców projektowych i stał się dobrem zespołu. Odpalono zadanie w JIRA na potrzeby tego przedsięwzięcia i czytanie książki stało się sprawą ważną, bo zgodną z dyrektywą odgórną, która mocno podkreślała wdrożenie agile, a w zespole poszanowanie i stosowanie jego zasad.
W ten sposób czytanie książki Learning Agile stało się zadaniem projektowym.
Zdumiony? Ja wciąż jestem. I nie mogę uwierzyć, jak niewiele trzeba, aby z często niechcianego obowiązku nauki po pracy, zrobić pełnoprawne zadanie projektowe ku szczęśliwości wszystkich zaangażowanych. Ostatecznie nie powinno być stratnych takiej decyzji - ja "zaliczę" książkę, wiedzę przekażę zespołowi w postaci podsumowań w stylu notatek na blogu, aby w ten sposób zainicjować proces przyswajania wiedzy metodyk lekkich prowadzenia projektów w zespole programistycznym. Ja jestem in plus, zespół również, a szefostwo dostaje produkt wysokiej jakości i terminowo (przynajmniej teoretycznie). Cudo!
Docelowo pewnie czeka nas zaproszenie do zespołu praktyka, który przedstawi nam, co i jak się stosuje w praktyce, ale przyczółek zmian już wyczuwam. Idzie ku dobremu!
Matt, zlituj się, pomógłbyś nam trochę i pojawił na kilku spotkaniach u nas w biurze, co? Wskazałbyś innych ekspertów w temacie, a my oddamy się do Twojej/ich dyspozycji. Może Tomek i Mateusz mogliby również wesprzeć nasze starania?
Ogłoszenie parafialne: kolejne zespoły, które doświadczą mojej obecności w roli członka zespołu, mogą liczyć na permanentną indoktrynację agile'ową, którą na początku zdobędę lekturą książki "Learning Agile" oraz z życia doświadczając praktycznie mechaniki prowadzenia zespołów programistycznych. Na chwilę obecną mam na swoim koncie 3 przypadki zmontowania zespołu i zestawienia linii produkcyjnej w roli lidera, co daje mi jedynie mgliste pojęcie o problemie. Nie poprzestaję jednak.
Pokazywanie postów oznaczonych etykietą książki. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą książki. Pokaż wszystkie posty
27 lutego 2015
21 czerwca 2010
Recenzja "Dependency Injection, Design patterns using Spring and Guice" z Manning
Cóż za niesamowita książka! Jak wspominałem w "Sport to zdrowie", a na mojego nosa jest jednak inaczej, w trakcie oczekiwania na wizytę w gabinecie laryngologicznym dotarłem do końca Dependency Injection, Design patterns using Spring and Guice autorstwa Dhanji R. Prasanna (Manning, sierpień 2009) i jestem nią wprost urzeczony.
Książka naładowana wiedzą dotyczącą koncepcji wstrzeliwania zależności (ang. dependency injection) oraz tematów wspierających jak zarządzanie stanem i wzorców programistycznych - proxy, adapter i provider na przykładach ze Spring Framework i Google Guice (głównie jednak tego drugiego, Guice). Nieoczekiwanie zrozumiałem podstawy do stworzenia trzech specyfikacji Java EE 6 - JSR-299: Contexts and Dependency Injection for the Java EE platform (CDI), JSR 330: Dependency Injection for Java i JSR-316: Java EE 6 Managed Beans, a tym samym zdobyłem garść pożytecznych informacji na tematy, o których jeszcze przed miesiącem mogłem jedynie pomarzyć. Takie akcje lubię najbardziej - robię jedno, a kończę wiele.
Książkę trafiła w moje ręce w ramach programu "Książka dla JUGa za recenzję" i nie potrafię wytłumaczyć, dlaczego zdecydowałem się na jej lekturę. Jest kilka książek, które czekają na mnie, ale akurat padło na nią. Nie żałuję tej decyzji i dziwię się, że nie zabrałem się za nią wcześniej. Ech, gdybym tylko wiedział...Książka trafiła na półkę Biblioteki Warszawskiego JUGa i czeka na kolejnego zainteresowanego zgłębieniem tajników wstrzykiwania zależności oraz podstaw technologicznych stojących za stworzeniem wspomnianych specyfikacji Java EE 6. Dodatkowo można w bardzo przyjemny sposób zapoznać się z Google Guice, co jest o tyle niebezpieczne, że można stać się jego zagorzałym zwolennikiem. To, co mogłem wyczytać o Guice z tej książki z pewnością plasuje mnie w gronie takowych. Ostrzegałem.
Zainteresowanych angielskojęzyczną recenzją zapraszam do mojego artykułu na Wiki - Book review: Dependency Injection.
Jeszcze nie wybrałem kolejnej książki, mimo, że czeka kilka, ale chętnie wysłucham sugestii. Tylko proszę nie wspominać o Clean Code: A Handbook of Agile Software Craftsmanship, bo już zamówiona i pewnie zabrałbym się za nią, gdybym ją miał pod ręką. Wersja polska Czysty kod. Podręcznik dobrego programisty również w drodze.
p.s. Czytałem dzisiaj również bardzo ciekawy artykuł Functional Programming For The Rest of Us nt. programowania funkcyjnego (PF) i wciąż nie mogę otrząsnąć się z wrażenia, jak fascynujący świat kryje się za nim. Chciałbym go skosztować, ale najwyraźniej brakuje mi zapału. Gdyby tak zechciał znaleźć się mentor, któremu udałoby przeciągnąć mnie przez meandry myślenia OO ku PF byłoby cudnie. Clojure preferowany.
p.s. Zostały jedynie 4 dni do naszego społecznościowego święta - konferencji Javarsovia 2010! Koniecznie musimy obgadać to i owo. Gotowym na zaczepki - wystarczy przywitać się (mile widziane komentarze, jakie to fajne rzeczy opisuję na blogu :)), ale można i zagadnąć o cokolwiek ze świata Javy. Chętnie poznam Wasze opinie, które sprawią, że moje pomysły nabiorą rumieńców.
Książka naładowana wiedzą dotyczącą koncepcji wstrzeliwania zależności (ang. dependency injection) oraz tematów wspierających jak zarządzanie stanem i wzorców programistycznych - proxy, adapter i provider na przykładach ze Spring Framework i Google Guice (głównie jednak tego drugiego, Guice). Nieoczekiwanie zrozumiałem podstawy do stworzenia trzech specyfikacji Java EE 6 - JSR-299: Contexts and Dependency Injection for the Java EE platform (CDI), JSR 330: Dependency Injection for Java i JSR-316: Java EE 6 Managed Beans, a tym samym zdobyłem garść pożytecznych informacji na tematy, o których jeszcze przed miesiącem mogłem jedynie pomarzyć. Takie akcje lubię najbardziej - robię jedno, a kończę wiele.
Książkę trafiła w moje ręce w ramach programu "Książka dla JUGa za recenzję" i nie potrafię wytłumaczyć, dlaczego zdecydowałem się na jej lekturę. Jest kilka książek, które czekają na mnie, ale akurat padło na nią. Nie żałuję tej decyzji i dziwię się, że nie zabrałem się za nią wcześniej. Ech, gdybym tylko wiedział...Książka trafiła na półkę Biblioteki Warszawskiego JUGa i czeka na kolejnego zainteresowanego zgłębieniem tajników wstrzykiwania zależności oraz podstaw technologicznych stojących za stworzeniem wspomnianych specyfikacji Java EE 6. Dodatkowo można w bardzo przyjemny sposób zapoznać się z Google Guice, co jest o tyle niebezpieczne, że można stać się jego zagorzałym zwolennikiem. To, co mogłem wyczytać o Guice z tej książki z pewnością plasuje mnie w gronie takowych. Ostrzegałem.
Zainteresowanych angielskojęzyczną recenzją zapraszam do mojego artykułu na Wiki - Book review: Dependency Injection.
Jeszcze nie wybrałem kolejnej książki, mimo, że czeka kilka, ale chętnie wysłucham sugestii. Tylko proszę nie wspominać o Clean Code: A Handbook of Agile Software Craftsmanship, bo już zamówiona i pewnie zabrałbym się za nią, gdybym ją miał pod ręką. Wersja polska Czysty kod. Podręcznik dobrego programisty również w drodze.
p.s. Czytałem dzisiaj również bardzo ciekawy artykuł Functional Programming For The Rest of Us nt. programowania funkcyjnego (PF) i wciąż nie mogę otrząsnąć się z wrażenia, jak fascynujący świat kryje się za nim. Chciałbym go skosztować, ale najwyraźniej brakuje mi zapału. Gdyby tak zechciał znaleźć się mentor, któremu udałoby przeciągnąć mnie przez meandry myślenia OO ku PF byłoby cudnie. Clojure preferowany.
p.s. Zostały jedynie 4 dni do naszego społecznościowego święta - konferencji Javarsovia 2010! Koniecznie musimy obgadać to i owo. Gotowym na zaczepki - wystarczy przywitać się (mile widziane komentarze, jakie to fajne rzeczy opisuję na blogu :)), ale można i zagadnąć o cokolwiek ze świata Javy. Chętnie poznam Wasze opinie, które sprawią, że moje pomysły nabiorą rumieńców.
04 marca 2010
"Nie ma geniuszu bez ziarna szaleństwa" - "wątpliwa" lektura o TDD z "Growing Object-Oriented Software, Guided by Tests"
O Test-Driven Development (TDD) każdy gdzieś tam słyszał i niejeden obiecywał wdrożenie jego zasad. Jednym się udaje (albo sądzą, że tak jest), a inni polegli i zarzucili temat. Smutna prawda, ale prawda. Pewnie w dużej mierze dlatego, że pomimo wiadomych zysków - przede wszystkim skoncentrowanie na celu, jakim jest stworzenie działającego oprogramowania, zamiast rozdmuchiwania modelu, później kontrolerów, później widoku i jeszcze tysiąca innych warstw, aby ostatecznie przekonać się, że połowy nie potrzebowano, albo że i tak nie wiadomo, po co i na co, a termin i klient dawno poszli w zapomnienie - wdrożenie takiego podejścia wymaga niezwykłego zdeterminowania zespołu do zrealizowania postawionego celu. Innymi słowy - rygoru i dyscypliny! A kto by tam lubił rygor i dyscyplinę?! Niewielu osobom kojarzy się to z czymś przyjemnym. Mi na pewno nie.Po recenzji Tomka Kaczanowskiego "Growing Object-Oriented Software Guided by Tests - Book Review" i namowie Bartka "Koziołek" Kuczyńskiego (Fwd: A free copy of "Growing Object-Oriented Software, Guided by Tests" for review doable?), aby ją zamówić do Biblioteki Warszawskiego JUGa dotarła i do mnie. W zeszłym tygodniu rozpocząłem jej lekturę i...jestem pod ogromnym jej wrażeniem. Niesamowicie nabałaganiła w mojej głowie. Stąd to użycie słowa "watpliwa" w tytule wpisu, bo narodziło mi się wątpliwości cała masa (i oby nie zakończyło się psychiatrą :)).
Książkę "Growing Object-Oriented Software, Guided by Tests" panów Steve Freeman i Nat Pryce (Oct 12, 2009 by Addison-Wesley Professional) czyta się lekko i przyjemnie. Jestem przy rozdziale 11. "Passing the First Test" (z 27-miu i 2 dodatków), więc praktycznie (dosłownie i w przenośni) niewiele mogę o niej napisać, ale mimo jej początkowego namolnego przekonywania o wyższości TDD nad tradycyjnym podejściem do tworzenia oprogramowania (najpierw model, później interakcje w jego ramach z testami jednostkowymi w międzyczasie), widać jedną wyraźną różnicę w moim postrzeganiu TDD, a tym, co autorzy rozumieją pod tym akronimem.
Do tej pory sądziłem, że TDD to przede wszystkim testy, co jest do tego momentu prawdziwe. W moim jednak rozumowaniu były to przede wszystkim testy jednostkowe przy tworzeniu konkretnych klas (dowolnej warstwy). W tej książce dowiedziałem się prawdy i to nie takiej, jakiej oczekiwałem początkowo. Miałem świadomość różnic w moim postrzeganiu TDD a jego zasadami, głównie z braku praktycznego doświadczenia i niezbyt dalekoidącym zainteresowaniem tematyką, ale to, w jaki sposób TDD przedstawia ta książka przeszło moje najśmielsze oczekiwania. Sprawa rozbija się o te "nieszczęsne" testy. Książka podzielona jest na 5 części, z których pierwszą mam już za sobą Part I. "Introduction", w której dowiedziałem się o teorii TDD i testach...funkcjonalnych, ale nie takich, które weryfikują przydatność gotowego produktu przez klienta (prawdopodobnie wykonanych wspólnie z nim manualnie), ale takich, które zweryfikują automatycznie, że dana funkcjonalność jest gotowa do testowania końcowego z klientem (!) To było dla mnie zabójcze doświadczenie, kiedy dodać do tego, że owe testy tworzy się zanim cokolwiek w naszej aplikacji powstanie, nawet infrastruktura. Czyż to nie (sarkazm włączony) "odświeżające" podejście (sarkazm wyłączony)?!
Zatem, jeśliby potraktować podejście książkowe, to zaczynamy od przekrojowego testu wybranej, pierwszej, zwykle łatwej do osiągnięcia, funkcjonalności końcowej aplikacji. Nie piszę tutaj o testach klasy XYZ, czy testach użyteczności technologi ABC, ale o pokrojeniu całej ostatecznej aplikacji (znanej na bazie dotychczasowych wymagań klienta) na kawałki funkcjonalne - rozpoczynające się od interfejsu użytkownika, a kończące się na systemach wewnętrznych - i bez rozstawionej infrastruktury stworzenie dla wybranego kawałka testu. Z oczywistych względów nie będzie to działający test - nic nie mamy - ale właśnie o to chodzi. Tylko, który zespół to wytrzymuje?! Chyba tylko te najbardziej zdeterminowane, zdyscyplinowane i...tu należałoby dopisać inne zalety zespołów, o których istnieniu nie miałem pojęcia. Jeśli takie istnieją, koniecznie muszę się dowiedzieć o ich stanie duchowym, kiedy nic nie ma, a trzeba stworzyć dla tego czegoś nieistniejącego kod testujący, w którym czerwonego więcej niż czarnego (czerwone to podkreślenie błędu w IDE, a czarne to wpisane litery składające się na test). W/g mnie praca w takim zespole może być tylko przywilejem, a dostosowanie się do reguł TDD...szaleństwem. W tym ujęciu jednak "szaleństwo" jest dla mnie czymś niezwykłym i zagadkowym. "Choć to szaleństwo, jest w nim przecie metoda" powiedział William Shakespeare w Hamlecie, ale podobają mi się też takie powiedzenia (zaczerpnięte z Wikicytaty) - "Kto ukrywa własne szaleństwo, umiera niemy" czy "W szalonym świecie tylko szaleńcy są rozsądni" i "Nie ma geniuszu bez ziarna szaleństwa". Naczytanie się takich powiedzonek nie może pozostać obojętne na nasze postrzeganie świata i podobnie jest z tą książką.
Zgodnie z nią, pierwsza faza TDD to stworzenie testu przekrojowego zwana The Walking Skeleton. Ów "chodzący szkielet" to szkielet przyszłego rozwiązania funkcjonalnego. Jego zadaniem jest sprawdzenie naszej świadomości architektonicznej tworzonej aplikacji i zaproponowanie architektury docelowej. Najlepiej jest, aby test był niewielki, ale dotykał wszystkich warstw, począwszy od interfejsu końcowego użytkownika a skończywszy na systemach zewnętrznych. W książce tworzony jest system aukcyjny jako samodzielna aplikacja desktopowa w JFC/Swingu i komunikująca się przez XMPP (w tej roli Smack) z płatnym systemem aukcyjnym. Do testowania GUI w Swingu wykorzystuje się WindowLicker, o którym nigdy wcześniej nie słyszałem (co, choćby z tego tylko powodu, już stanowi wartość z czytania tej książki). Dopiero w rozdziale 11. "Passing the First Test" przekonam się, jak autorzy zestawiają całe środowisko, więc nie napiszę, co o takim podejściu myślę teraz, poza tym, że jestem równie zdruzgotany, jak niewiele wiedziałem o TDD, jak zaintrygowany nowatorskim podejściem do tworzenia oprogramowania. Oby mi się nie udzieliło, bo nieznającym tematu ciężko będzie zrozumieć...szaleńca :)
Na bazie doświadczeń z tej książki chciałbym zrealizować pewien swój pomysł na aplikację desktopową z GUI w JFC/Swingu. Jednym z problemów, z jakim się obecnie borykam, to wybór między Eclipse RCP a NetBeans RCP. O tych słyszałem, że warto je rozważyć, ale może są inne? Chciałbym, aby tworzenie GUI było równie proste, co ostatnio stworzona przeze mnie aplikacja w Objective-C/Cocoa w Xcode na bazie lektury Introduction to Cocoa Application Tutorial. To było tak niezwykle proste, że uwierzyłem w swoje ukryte pokłady wiary na powrót do C w wersji obiektowej i na MacOS :) Nie chciałym jednak wchodzić w ten temat, kiedy tworzę aplikację GUI przede wszystkim na MS Windows i Linuksa, a Mac OS przy okazji, więc pewnie wybór padnie na Eclipse RCP vs NetBeans RCP. Jako, że nie chciałbym wracać do silnie typizowanego programowania w Javie i Swingu, więc przyjdzie mi skorzystać z Griffon, który jest (jak rozumiem) połączeniem NetBeans RCP i Groovy. Jak się coś nawinie z Clojure może zrobię przeskok, ale na chwilę obecną tnę moje żądze do realizowalnego minimum.
A jak Wam idzie TDD z tworzeniem aplikacji desktopowych w JFC/Swing, NetBeans RCP czy Eclipse RCP? Co polecacie na warsztat? Gdyby jeszcze było na tyle lekkie, aby dało się to puścić przez Java Web Start byłoby cudnie (aczkolwiek jest to wymaganie niewielkiego znaczenia).
28 stycznia 2010
Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2
Pod wpływem uroków JPA2 z "Pro JPA 2: Mastering the Java Persistence API" postanowiłem zestawić środowisko do nauki specyfikacji i tak powstał artykuł Java Persistence (JPA) 2.0 praktycznie - zestawienie środowiska z EclipseLink i Apache Maven 2. Początkowo spisywałem kroki, aby przymierzyć się do screencastu, ale skoro już pojawił się artykuł, pomyślałem, że z nim zawojuję świat :) W artykule wykorzystałem EclipseLink (referencyjna implementacja JPA2), Apache Maven 2 oraz NetBeans IDE i Mercuriala. Pomyślałem o wystawieniu projektu w sieci w jakieś przystępnej formie i padło na Google Code z włączonym Mercurialem. W ten sposób można popróbować się z rozproszonym repozytorium hg i JPA2 jednocześnie. To lubię. Uwagi mile widziane.
p.s. Dostałem informację od Suna, od Oliwi, w związku z tematem Pakiety certyfikacyjne od Suna za 600 PLN do końca stycznia. Dzisiaj, 28.01.2010, jest ostatnim dniem ważności oferty. Śpieszcie się!
10 lutego 2009
Wieści z rozdziału 1. w "The Definitive Guide to Grails, 2nd Ed."
Zgodnie z zapowiedzią zabrałem się za lekturę książki The Definitive Guide to Grails, 2nd Ed. autorstwa Graeme Rochera oraz Jeffa Browna. Obaj panowie wielce zasłużeni dla projektu Grails, więc nie byłem wcale zdziwiony sposobem, w jaki obaj przedstawiają go - w samych superlatywach i to w niezwykle kwiecistym języku angielskim. Można połączyć przyjemne - poznawanie Grails - z pożytecznym - nauka zwrotów angielskich (nawet pojawiło się zdanie z Future perfect!). Czyta się niezwykle przyjemnie i jakkolwiek wszystko to już czytałem w poprzedniej książce o Grails - Wieści z rozdziału 4. "Introduction to Grails" z "Beginning Groovy and Grails" oraz Tworzenie interfejsu użytkownika w Grails - rozdział 5 z "Beginning Groovy and Grails", to wtedy były dwa rozdziały, a teraz jeden. To samo, a jakby inaczej.
Rozdział 1. "The Essence of Grails" rozpoczyna się mottem Leonardo da Vinci "Simplicity is the ultimate sophistication.", które w zasadzie podsumowuje peany autorów na temat prostoty jaką wprowadziły Groovy i Grails w życie programistów javowych. Należy przypomnieć, że Ci, którzy nie mają przyjemności pracować z tandemem Groovy/Grails jedynie "conjure up unknown horrors and nightmarish thoughts of configuration, configuration, configuration." (z Grails, the Platform, str. 3). Tak przy okazji, w życiu nie spotkałem tego zwrotu conjure up.
Autorzy rozpoczynają książkę przedstawieniem genezy Grails - "dramatically simplify enterprise Java web development." (str. 1). Z konwencją-nad-konfiguracją (ang. CoC - Convention over Configuration), DRY (ang. Don't Repeat Yourself), domyślnymi ustawieniami, gotowym do użycia środowiskiem na bazie Spring Framework, Hibernate, SiteMesh, Jetty, HSQLDB oraz Groovy (przez co mamy dostęp do pełnego zestawu możliwości platformy Java) możemy czerpać garściami z podobnych rozwiązań jak Ruby on Rails, Django czy TurboGears (wspomina się później również CakePHP), które do tej pory były poza zasięgiem programistów javowych. Z Grails mamy tą kwestię rozwiązaną. Jako programiści aplikacji grailsowych nie musimy wiedzieć, że nasze rozwiązania bazują na Spring Framework oraz Hibernate (a już na pewno nie musimy schodzić na poziom ich konfiguracji w XMLu), ale gdy poczujemy taką potrzebę możemy je dodatkowo "dostroić" do naszych potrzeb. Za autorami - Grails jest "a platform with ambitious aims to handle everything from the view layer down to your persistence concerns." (str. 3) oraz jako programista "you have the assurance that you are standing on the shoulders of giants with the technologies that underpin Grails: Spring, Hibernate, and, of course, the Java platform." (str. 1). Mało? Mnie wystarczy. Chyba nie da się nie zauważyć, że trudno byłoby znaleźć mi w tej chwili lepsze rozwiązanie do tworzenia aplikacji webowych niż Grails.
Po tych wyniesieniach przechodzimy do zapoznania się z krokami do utworzenia pierwszej niezwykle trywialnej, bo składającej się z pojedynczego kontrolera, aplikacji grailsowej - gTunes. Aplikacja gTunes to sklep muzyczny ala Apple, Amazon czy Napster. Oczywiście krótki przerywnik w postaci instrukcji instalacji Grails - pobieramy paczkę dystrybucyjną z http://grails.org, rozpakowujemy do wybranego katalogu, ustawiamy zmienną GRAILS_HOME i PATH, i tyle. Przepis na aplikacyjkę to grails create-app, grails create-controller, grails test-app, aby zakończyć grails run-app. Nie wiemy, po co nam każde z tych poleceń?! Wystarczy grails help <polecenie>. Warto podkreślić, że książka opisuje rozwojową wersję Grails 1.1 (aktualnie mamy dopiero Grails 1.1 beta 3). Nie od parady nosi tytuł "The Definitive Guide to Grails".
Jakkolwiek możemy korzystać z pomocy poleceń grails (który jest skryptem Gant) to mamy również możliwość tworzenia wszystkiego "z ręki". Wybór należy do nas samych.
Podkreśla się znaczenie testów jednostkowych i integracyjnych, chociażby ze względu na dynamiczną naturę Groovy, który, podobnie jak inne języki skryptowe - Ruby i Python - nie posiadają takiego arsenału weryfikacyjnego jak statycznie typowane języki, np. Java. Właśnie z tego powodu wielu wybiera Groovy, ale ma to swoje ograniczenia - większość kontroli poprawności programu przesunięta jest na czas jego uruchomienia. Jeśli kiedykolwiek myślałeś o znaczeniu testów w projekcie, teraz masz powód. Szczęśliwie Grails tworzy odpowiedni byt (kontroler, klasę domenową) wraz z odpowiadającymi testami jednostkowym i integracyjnym.
Podczas grails create-controller tworzony jest kontroler z domyślną akcją (domknięciem) index. Zgodnie z konwencją Grails wykonanie index to wyświetlenie strony grails-app/views/<nazwa-kontrolera (bez Controller)>/index.gsp. Poznajemy metodę render, która m.in. wyświetla tekst na stronie.
Wykonanie testów jednostkowych w Grails wiąże się z taką jego konfiguracją opartą na bytach-zaślepkach (ang. mocks and stubs), które symulują faktyczne zachowanie bytu, dla którego stanowią zaślepkę. Grails umożliwia sprawdzenie, czy wykonanie żądania zwróci zadany tekst (zadaną stronę) przez (Listing 1-9):
Uruchomienie aplikacji to wykonanie polecenia grails run-app (domyślnie na porcie 8080). Jeśli podamy parametr -Dserver.port=<numer-portu>, obowiązującym portem będzie podany.
W ten sposób poznaliśmy podstawowe tajniki tworzenia aplikacji. W kolejnym rozdziale autorzy przygotowali dla nas zestaw cudów do sprawnego tworzenia aplikacji typu CRUD z "some of Grails' Create, Read, Update, Delete (CRUD) generation facilities that allow you to flesh out prototype applications in no time" (str. 15). Jeju, jak tak dalej pójdzie to połowa działu rozwoju pójdzie z torbami (!) W tych czasach należy jeszcze bardziej uważać, co się proponuje w projekcie, bo z 30-osobowego zespołu może zostać trzech i jeszcze dwóch może się nudzić. ;-)
Rozdział 1. "The Essence of Grails" rozpoczyna się mottem Leonardo da Vinci "Simplicity is the ultimate sophistication.", które w zasadzie podsumowuje peany autorów na temat prostoty jaką wprowadziły Groovy i Grails w życie programistów javowych. Należy przypomnieć, że Ci, którzy nie mają przyjemności pracować z tandemem Groovy/Grails jedynie "conjure up unknown horrors and nightmarish thoughts of configuration, configuration, configuration." (z Grails, the Platform, str. 3). Tak przy okazji, w życiu nie spotkałem tego zwrotu conjure up.
Autorzy rozpoczynają książkę przedstawieniem genezy Grails - "dramatically simplify enterprise Java web development." (str. 1). Z konwencją-nad-konfiguracją (ang. CoC - Convention over Configuration), DRY (ang. Don't Repeat Yourself), domyślnymi ustawieniami, gotowym do użycia środowiskiem na bazie Spring Framework, Hibernate, SiteMesh, Jetty, HSQLDB oraz Groovy (przez co mamy dostęp do pełnego zestawu możliwości platformy Java) możemy czerpać garściami z podobnych rozwiązań jak Ruby on Rails, Django czy TurboGears (wspomina się później również CakePHP), które do tej pory były poza zasięgiem programistów javowych. Z Grails mamy tą kwestię rozwiązaną. Jako programiści aplikacji grailsowych nie musimy wiedzieć, że nasze rozwiązania bazują na Spring Framework oraz Hibernate (a już na pewno nie musimy schodzić na poziom ich konfiguracji w XMLu), ale gdy poczujemy taką potrzebę możemy je dodatkowo "dostroić" do naszych potrzeb. Za autorami - Grails jest "a platform with ambitious aims to handle everything from the view layer down to your persistence concerns." (str. 3) oraz jako programista "you have the assurance that you are standing on the shoulders of giants with the technologies that underpin Grails: Spring, Hibernate, and, of course, the Java platform." (str. 1). Mało? Mnie wystarczy. Chyba nie da się nie zauważyć, że trudno byłoby znaleźć mi w tej chwili lepsze rozwiązanie do tworzenia aplikacji webowych niż Grails.
Po tych wyniesieniach przechodzimy do zapoznania się z krokami do utworzenia pierwszej niezwykle trywialnej, bo składającej się z pojedynczego kontrolera, aplikacji grailsowej - gTunes. Aplikacja gTunes to sklep muzyczny ala Apple, Amazon czy Napster. Oczywiście krótki przerywnik w postaci instrukcji instalacji Grails - pobieramy paczkę dystrybucyjną z http://grails.org, rozpakowujemy do wybranego katalogu, ustawiamy zmienną GRAILS_HOME i PATH, i tyle. Przepis na aplikacyjkę to grails create-app, grails create-controller, grails test-app, aby zakończyć grails run-app. Nie wiemy, po co nam każde z tych poleceń?! Wystarczy grails help <polecenie>. Warto podkreślić, że książka opisuje rozwojową wersję Grails 1.1 (aktualnie mamy dopiero Grails 1.1 beta 3). Nie od parady nosi tytuł "The Definitive Guide to Grails".
Jakkolwiek możemy korzystać z pomocy poleceń grails (który jest skryptem Gant) to mamy również możliwość tworzenia wszystkiego "z ręki". Wybór należy do nas samych.
Podkreśla się znaczenie testów jednostkowych i integracyjnych, chociażby ze względu na dynamiczną naturę Groovy, który, podobnie jak inne języki skryptowe - Ruby i Python - nie posiadają takiego arsenału weryfikacyjnego jak statycznie typowane języki, np. Java. Właśnie z tego powodu wielu wybiera Groovy, ale ma to swoje ograniczenia - większość kontroli poprawności programu przesunięta jest na czas jego uruchomienia. Jeśli kiedykolwiek myślałeś o znaczeniu testów w projekcie, teraz masz powód. Szczęśliwie Grails tworzy odpowiedni byt (kontroler, klasę domenową) wraz z odpowiadającymi testami jednostkowym i integracyjnym.
Podczas grails create-controller tworzony jest kontroler z domyślną akcją (domknięciem) index. Zgodnie z konwencją Grails wykonanie index to wyświetlenie strony grails-app/views/<nazwa-kontrolera (bez Controller)>/index.gsp. Poznajemy metodę render, która m.in. wyświetla tekst na stronie.
Wykonanie testów jednostkowych w Grails wiąże się z taką jego konfiguracją opartą na bytach-zaślepkach (ang. mocks and stubs), które symulują faktyczne zachowanie bytu, dla którego stanowią zaślepkę. Grails umożliwia sprawdzenie, czy wykonanie żądania zwróci zadany tekst (zadaną stronę) przez (Listing 1-9):
controller.index()Grails podstawia za servletowy HttpServletResponse springowy MockHttpServletResponse z metodą contentAsString. Wykonanie grails test-app to uruchomienie wszystkich testów jednostkowych, ale możliwe jest również zawężenie testów do pojedynczego podając parametr do grails test-app <nazwa-klasy-testowej (bez Tests)>. W katalogu test/reports znajdują się raporty z wykonania testów w formacie XML, HTML i TXT.
assertEquals "tekst z render", controller.response.contentAsString
Uruchomienie aplikacji to wykonanie polecenia grails run-app (domyślnie na porcie 8080). Jeśli podamy parametr -Dserver.port=<numer-portu>, obowiązującym portem będzie podany.
W ten sposób poznaliśmy podstawowe tajniki tworzenia aplikacji. W kolejnym rozdziale autorzy przygotowali dla nas zestaw cudów do sprawnego tworzenia aplikacji typu CRUD z "some of Grails' Create, Read, Update, Delete (CRUD) generation facilities that allow you to flesh out prototype applications in no time" (str. 15). Jeju, jak tak dalej pójdzie to połowa działu rozwoju pójdzie z torbami (!) W tych czasach należy jeszcze bardziej uważać, co się proponuje w projekcie, bo z 30-osobowego zespołu może zostać trzech i jeszcze dwóch może się nudzić. ;-)
09 lutego 2009
Recenzja "Service Oriented Architecture with Java" i nowa o Grails
Kolejny dzień odnotowuję jako książkowy. Właśnie co skończyłem czytać książkę "Service Oriented Architecture with Java", kiedy pojawiła się nowa - "The Definitive Guide to Grails, Second Edition". Pierwsza pozostawia wiele do życzenia i jakkolwiek nie zaliczam spędzonego nad nią czasu jako straconego (głównie za wyjaśnienie różnicy między architekturą Hub and Spoke a ESB) to spodziewałem się więcej. Miało być o SOA dla programistów lub architektów javowych, a nie znalazłem w niej więcej niż za dużo teorii a za mało praktyki. Dosyć obszernie (jak na zawartość książki) o JAX-WS, niewiele o Apache Axis, Spring-WS, XFire (CXF), a nawet JBI i OpenEJB. Było również o SCA i SDO, więc wszystko i nic. Zbyt obszernie. Recenzję opublikowałem na Amazonie - Perhaps, your time won't be lost either oraz moim Wiki - Book review: Service Oriented Architecture with Java. Recenzja w języku angielskim ze względu na wymagania wydawcy. Poprosiłem tym samym o kolejne:
Pora zabrać się poważniej za UML, jeśli marzy mi się Sun Certified Enterprise Architect (SCEA).
Wracając do tej drugiej pozycji o Grails, to niezwykle szybko działają w Apress. Dopiero, co wysłałem recenzję do wydawnictwa z prośbą o kolejne książki (patrz: Groovy i Grails, Bloger Roku 2008, 4Developers i Refaktoryzacja) i mijają niecałe 4 dni, a książka już u mnie! Miła niespodzianka poniedziałkowa. Oczywiście (chwilowo) zarzucam lekturę JAX-WS na rzecz "The Definitive Guide to Grails, Second Edition". W końcu taki był plan. Książka to "cegła" na 570 stron autorstwa samego Graeme Rochera, który jest głównodowodzącym w projekcie Grails, więc pewnie odpłynę do końca tygodnia. Właśnie zbudowałem nowiuteńką wersję rozwojową Apache Geronimo 2.2 i z nim zamierzam popróbować uruchomienie aplikacji grailsowych. Na początek zabiorę się za artykuł z developerWorks - Apache Geronimo on Grails.
p.s. Konkurs Bloger 2008 roku trwa, w którym zgłosiłem Notatnik. Wystarczy wejść na stronę do głosowania na Notatnik, gdzie podajemy nasz adres email i zatwierdzamy. Coś tam pojawia się w naszej skrzynce, klikamy link potwierdzający w wiadomości i voila. Dziękuję!
Pora zabrać się poważniej za UML, jeśli marzy mi się Sun Certified Enterprise Architect (SCEA).
Wracając do tej drugiej pozycji o Grails, to niezwykle szybko działają w Apress. Dopiero, co wysłałem recenzję do wydawnictwa z prośbą o kolejne książki (patrz: Groovy i Grails, Bloger Roku 2008, 4Developers i Refaktoryzacja) i mijają niecałe 4 dni, a książka już u mnie! Miła niespodzianka poniedziałkowa. Oczywiście (chwilowo) zarzucam lekturę JAX-WS na rzecz "The Definitive Guide to Grails, Second Edition". W końcu taki był plan. Książka to "cegła" na 570 stron autorstwa samego Graeme Rochera, który jest głównodowodzącym w projekcie Grails, więc pewnie odpłynę do końca tygodnia. Właśnie zbudowałem nowiuteńką wersję rozwojową Apache Geronimo 2.2 i z nim zamierzam popróbować uruchomienie aplikacji grailsowych. Na początek zabiorę się za artykuł z developerWorks - Apache Geronimo on Grails.
p.s. Konkurs Bloger 2008 roku trwa, w którym zgłosiłem Notatnik. Wystarczy wejść na stronę do głosowania na Notatnik, gdzie podajemy nasz adres email i zatwierdzamy. Coś tam pojawia się w naszej skrzynce, klikamy link potwierdzający w wiadomości i voila. Dziękuję!
07 lutego 2009
Sun Certified Developer for Java Web Services 5 (SCDJWS) zdany!
Okazuje się, że w przeciwieństwie do mojego wczorajszego pesymizmu o mojej znajomości tematu usług sieciowych (patrz: Zabieram się za JAX-WS), dzisiaj, ku mojemu zdumieniu, otrzymałem następującą wiadomość:
Dear Jacek (Certification ID#: SUN295099)
Congratulations on completing all the requirements for the
Sun Certified Developer for Java Web Services 5 certification. You were certified on 12/10/2008.
Congratulations!
Certification Department
W ten sposób stałem się posiadaczem certyfikatu Sun Certified Developer for Java Web Services 5 (SCDJWS5). Do pełni szczęścia brakuje mi jeszcze informacji o wynikach z poszczególnych obszarów tematycznych, bo pakiet certyfikacyjny jeszcze w drodze.
Jeśli ktoś zapyta, jak się przygotowywałem, z jakich książek korzystałem, to niestety nie będę miał satysfakcjonującej odpowiedzi - po prostu podszedłem do egzaminu "z biegu" i okazuje się, że najwięcej wiedzy dało mi wcześniejsze rozpoznawanie tematu EJB3 z jego @WebService i próby uruchomienia usług sieciowych na bazie EJB3 z Apache Geronimo. Zapomniałem nawet, że udało mi się opublikować kilka artykułów na ten temat - Tworzenie usługi sieciowej z JAX-WS, Tworzenie usługi sieciowej z JAX-WS, Apache Geronimo 2 i NetBeans 6 czy SCAlanie z JAX-WS.
Chciałbym podziękować Grzegorzowi Dudzie za jego wpis SCDJWS za darmo, który był początkiem całej historii (patrz: Sun Certified Developer for Java Web Services (SCDJWS) bezpłatnie do 10 grudnia!). Wielkie dzięki Grześ!
Czy ktoś jeszcze podchodził do tego certyfikatu? Jak poszło?
Wracam do lektury Service Oriented Architecture with Java autorstwa Vincenzo Caselli, Binildas A. Christudas, Malhar Barai (Packt, June 2008). Już się naczekała na swoje "5 minut" na półce Biblioteczki Warszawskiego JUGa. Pierwszy rozdział to porażka - masło maślane, literówki, nuda, ale rozdział 2. czyta się przyjemnie(j). I jest ciekawy przykład z uruchomieniem usługi sieciowej JAX-WS z Endpoint.publish(String address, Object implementor). Takie ciekawostki sprawiają, że czytanie książek, nawet tych początkowo nudnych, może mile zaskoczyć.
Dear Jacek (Certification ID#: SUN295099)
Congratulations on completing all the requirements for the
Sun Certified Developer for Java Web Services 5 certification. You were certified on 12/10/2008.
Congratulations!
Certification Department
W ten sposób stałem się posiadaczem certyfikatu Sun Certified Developer for Java Web Services 5 (SCDJWS5). Do pełni szczęścia brakuje mi jeszcze informacji o wynikach z poszczególnych obszarów tematycznych, bo pakiet certyfikacyjny jeszcze w drodze.
Jeśli ktoś zapyta, jak się przygotowywałem, z jakich książek korzystałem, to niestety nie będę miał satysfakcjonującej odpowiedzi - po prostu podszedłem do egzaminu "z biegu" i okazuje się, że najwięcej wiedzy dało mi wcześniejsze rozpoznawanie tematu EJB3 z jego @WebService i próby uruchomienia usług sieciowych na bazie EJB3 z Apache Geronimo. Zapomniałem nawet, że udało mi się opublikować kilka artykułów na ten temat - Tworzenie usługi sieciowej z JAX-WS, Tworzenie usługi sieciowej z JAX-WS, Apache Geronimo 2 i NetBeans 6 czy SCAlanie z JAX-WS.
Chciałbym podziękować Grzegorzowi Dudzie za jego wpis SCDJWS za darmo, który był początkiem całej historii (patrz: Sun Certified Developer for Java Web Services (SCDJWS) bezpłatnie do 10 grudnia!). Wielkie dzięki Grześ!
Czy ktoś jeszcze podchodził do tego certyfikatu? Jak poszło?
Wracam do lektury Service Oriented Architecture with Java autorstwa Vincenzo Caselli, Binildas A. Christudas, Malhar Barai (Packt, June 2008). Już się naczekała na swoje "5 minut" na półce Biblioteczki Warszawskiego JUGa. Pierwszy rozdział to porażka - masło maślane, literówki, nuda, ale rozdział 2. czyta się przyjemnie(j). I jest ciekawy przykład z uruchomieniem usługi sieciowej JAX-WS z Endpoint.publish(String address, Object implementor). Takie ciekawostki sprawiają, że czytanie książek, nawet tych początkowo nudnych, może mile zaskoczyć.
05 lutego 2009
Groovy i Grails, Bloger Roku 2008, 4Developers i Refaktoryzacja
Skończyłem książkę o Groovy i Grails - Beginning Groovy and Grails: From Novice to Professional, co czytelnicy mojego bloga mogli dostrzec przez ostatnie 2 tygodnie. Od razu wziąłem się za recenzję i opublikowałem ją u siebie w Wiki Book review: Beginning Groovy and Grails: From Novice to Professional, którą również opublikowałem na Amazonie - The book made me a single-technology addict. Wystarczył jeden dzień i "1 of 1 people found the following review helpful". Nie spodziewałem się tak szybkich reakcji.
Skoro wszedłem w nastrój na czytanie książek poprosiłem o kolejne z Apressu:
Thanks so much Jacek! What a great review. We will indeed have the books you requested out to you soon.
Zdaje się, że Groovy i Grails nie opuszczą mnie tak prędko, czego sobie i Wam życzę ;-)
Jeden konkurs minął, a zaczął się kolejny - Bloger Roku 2008. Ten będzie trochę tańszy, bo nie wymaga żadnych SMSów, tylko 3 sekundy Twojego czasu. Wchodzimy na stronę konkursową dla Notatnika (niestety bez potwierdzenia, że faktycznie na niej jesteście!), wpisujemy poprawny adres email i OK. Wdzięczność gwarantowana!
Jeśli jeszcze nie masz planów na 7 marca 2009 (sobota) i będziesz w pobliżu Krakowa warto rozważyć udział w konferencji "dla programistów tworzona przez programistów" - 4Developers. Będzie wiele ciekawych osób (Grzegorz Duda z "Java Underground", Waldemar "Waldi" Kot ze swoim CEPem i Adam Bien, nie zapominając o Nealu Fordzie) , więc i Ciebie nie powinno zabraknąć. Będę i ja z tematem "Zwinne i lekkie aplikacje webowe w Javie z Groovy, Grails i Project Zero". Jest jeszcze trochę czasu, aby podstroić temat i przygotować się na serię pytań, których spodziewam się nie będzie mało. Może warto rozważyć przesłanie mi kilku zawczasu, abym przygotował odpowiedź inną niż "Zapiszę i sprawdzę"? Czekam z niecierpliwością, bo szkoda byłoby powtarzać coś, co wielu dobrze już zna.
Mimo, iż pojawia się jako ostatnia wiadomość, lektura książki "Jak odmienić sposób programowania używając refaktoryzacji" zajęła mi dłuższą chwilę w ostatni weekend. Przyznaję, że nigdy wcześniej nie rozważałem refaktoryzacji jako specjalnego tematu do rozważań - po prostu temat wydawał mi się na tyle integralny w zestawie "narzędzi" programisty, że nie było się czym zajmować. Po prostu był i sądziłem, że wiedza jaką posiadałem była wystarczająca. Właśnie ta książka ukazała mi jak bardzo się myliłem, a w tym całe piękno refaktoryzacji i...prozy Mariusza Sieraczkiewicza. 110 stron czyta się niezwykle przyjemnie dzięki odpowiednio dobranej fabule. Czyta się ją z podobnym zacięciem jak inne książki sensacyjne, w których znajdziemy wprowadzenie do tematu, aby później rozwiązać go bardzo wyrafinowanymi acz prostymi w użyciu metodami. Nie inaczej było w tej książce - (trochę przydługawy) wstęp bodajże przez 2 czy 3 rozdziały, aby w kolejnych pokazać, co w trawie piszczy. Na bazie przykładowej aplikacji Mariusz przedstawia poszczególne kroki w dobrze przemyślanym procesie refaktoryzacji. Jakkolwiek w wielu miejscach, nie popełniłbym tak karygodnych błędów jak krótkie nazwy zmiennych, nieodpowiadające treści nazwy metod, przydługie ify, to nie przeszkodziło to wcale znaleźć w przykładzie wartościowych refaktoryzacji - oczywistych, a wciąż za rzadko stosowanych przeze mnie (zbyt często technika Copy-Paste'a zwycięża). Pora to zmienić i mam świadomość, że książka miała na tą decyzję niemały wpływ. Teraz stałem się wrażliwy refaktoryzacyjnie. Czujcie się ostrzeżeni! ;-)
Skoro wszedłem w nastrój na czytanie książek poprosiłem o kolejne z Apressu:
- The Definitive Guide to Grails, Second Edition
- Groovy and Grails Recipes
- Pro Spring Dynamic Modules for OSGi™ Service Platforms
Thanks so much Jacek! What a great review. We will indeed have the books you requested out to you soon.
Zdaje się, że Groovy i Grails nie opuszczą mnie tak prędko, czego sobie i Wam życzę ;-)
Jeden konkurs minął, a zaczął się kolejny - Bloger Roku 2008. Ten będzie trochę tańszy, bo nie wymaga żadnych SMSów, tylko 3 sekundy Twojego czasu. Wchodzimy na stronę konkursową dla Notatnika (niestety bez potwierdzenia, że faktycznie na niej jesteście!), wpisujemy poprawny adres email i OK. Wdzięczność gwarantowana!
Jeśli jeszcze nie masz planów na 7 marca 2009 (sobota) i będziesz w pobliżu Krakowa warto rozważyć udział w konferencji "dla programistów tworzona przez programistów" - 4Developers. Będzie wiele ciekawych osób (Grzegorz Duda z "Java Underground", Waldemar "Waldi" Kot ze swoim CEPem i Adam Bien, nie zapominając o Nealu Fordzie) , więc i Ciebie nie powinno zabraknąć. Będę i ja z tematem "Zwinne i lekkie aplikacje webowe w Javie z Groovy, Grails i Project Zero". Jest jeszcze trochę czasu, aby podstroić temat i przygotować się na serię pytań, których spodziewam się nie będzie mało. Może warto rozważyć przesłanie mi kilku zawczasu, abym przygotował odpowiedź inną niż "Zapiszę i sprawdzę"? Czekam z niecierpliwością, bo szkoda byłoby powtarzać coś, co wielu dobrze już zna.
Mimo, iż pojawia się jako ostatnia wiadomość, lektura książki "Jak odmienić sposób programowania używając refaktoryzacji" zajęła mi dłuższą chwilę w ostatni weekend. Przyznaję, że nigdy wcześniej nie rozważałem refaktoryzacji jako specjalnego tematu do rozważań - po prostu temat wydawał mi się na tyle integralny w zestawie "narzędzi" programisty, że nie było się czym zajmować. Po prostu był i sądziłem, że wiedza jaką posiadałem była wystarczająca. Właśnie ta książka ukazała mi jak bardzo się myliłem, a w tym całe piękno refaktoryzacji i...prozy Mariusza Sieraczkiewicza. 110 stron czyta się niezwykle przyjemnie dzięki odpowiednio dobranej fabule. Czyta się ją z podobnym zacięciem jak inne książki sensacyjne, w których znajdziemy wprowadzenie do tematu, aby później rozwiązać go bardzo wyrafinowanymi acz prostymi w użyciu metodami. Nie inaczej było w tej książce - (trochę przydługawy) wstęp bodajże przez 2 czy 3 rozdziały, aby w kolejnych pokazać, co w trawie piszczy. Na bazie przykładowej aplikacji Mariusz przedstawia poszczególne kroki w dobrze przemyślanym procesie refaktoryzacji. Jakkolwiek w wielu miejscach, nie popełniłbym tak karygodnych błędów jak krótkie nazwy zmiennych, nieodpowiadające treści nazwy metod, przydługie ify, to nie przeszkodziło to wcale znaleźć w przykładzie wartościowych refaktoryzacji - oczywistych, a wciąż za rzadko stosowanych przeze mnie (zbyt często technika Copy-Paste'a zwycięża). Pora to zmienić i mam świadomość, że książka miała na tą decyzję niemały wpływ. Teraz stałem się wrażliwy refaktoryzacyjnie. Czujcie się ostrzeżeni! ;-)
15 lipca 2008
Słów kilka o Maven 2 w NetBeans 6.5, Sun Certified NetBeans IDE Specialist oraz "GWT w praktyce" Power Netu
Piotr Pietrzak w komentarzu do Klasyfikatory w Maven 2 oraz polonizacja NetBeans IDE odpowiedział na wczorajsze moje bolączki związane z brakiem funkcjonalności NetBeans IDE odpowiadającej eclipsowej wtyczce do obsługi projektów mavenowych - m2eclipse w postaci...filmu (!) Wspaniała forma dyskusji w Sieci. Wierzę, że będą kolejne. Tylko, dlaczego nie ma głosu?! ;-)
Temat pobrania źródeł do zależności projektu mavenowego w NetBeans sprowadza się do Add local sources pod prawym przyciskiem myszki dla wybranej zależności
bądź po prostu Download All Library Sources na węźle Libraries w projekcie.
Co ciekawe, po pobraniu wszystkich źródeł, nazwy plików udekorowane są ikonką ze słoikiem i pakunkiem.
Natrafiłem przy okazji na inną ciekawostkę związaną ze wsparciem projektów mavenowych przez NetBeans 6.5 we współpracy z wtyczką Mevenide-NetBeans - wsparcie dla edycji pom.xml. Co ja będę się rozpisywał, sam zobacz (tym razem w postaci zrzutów ekranu, ale może kolejnym razem będzie bardziej filmowo?!). W lokalnym repozytorium mam
a w edytorze jako podpowiedź otrzymuję (Ctrl+Spacja)
Miła niespodzianka, chociaż zanim mnie mile zaskoczyło nie mogłem doczekać się zaindeksowania repozytoriów mavenowych. Dobrze, że cała operacja odbyła się w tle.
Podczas moich dzisiejszych wyczynów programistycznych z NetBeans IDE 6.5M1 potrzebowałem otworzyć klasę w projekcie i jako, że nie jest to Eclipse Ctrl+Shift+T nie działa...domyślnie. W takich przypadkach wspieram się zawsze pomocą Google, ale tym razem miałem wszystko pod ręką, lokalnie. Help > Keyboard Shortcuts Card
po którym otwiera się dokument pdf ze skrótami. Wystarczyło Ctrl+F (szukaj), wpisanie ciągu type, <Enter> i mam - Ctrl-O/Alt-Shift-O Go to type/file. Nie mogłem oprzeć się, aby nie sprawdzić, czy funkcjonalność znana mi z Eclipse dostępna jest i w NetBeans - wyszukiwanie typów po ich skrótach, np. NullPointerException to NPE, albo NoClassDefFoundError to NCDFE. To również jest w NetBeans! Miło.
Tylko jedno mi doskwiera teraz - dlaczego eclipsowe Ctrl+O w edytorze Java to Ctrl+Shift+F12 w NetBeans?! Nic nie przychodzi mi do głowy, aby podmienić to jakoś sensownie, ale sądzę, że to jedno z bardziej użytecznych funkcji IDE - wyświetlenie elementów typu i możliwość przejścia do wybranego, więc należy się coś bardziej ludzkiego. Może jednak warto zmienić mapowanie klawiszy na eclipsowe? Mam takie skrzywienie uniksowe, gdzie edytuję pliki w vi, podczas gdy na linii komend korzystam z trybu Emacs. Pewnie podobnie będzie z klawiaturą w NetBeans. Jak się człowiek do czegoś przyzwyczai, to trudno mu się oderwać od tego.
Na grupie NetCAT 6.5 Jirka (głównodowodzący programem) poprosił o ocenę przygotowywanego certyfikatu Sun Certified NetBeans IDE Specialist. Czy uważacie, że istnieje faktycznie potrzeba na Sun Certified Netbeans IDE Specialist? Co ono miałoby certyfikować?! Znajomość skrótów klawiszowych? Pozycji menu? A co w przypadku pracy z tłumaczonym środowiskiem? Możesz wyrazić swój głos w ankiecie Sun Certified NetBeans IDE Specialist. Miło zostałem zaskoczony zakresem egzaminu i uważam, że będzie doskonałym sprawdzianem poprawnego użycia NetBeans IDE jako środowiska pracy. Ciekawe, kiedy można oczekiwać odpowiedzi zespołu Eclipse. Fajne takie SCeNBIS oraz ECIS ;-)
Na koniec wiadomość z ostatniej chwili - pojawiła się ciekawa oferta na półce wydawnictwa Power Net - GWT w praktyce autorstwa Roberta Coopera oraz Charles'a Collinsa. Książka została przetłumaczona przez Marcina Leszczyńskiego, który znalazł swoje miejsce w podziękowaniach w wersji angielskiej (!) I ja przyłączam się do podziękowań za podjęcie trudu przetłumaczenia książki na polski. Wbrew panującemu obyczajowi na polskim rynku wydawniczym literatury informatycznej, tłumaczenie pojawiło się 2 miesiące po premierze angielskojęzycznej. Najwyraźniej można, jak się chce. Niedawno miałem okazję ponownie powalczyć z GWT i przymierzałem się do oryginalnej wersji książki, ale skoro jest dostępne polskie tłumaczenie, dlaczego nie zacząć lektury właśnie od niej? Jako rozgrzewkę można zabrać się za lekturę przykładowego rozdziału, który jest dostępny na stronie książki. Najwyraźniej Power Net zaczyna stanowić ciekawą alternatywę dla innych wydawnictw informatycznych z coraz to znaczącymi tłumaczeniami. Gratulacje!
Temat pobrania źródeł do zależności projektu mavenowego w NetBeans sprowadza się do Add local sources pod prawym przyciskiem myszki dla wybranej zależności
bądź po prostu Download All Library Sources na węźle Libraries w projekcie.
Co ciekawe, po pobraniu wszystkich źródeł, nazwy plików udekorowane są ikonką ze słoikiem i pakunkiem.
Natrafiłem przy okazji na inną ciekawostkę związaną ze wsparciem projektów mavenowych przez NetBeans 6.5 we współpracy z wtyczką Mevenide-NetBeans - wsparcie dla edycji pom.xml. Co ja będę się rozpisywał, sam zobacz (tym razem w postaci zrzutów ekranu, ale może kolejnym razem będzie bardziej filmowo?!). W lokalnym repozytorium mam
a w edytorze jako podpowiedź otrzymuję (Ctrl+Spacja)
Miła niespodzianka, chociaż zanim mnie mile zaskoczyło nie mogłem doczekać się zaindeksowania repozytoriów mavenowych. Dobrze, że cała operacja odbyła się w tle.Podczas moich dzisiejszych wyczynów programistycznych z NetBeans IDE 6.5M1 potrzebowałem otworzyć klasę w projekcie i jako, że nie jest to Eclipse Ctrl+Shift+T nie działa...domyślnie. W takich przypadkach wspieram się zawsze pomocą Google, ale tym razem miałem wszystko pod ręką, lokalnie. Help > Keyboard Shortcuts Card
po którym otwiera się dokument pdf ze skrótami. Wystarczyło Ctrl+F (szukaj), wpisanie ciągu type, <Enter> i mam - Ctrl-O/Alt-Shift-O Go to type/file. Nie mogłem oprzeć się, aby nie sprawdzić, czy funkcjonalność znana mi z Eclipse dostępna jest i w NetBeans - wyszukiwanie typów po ich skrótach, np. NullPointerException to NPE, albo NoClassDefFoundError to NCDFE. To również jest w NetBeans! Miło.
Tylko jedno mi doskwiera teraz - dlaczego eclipsowe Ctrl+O w edytorze Java to Ctrl+Shift+F12 w NetBeans?! Nic nie przychodzi mi do głowy, aby podmienić to jakoś sensownie, ale sądzę, że to jedno z bardziej użytecznych funkcji IDE - wyświetlenie elementów typu i możliwość przejścia do wybranego, więc należy się coś bardziej ludzkiego. Może jednak warto zmienić mapowanie klawiszy na eclipsowe? Mam takie skrzywienie uniksowe, gdzie edytuję pliki w vi, podczas gdy na linii komend korzystam z trybu Emacs. Pewnie podobnie będzie z klawiaturą w NetBeans. Jak się człowiek do czegoś przyzwyczai, to trudno mu się oderwać od tego.Na grupie NetCAT 6.5 Jirka (głównodowodzący programem) poprosił o ocenę przygotowywanego certyfikatu Sun Certified NetBeans IDE Specialist. Czy uważacie, że istnieje faktycznie potrzeba na Sun Certified Netbeans IDE Specialist? Co ono miałoby certyfikować?! Znajomość skrótów klawiszowych? Pozycji menu? A co w przypadku pracy z tłumaczonym środowiskiem? Możesz wyrazić swój głos w ankiecie Sun Certified NetBeans IDE Specialist. Miło zostałem zaskoczony zakresem egzaminu i uważam, że będzie doskonałym sprawdzianem poprawnego użycia NetBeans IDE jako środowiska pracy. Ciekawe, kiedy można oczekiwać odpowiedzi zespołu Eclipse. Fajne takie SCeNBIS oraz ECIS ;-)
Na koniec wiadomość z ostatniej chwili - pojawiła się ciekawa oferta na półce wydawnictwa Power Net - GWT w praktyce autorstwa Roberta Coopera oraz Charles'a Collinsa. Książka została przetłumaczona przez Marcina Leszczyńskiego, który znalazł swoje miejsce w podziękowaniach w wersji angielskiej (!) I ja przyłączam się do podziękowań za podjęcie trudu przetłumaczenia książki na polski. Wbrew panującemu obyczajowi na polskim rynku wydawniczym literatury informatycznej, tłumaczenie pojawiło się 2 miesiące po premierze angielskojęzycznej. Najwyraźniej można, jak się chce. Niedawno miałem okazję ponownie powalczyć z GWT i przymierzałem się do oryginalnej wersji książki, ale skoro jest dostępne polskie tłumaczenie, dlaczego nie zacząć lektury właśnie od niej? Jako rozgrzewkę można zabrać się za lekturę przykładowego rozdziału, który jest dostępny na stronie książki. Najwyraźniej Power Net zaczyna stanowić ciekawą alternatywę dla innych wydawnictw informatycznych z coraz to znaczącymi tłumaczeniami. Gratulacje!
17 stycznia 2006
"Portlets and Apache Portals" za darmo, ale po angielsku
Właśnie natrafiłem na ciekawą pozycję o portletach i Jetspeed2. Postaram się przybliżyć temat w kolejnych odsłonach, jednakże teraz ograniczę się jedynie do podania odnośnika dla niecierpliwych. Zajrzyj na http://www.manning.com/books/hepper. Na razie książka pójdzie na półkę...
Subskrybuj:
Posty (Atom)

