Cube°n - odpowiednik Mylyn dla NetBeans?
Tym razem przedstawię jeden z projektów w którym biorę udział (choć to może nad wyrost powiedziane :)), chodzi mi oczywiście o Cube°n (Task-Focused Interface for Netbeans).
Cube°n to inspirowana na Eclipse’owym Mylyn wtyczka do NetBeans. Wtyczka ta została stworzona przez członka NetBeans Dream Team - Anuradha Gunasekara, do commiterów projektu należą również inni członkowie NB Dream Team jak również pracownicy Sun’a co powinno oznaczać, że nie jest to tylko chwilowy projekt.
W chwili obecnej pozwala ona na zarządzanie zadaniami zarówno lokalnie jak i za pomocą systemów Jira i Trac, dodatkowo do jej podstawowych funkcjonalności należą:
- tworzenie zapytań, które pozwalają na wyświetlenie listy zadań wg. określonych kryteriów
- powiązanie wybranych fragmentów kodu z określonym zadaniem
- synchronizacji lokalnych zadań ze zdalnymi (zdefiniowanymi z zdalnych systemach) zadaniami
- możliwość dodawania komentarzy do zadań
- inne funkcjonalności opisane na tej stronie
W planach jest również support dla Bugzilli, niestety implementacja tej funkcjonalności przypadła mojej skromnej osobie, a ponieważ jak zwykle brakuje mi czasu stąd jej rozwój zatrzymał się chwilowo w miejscu (taka przypadłość projektów open-source
).
Jeśli jednak jesteście zainteresowani tą wtyczką to szczególnie Was zachęcam do jej pobrania i zainstalowania, sam fakt, iż znalazła się ona w finale NetBeans Innovators Grant Contest świadczy o tym, że również ludzie z NetBeans widzą w niej potencjał (wtyczka dostała również nagrodę za jakość wykonania).
Więcej informacji na temat najnowszej wersji Cube°n’a znajdziecie w tym wpisie Anuradhy oraz na oficjalnej stronie projektu. W szczególności zapraszam na stronę z planem rozwoju oraz grupę użytkowników na której możecie zgłaszać pomysły/uwagi.
Na koniec życzę sobie i Wam szybkiego ukończenia modułu obsługującego repozytoria Bugzilla ![]()
Grails - walidacja danych
Pisząc aplikacje niejednokrotnie spotykacie się z koniecznością sprawdzania poprawności wprowadzonych danych, dane te weryfikowane są pod względem długości, zgodności z wzorcem lub wartością w innym polu, czy też samego sprawdzenia czy zostały wprowadzone.
Nie powinien więc Was dziwić fakt, że i Grailsy posiadają obsługę walidacji danych, a jaka jest to obsługa dowiecie się w tym wpisie
Walidacja w Grailsach jest definiowana per klasa modelu, oznacza to w praktyce, że Wasza walidacja musi zostać zdefiniowana w klasach modelu, a dokładniej za pomocą statycznego pola o nazwie constraints.
Na początek zdefiniujmy walidację dla pól w aplikacji zapisującej notki, która była przedstawiona w jednym z poprzednich przykładów:
Jak widać w powyższym przykładzie, dodanie walidacji pól jest sprawą stosunkowo prostą.
Efekt dodania walidacji sprawdzamy poprzez uruchomienie aplikacji i przejście do ekranu dodania nowej notki, uruchamiamy więc aplikację (komenda grails run-app) i przechodzimy do strony pod domyślnym adresem http://localhost:8080/notes/note/create, a następnie klikamy na przycisk “Create”.
Waszym oczom powinna się ukazać następująca strona:

Oczywiście walidator sprawdzający czy wpisano wartość w określone pole to nie jest jedynym dostępnym walidatorem, w dokumentacji do Grailsów można znaleźć o wiele więcej gotowych walidatorów, w tym:
- numeru karty kredytowej
- emaila
- zgodności z wzorcem
- sprawdzający długość wpisanej wartości
- i wiele, wiele innych…
Dostępność licznych walidatorów nie oznacza oczywiście, że nie możemy tworzyć swoich własnych, poniżej przedstawiam sposób jak sprawdzić wprowadzone dane za pomocą własnego kodu walidującego:
Różnica między powyższym kodem a przedstawionym wcześniej, polega na dodaniu dodatkowej walidacji pola title. Niestandardowy walidator który wprowadziłem został zaimplementowany przy pomocy domknięć (closures). Zmienna it zawiera wartość pola title, ponieważ chciałem aby wszystkie notatki miały od chwili obecnej tytuł zaczynający się od ciągu znaków “Notatka”, stąd też wykorzystałem metodę klasy String o nazwie startsWith, która to sprawdza czy wartość przypisana do zmiennej typu String zaczyna się od podanego w argumencie ciągu znaków.
Dobra, teraz czas sprawdzić czy nasz walidator działa, uruchamiamy ponownie aplikację i wprowadzamy nieprawidłowe dane:

I proszę, efekt zgodny z oczekiwaniami, tytuł notatki nie zaczyna się od ciągu znaków “Notatka” i dlatego też nie możemy zapisać danych. Zmienimy teraz tytuł na “Notatka pierwsza”:

Notatka została utworzona! Walidator działa!
Na koniec dla tych którzy zaspali prawie cały zeszły tydzień. SpringSource czyli firma stojąca za znanym wszystkim frameworkiem Spring kupiła G2One, firmę świadczącą usługi konsultingowe związane z Groovym i Grails. Więcej informacji na ten temat znajdziecie tutaj. Oj będzie się działo!
Recenzja: “Getting Started with Flex 3″
Dzisiaj miałem okazję przeczytać książkę Getting Started with Flex 3, książka mała, przyjemna, idealna do czytania w podróży, w efekcie przeczytałem ją w pociągu na trasie Kraków - Tarnów. Książkę dostałem od przedstawiciela Adobe podczas spotkania Polish JUG, na którym przedstawione zostały możliwości tworzenia aplikacji do transmisji obrazu video, która oczywiście została napisana z wykorzystaniem Flexa i Javy.
Jeśli chcecie dowiedzieć się więcej na temat samej książki to zapraszam do przeczytania krótkiej recenzji.
Na koniec dodam jeszcze, iż książkę przekażę do biblioteczki Polish JUG, jeśli więc chcecie szybko zapoznać się z Adobe Flex 3 to zapraszam do jej wypożyczenia.
UPDATE: Dzięki Łukaszowi dowiedziałem się, że książka ta jest również dostępna za darmo na stronie Adobe.
Grails - wprowadzenie
Zapewne część z Was zna przynajmniej ze słyszenia Ruby on Rails. RoR jest frameworkiem, który zdobył uznanie i popularność dzięki świeżemu podejściu do tworzenia aplikacji webowych. Cechą charakterystyczną RoR jest przedkładanie konwencji nad konfigurację, sprowadza się to do tego, że prawie cała struktura aplikacji tworzona jest w oparciu o pewną z góry założoną hierarchię, dzięki temu programista poświęca zdecydowanie mniej czasu na zajmowanie się projektowaniem i konfigurowaniem aplikacji, zyskując w zamian czas na tworzenie właściwego kodu, który ma realizować pewne założenia biznesowe. O samym Ruby on Rails przeczytacie więcej tutaj, ja natomiast zajmę się innym frameworkiem, który wzorowany jest na RoR, a napisany został w Groovym, są nim tytułowe Grailsy.
Grailsy, to podobnie jak Rails’y framework webowy podczas tworzenia którego przewodnią myślą było hasło “Convention over Configuration”.
Dzieki temu Grailsy umożliwiają szybkie tworzenie aplikacji, duża część aplikacji jest automatycznie generowana, a programista jest jedynie zmuszony dostarczyć model danych na podstawie którego zostanie wygenerowana warstwa prezentacji oraz kontrolery.
Grailsy jednak w przeciwieństwie do Ruby on Rails powinny być bliższe programistom języka Java, powodów jest tutaj kilka, wśród nich na uwagę zasługuje fakt, iż zostały napisane w Groovym, a więc języku skryptowym stworzonym z myślą o JVM, integrują się one również mocno ze sztandarowymi frameworkami Javy, a mianowicie Springiem i Hibernate, integracja ta pozwala programistom Java na wykorzystanie posiadanych umiejętności i łatwiejszy start z Grailsami.
Zalet Grailsów jest wiele (wady też się znajdą :P), najlepiej jednak będzie poznać je w praktyce.
Utwórzmy więc pierwszą prostą aplikację, aplikacja ta pozwoli na wprowadzanie notatek przy pomocy interfejsu webowego. Aby przystąpić do działania należy pobrać Groovy’ego i Grailsy, a następnie je zainstalować. Ja proponuję pobrać obie paczki w wersji spakowanej, bez instalatora. Instalacja sprowadzi się wtedy do rozpakowania paczek oraz zdefiniowania zmiennych środowiskowch GROOVY_HOME i GRAILS_HOME.
Gdy już zainstalujecie Groovy i Grails, należy sprawdzić czy są one widoczne w systemie, w tym celu wpiszcie następujące komendy w wierszu poleceń:
Aby sprawdzić wersję Groovyego:
U mnie Groovy wypisał na konsoli:
To znak, że jest widoczny w systemie
Aby sprawdzić wersję Grailsów:
Tu trochę więcej informacji:
Licensed under Apache Standard License 2.0
Grails home is set to: C:\Progs\grails\grails-1.0.3
No script name specified. Use ‘grails help’ for more info or ‘grails interactive’ to enter interactive mode
Jeśli udało Wam się wykonać obie komendy to możecie przystąpić do napisania aplikacji:
1. Tworzymy strukturę projektu wpisując:
gdzie notes to nasza nazwa aplikacji, po wykonaniu komendy zostanie utworzona struktura projektu (w kolejnym wpisie zostanie ona bliżej opisana).
2. Utwórzmy pierwszą klasę, która będzie odpowiadała pojedyńczej notatce (aby to zrobić musicie znajdować się w katalogu aplikacji):
Po jej wykonaniu zobaczycie mniej-więcej takie logi:
Licensed under Apache Standard License 2.0
Grails home is set to: C:\Progs\grails\grails-1.0.3
Base Directory: D:\projects\notes
Note: No plugin scripts found
Running script C:\Progs\grails\grails-1.0.3\scripts\CreateDomainClass.groovy
Environment set to development
[copy] Copying 1 file to D:\projects\notes\grails-app\domain
Created Domain Class for Note
[copy] Copying 1 file to D:\projects\notes\test\integration
Created Tests for Note
Nasza klasa jest już gotowa!
3. Dodajmy pola do utworzonej właśnie klasy:
Jest to bardzo prosta klasa, notka będzie zawierała jedynie tytuł i opis.
4. Wygenerujmy pozostałe części aplikacji używając do tego klasy z modelem:
Po zakończeniu wykonania komendy pojawią się logi:
Generating controller for domain class Note …
Finished generation for domain class Note
To znak, że Grailsy zakończyły generację kontrolera i widoków, Wasza aplikacja jest już gotowa!
Czas ją uruchomić:
Wykonanie komendy objawi się podobnymi do poniższych logami:
Licensed under Apache Standard License 2.0
Grails home is set to: C:\Progs\grails\grails-1.0.3
Base Directory: D:\projects\sample\notes
Note: No plugin scripts found
Running script C:\Progs\grails\grails-1.0.3\scripts\RunApp.groovy
Environment set to development
[groovyc] Compiling 2 source files to C:\Documents and Settings\radek\.grails\1.0.3\projects\notes\classes
[copy] Copying 1 file to C:\Documents and Settings\radek\.grails\1.0.3\projects\notes
Running Grails application..
2008-11-04 20:50:50.337::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
2008-11-04 20:50:51.603::INFO: jetty-6.1.4
2008-11-04 20:50:51.743::INFO: No Transaction manager found - if your webapp requires one, please configure one.
2008-11-04 20:50:51.056:/notes:INFO: Set web app root system property: ‘notes-development-0.1′ = [D:\projects\sample\no
tes\web-app\]
2008-11-04 20:50:51.056:/notes:INFO: Initializing log4j from [file:C:\Documents and Settings\radek/.grails/1.0.3/projec
ts/notes/resources/log4j.properties]
2008-11-04 20:50:51.071:/notes:INFO: Initializing Spring root WebApplicationContext
[0] spring.GrailsWebApplicationContext Refreshing org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@
3534c1: display name [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@3534c1]; startup date [Tue N
ov 04 20:50:53 CET 2008]; parent: org.springframework.web.context.support.XmlWebApplicationContext@1fe1e26
[0] spring.GrailsWebApplicationContext Bean factory for application context [org.codehaus.groovy.grails.commons.spring.G
railsWebApplicationContext@3534c1]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1da5362
2008-11-04 20:50:56.241:/notes:INFO: Initializing Spring FrameworkServlet ‘grails’
2008-11-04 20:50:57.397::INFO: Started SelectChannelConnector@0.0.0.0:8080
Server running. Browse to http://localhost:8080/notes
W powyższych logach widać, iż aplikacja uruchamiana jest za pomocą wbudowanego w Grailsy kontenera servletów Jetty, podczas startu aplikacji inicjalizowany jest również kontekst Springa, widać to w tej lini:
Spring springiem ale czas zobaczyć naszą aplikację, uruchamiamy w przeglądarce podany na końcu link: http://localhost:8080/notes.
I oto co widzimy:

Jest to domyślny i zarazem główny ekran aplikacji, wyświetla on listę dostępnych kontrolerów, kliknijmi na NoteController i następnie na opcję “Add Note”, a znajdziemy się na ekranie dodawania notki:

Po uzupełnieniu pól klikamy “Create” i naszym oczom ukazuje się lista stworzonych notek z poziomu której możemy przeglądać szczegóły poszczególnych notek (poniżej ekran szczegółów notki):

Właśnie utworzyłeś swoją pierwszą notkę za pomocą samodzielnie napisanej aplikacji w Grailsach!
Prawda, że proste i przyjemne?
Na zakończenie pozostawiam Wam rozpoznanie pozostałych podstron aplikacji, które to składają się na tzw CRUD (Create, Read, Update, Delete) i pozwalają nie tylko na dodawanie i wyświetlanie listy notatek, ale również na ich aktualizowanie i usuwanie.
Recenzja “Programming Groovy: Dynamic Productivity for the Java Developer”
W dniu dzisiejszym skończyłem czytać książkę Programming Groovy: Dynamic Productivity for the Java Developer, książka jest tak dobra, że zasługuje na recenzję, którą oczywiście napisałem i umieściłem tutaj, dla wszystkich którzy po jej przeczytaniu w dalszym ciągu się wahają, polecam recenzję Neal’a Ford’a na Amazon. Książki nie musicie kupować, jest ona dostępna w biblioteczce Polish JUG. Na zakończenie jeszcze raz gorąco zachęcam do przeczytania.




