12 stycznia 2009

cas-client idzie w odstawkę - acegi ciekawsze

2 komentarzy
Po ostatnich nieudanych bojach z wtyczką Grails do Wicketa zabrałem się za kolejne. Przeglądając dostępne wtyczki poleceniem grails list-plugins wybrałem cas-client. I to z czysto pragmatycznego powodu - wersja 1.0 daje pewną gwarancję stabilności wtyczki, a i tak miałem rozpoznać temat wykorzystania JA-SIG CAS, więc połączę przyjemne z pożytecznym.
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails plugin-info cas-client
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\projs\WicketGrailsDemo
Running script c:\dev\grails\scripts\PluginInfo_.groovy
Environment set to development
Reading remote plugin list ...

--------------------------------------------------------------------------
Information about Grails plugin
--------------------------------------------------------------------------
Name: cas-client | Latest release: 1.0
--------------------------------------------------------------------------
This plugin provides client integration for JA-SIG CAS
--------------------------------------------------------------------------
Author: Chen Wang
--------------------------------------------------------------------------
Author's e-mail: contact@chenwang.org
--------------------------------------------------------------------------
Find more info here: http://grails.org/CAS+Client+Plugin
--------------------------------------------------------------------------

The plugin handles configurations of JA-SIG CAS client integration using
its Java client library versioned 2.1.1. Please note there is another Java
client library which is heavily Spring based; Although it seems a natual
fit for Grails applications, it requires more configuration works to
kickstart.

The client integration page of the library supported by this plugin is

http://www.ja-sig.org/products/cas/client/javaclient/index.html

Please make sure necessary configurations are made in your Grails
application's Config.groovy file.

--------------------------------------------------------------------------
Available full releases: 0.1 0.2 1.0

To get info about specific release of plugin 'grails plugin-info [NAME] [VERSION]'

To get list of all plugins type 'grails list-plugins'

To install latest version of plugin type 'grails install-plugin [NAME]'

To install specific version of plugin type 'grails install-plugin [NAME] [VERSION]'

For further info visit http://grails.org/Plugins
Instalacja przebiegła bez zakłóceń i po chwili miałem już ją zainstalowaną w mojej przykładowej aplikacji.
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails install-plugin cas-client
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\projs\WicketGrailsDemo
...
Plugin cas-client-1.0 installed
Otwieram projekt WicketGrailsDemo w NetBeans IDE bez problemu - wystarczy wskazać katalog projektu i NetBeans zadba o resztę (doda ikonkę i pogrupuje artefakty projektowe we właściwych kategoriach). Uruchamiam (menu Run) i w międzyczasie otrzymuję komunikat:

CAS CLIENT PLUGIN ERROR: Please make sure that required parameters [cas.loginUrl, cas.validateUrl, cas.urlPattern] are set up correctly in Config.groovy of your application!
PLEASE CORRECT THE ERROR ABOVE!


Idzie wspaniale - lubię być prowadzony za rękę przy nowym oprogramowaniu. W końcu kto jak nie autorzy wiedzą, które cechy projektu są najciekawsze i jak ich użyć najefektywniej?! Komunikat wpisuję na listę zalet wtyczki.

Potrzebowałem zmienić trochę widok aplikacji, więc pora na kolejne polecenie Grails - generate-views
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails generate-views
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\projs\WicketGrailsDemo
Running script c:\dev\grails\scripts\GenerateViews.groovy
Environment set to development
[groovyc] Compiling 1 source file to
C:\Documents and Settings\Administrator\.grails\1.1-beta2\projects\WicketGrailsDemo\classes
CAS CLIENT PLUGIN INFO: added section in web.xml
CAS CLIENT PLUGIN INFO: added section(s) in web.xml
CAS CLIENT PLUGIN INFO: /cas.gsp?u=USERNAME is available for mocking cas-ified user session
CAS CLIENT PLUGIN WARNING: Please take extra care as mocking should NOT be allowed for production environment!
Domain Class name not specified. Please enter:
Slowo
[groovyc] Compiling 1 source file to
C:\Documents and Settings\Administrator\.grails\1.1-beta2\projects\WicketGrailsDemo\classes
CAS CLIENT PLUGIN INFO: added section in web.xml
CAS CLIENT PLUGIN INFO: added section(s) in web.xml
CAS CLIENT PLUGIN INFO: /cas.gsp?u=USERNAME is available for mocking cas-ified user session
CAS CLIENT PLUGIN WARNING: Please take extra care as mocking should NOT be allowed for production environment!
Generating views for domain class Slowo ...
Finished generation for domain class Slowo
Po chwili jednak, kiedy kończyłem lekturę dokumentacji wtyczki w Alternatives to using the Java CAS client natrafiłem na wzmiankę o Acegi Security. Już nim kiedyś się zajmowałem, ale niedługo i nigdy nie było czasu na więcej. Jakoś bliżej mi było do niego niż cas-client, więc od razu przeskoczyłem na kolejną wtyczkę acegi.
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails install-plugin acegi
...
Plugin acegi-0.4.1 installed
Plug-in provides the following new scripts:
------------------------------------------
grails create-auth-domains
grails generate-manager
grails generate-registration
Od razu widać, że bardziej rozbudowana, skoro wprowadza swoje polecenia. Zaczerpnięcie języka o wtyczce rozpoczynam od standardowego grails plugin-info:
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails plugin-info acegi
Welcome to Grails 1.1-beta2 - http://grails.org/
...
--------------------------------------------------------------------------
Information about Grails plugin
--------------------------------------------------------------------------
Name: acegi | Latest release: 0.4.1
--------------------------------------------------------------------------
Grails Spring Security 2.0 Plugin
--------------------------------------------------------------------------
Author: Tsuyoshi Yamamoto
--------------------------------------------------------------------------
Author's e-mail: tyama@xmldo.jp
--------------------------------------------------------------------------
Find more info here: http://grails.org/AcegiSecurity+Plugin
--------------------------------------------------------------------------
Plugin to use Grails domain class and secure your applications with Spring Security filters.
--------------------------------------------------------------------------
Available full releases: 0.2 0.2.1 0.3 0.4 0.4.1
Rzut oka na stronę wtyczki Spring Security Plugin i ma się wrażenie, że wszystko jest. Strona jest wręcz doskonała - wszystko opisane krok po kroku, poza jednym drobnym acz istotnym elementem - nazwą dołączanej strony - _ajaxLogin.gsp zamiast _ajaxForm.gsp. Zaraz ją poprawiłem i już mam swój udział w rozwoju Grails (!) ;-) Dokumentacja nie pozostawia złudzeń, że wciąż mogę liczyć na wsparcie CASa (AcegiSecurity Plugin - Implementation Overview):

Optional support for LDAP, OpenID, Kerberos, CAS, and NTLM.

I w końcu data ostatniej zmiany wtyczki jest budująca - December 9, 2008. Zdaje się, że mam wszystko. "Niestety", właśnie w trakcie rozpoznawania wtyczki acegi dostaję informację o aktualizacji grailsowego Wiki, a konkretnie wpisu o Stark Security Plugin:

The Stark Security plugin -- 'stark' as in simple, but also 'strong' in Swedish -- is an implementation of Spring Security for Grails. The purpose of the plugin is two-fold, as its name implies: to be simple to install, configure, and maintain, and to strongly secure your web application.

a po chwili kolejna informacja o aktualizacji Wiki - tym razem już dotycząca AcegiSecurity Plugin - Upgrading from 0.4.1 to 0.5. I jeszcze kilka innych zmian w dokumentacji Acegi Security Plugin. Jakkolwiek cieszy możliwość wyboru, to dla nowicjusza, nie tylko w Grails, ale i w temacie bezpieczeństwa, może to być nie lada problem. Ja decyduję się na acegi. Nie mam dla niego wiele czasu, więc liczę, że mnie nie zawiedzie.

p.s. Właśnie dostałem książkę Beginning Groovy and Grails: From Novice to Professional, którą zamierzam przeczytać w nadchodzących dniach. Ciekawa? Ktoś już ją ma za sobą? Warta uwagi, czy raczej pozostać przy dokumentacji dostępnej publicznie?

09 stycznia 2009

Wtyczka Grails do Wicketa do...kosza

2 komentarzy
Liczyłem na to, że popróbuję się z wtyczką Wicket dla Grails, ale się przeliczyłem. To znaczy, popróbowałem się z nią, aż doszedłem do kroku instalacji i...nic.

Dotychczasowa praca z Grails pozwala mi sądzić, że tworzenie aplikacji w Grails to nic innego jak programowanie w Groovy ze wsparciem bibliotek pomocniczych, jak wspomniany Wicket, dzięki pomocy wtyczek. Listę dostępnych wtyczek można sprawdzić poleceniem grails list-plugins.
  jacek@dev ~
$ grails list-plugins
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\dev\cygwin\home\jacek
Running script c:\dev\grails\scripts\ListPlugins_.groovy
Environment set to development
...i tutaj cała lista wtyczek
Plug-ins you currently have installed are listed below:
-------------------------------------------------------------

You do not have any plugins installed.

To find more info about plugin type 'grails plugin-info [NAME]'

To install type 'grails install-plugin [NAME] [VERSION]'

For further info visit http://grails.org/Plugins
Wtyczki instaluje się w projekcie grailsowym i są one z nim związane. Wykonanie większości poleceń grails daje inne rezultaty w zależności od projektu. Zgodnie z komunikatami z list-plugins więcej informacji o danej wtyczce można znaleźć wykonując grails plugin-info.
  jacek@dev ~
$ grails plugin-info wicket
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\dev\cygwin\home\jacek
Running script c:\dev\grails\scripts\PluginInfo_.groovy
Environment set to development
Reading remote plugin list ...

--------------------------------------------------------------------------
Information about Grails plugin
--------------------------------------------------------------------------
Name: wicket | Latest release: 0.6
--------------------------------------------------------------------------
Provides integration between Grails and the Wicket framework
--------------------------------------------------------------------------
Author: Graeme Rocher
--------------------------------------------------------------------------
Find more info here: http://grails.org/Wicket+Plugin
--------------------------------------------------------------------------

A plug-in that makes Wicket (http://wicket.sourceforge.net/)
the default view rendering framework for Grails.
Wicket is a component oriented framework that, like Grails,
embraces convention-over-configuration approaches.

--------------------------------------------------------------------------
Available full releases: 0.2 0.3 0.4 0.5 0.6
Available zip releases: 0.1

To get info about specific release of plugin 'grails plugin-info [NAME] [VERSION]'

To get list of all plugins type 'grails list-plugins'

To install latest version of plugin type 'grails install-plugin [NAME]'

To install specific version of plugin type 'grails install-plugin [NAME] [VERSION]'

For further info visit http://grails.org/Plugins
Wystarczy, więc zapoznać się z dokumentacją i zdecydować o instalacji wtyczki poleceniem grails install-plugin.
  jacek@dev ~
$ grails install-plugin wicket
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\dev\cygwin\home\jacek
C:\dev\cygwin\home\jacek does not appear to be part of a Grails application.
The following commands are supported outside of a project:
create-app
create-plugin
help
list-plugins
package-plugin
plugin-info
set-proxy
Run 'grails help' for a complete list of available scripts.
Czyż nie wspomniałem o tym, że nie mogę wykonać polecenia instalacji wtyczki poza projektem?! Właśnie, a jak stworzyć projekt? Kolejnym poleceniem Grails - grails create-app.
  jacek@dev /cygdrive/c/projs
$ grails create-app
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\projs
Running script c:\dev\grails\scripts\CreateApp_.groovy
Environment set to development
Application name not specified. Please enter:
WicketGrailsDemo
[mkdir] Created dir: C:\projs\WicketGrailsDemo\src
...
Created Grails Application at C:\projs/WicketGrailsDemo
Teraz instalacja wtyczki kończy się pomyślnie.
  jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails install-plugin wicket
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\projs\WicketGrailsDemo
Running script c:\dev\grails\scripts\InstallPlugin.groovy
Environment set to development
Reading remote plugin list ...
[copy] Copying 1 file to C:\Documents and Settings\Administrator\.grails\1.1-beta2\projects\WicketGrailsDemo\plugins
Installing plug-in wicket-0.6
[mkdir] Created dir: C:\Documents and Settings\Administrator\.grails\1.1-beta2\projects\WicketGrailsDemo\plugins\wicket-0.6
[unzip] Expanding: C:\Documents and Settings\Administrator\.grails\1.1-beta2\plugins\grails-wicket-0.6.zip
into C:\Documents and Settings\Administrator\.grails\1.1-beta2\projects\WicketGrailsDemo\
plugins\wicket-0.6
Executing wicket-0.6 plugin post-install script ...
Warning, target causing name overwriting of name default
[mkdir] Created dir: c:\projs\WicketGrailsDemo\grails-app\pages
: Warning: Could not find file c:\projs\WicketGrailsDemo\null\src\templates\WicketApplication.groovy to copy.
at org.apache.tools.ant.taskdefs.Copy.execute(Copy.java:420)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
at org.apache.tools.ant.Task.perform(Task.java:348)
at Script1.run(Script1.groovy:15)
at _PluginDependencies_groovy$_run_closure18.doCall(_PluginDependencies_groovy:416)
at _PluginDependencies_groovy$_run_closure25.doCall(_PluginDependencies_groovy:661)
at _GrailsPlugins_groovy$_run_closure2.doCall(_GrailsPlugins_groovy:78)
at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:306)
at gant.Gant.dispatch(Gant.groovy:316)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.processTargets(Gant.groovy:461)
at gant.Gant.processTargets(Gant.groovy:446)
Error installing plugin: Warning: Could not find file
c:\projs\WicketGrailsDemo\null\src\templates\WicketApplication.groovy
to copy.: Warning: Could not find file
c:\projs\WicketGrailsDemo\null\src\templates\WicketApplication.groovy to copy.
Taa, chciałbym. Niepokojący jest ten null w ścieżce. I dlaczego projekty i wtyczki instalowane są w katalogu domowym użytkownika?! Przeglądając wicket-0.6/scripts/_Install.groovy odniosłem wrażenie, że z jakiś nieznanych mi powodów zmienna "pluginHome" nie jest poprawnie ustawiona, więc...zarzuciłem temat. Za słaby jestem jeszcze z Grails, aby próbować się z tego typu problemami. Zdaje się, że ostatnie zmiany w kodach wtyczki to początek 2008 - 06 March 2008, więc można przypuszczać, że Wicket i Grails to nie jest dobry pomysł na początek poznawania Grails. Zabieram się za inną - cas-client - This plugin provides client integration for JA-SIG CAS. Mam do rozpoznania wykorzystanie CAS w aplikacjach javowych, więc może się uda w połączeniu z Grails.

07 stycznia 2009

Grails w NetBeans IDE 7.0M1

0 komentarzy
Jakby na życzenie najpierw przypomniałem sobie o darmowym GroovyMag na Developers World, aby później natrafić na dokument Introduction to Groovy, kiedy uruchomiłem NetBeans IDE 7.0M1 (a już miałem rozpocząć poznawanie Grailsów z poziomu IntelliJ IDEA 8.0.1). Chwila lektury Grails Quick Start in NetBeans IDE i nie było co dalej czekać. Pobrałem Grails 1.1-beta2 i stworzyłem swoją pierwszą aplikację grailsową w...2 minuty (!) Dlaczego zabrałem się za Grailsy? Jest to kolejny szkielet aplikacyjny, z tą różnicą, że aplikacje tworzy się w języku skryptowym Groovy. Dużo w nim zapożyczeń z Ruby on Rails (RoR), o którym mówi się, że jest niezwykle intuicyjny, więc łącząc przyjemne z pożytecznym samemu chciałem się przekonać cóż Grailsy mają do zaoferowania i czego można się nauczyć poznając jednocześnie Groovy. Nic wyniosłego poza zwykłą ciekawością.

Ctrl+Shift+N i wybieramy Groovy/Grails Application

aby po chwili mieć gotową aplikację grailsową.

Wcześniej zdefiniowałem GRAILS_HOME i PATH, aby można było wykonywać polecenie grails.

Teraz już tylko Run w menu kontekstowym (menu pod prawym klawiszem myszki)

i pojawia się okienko przeglądarki z aplikacją grailsową

Stworzyłem klasę Book oraz BookControllera zgodnie z instrukcjami w Grails Quick Start in NetBeans IDE. Niestety, nie dane mi było po prostu Run, aby uruchomić aplikację, ale musiałem ją zatrzymać w Services/Servers/Jetty (Gails 1.1-beta2) i wdrożyć ponownie (Run). W końcu pojawiły się zmiany.

a później dokładnie jak opisano w dokumentacji.

Z poziomu NetBeans IDE możemy zainstalować wtyczki grailsowe - menu kontekstowe Grails Plugins... (patrz wyżej).

Jedna jest związana z Apache Wicket, więc już wiem czym się zajmę.

06 stycznia 2009

Gorączka sylwestrowej nocy - nadszedł 2009!

5 komentarzy
Do napisania tego wpisu sprowokoło mnie kilka rzeczy i wszystkie wydają mi się istotne (ich kolejność nie ma związku z ich ważnością). Cisza sprzyja obserwacjom i przemyśleniom.

Zacznę od ostatniego wpisu Michała Bartyzela o 7 Kroków Zła w Projektach IT, w którym przedstawia kodeks dobrego programisty (w zasadzie to temat sugeruje, jakby było o jakimś podziale świata na Dobro i Zło, ale szczęśliwie jest znacznie bardziej przyziemnie). Można w nim poczytać o kilku cechach wymarzonego członka zespołu projektowego, które jeśli nie są jeszcze Twoje, warto dopisać do noworocznych postanowień. Nawet jeśli jedynie jedno zostanie wybrane, to już będzie to widoczny postęp.

Skoro o kodeksie, to na myśl przychodzi mi jeszcze jeden kodeks, z którym ostatnio się zetknąłem - kodeks Leonardo Da Vinci. Brzmi wynośle, ale tak mi się skojarzyło z wpisem Michała, kiedy oglądałem o Da Vinci program na History Channel w...Sylwestra (!) Jakkkolwiek nie spotkałem się z wyjaśnieniem, co ten kodeks dokładnie zawiera, ale wciąż przywoływany w programie możnaby go podsumować w jedynym zdaniu - każdą przeszkodę można i należy pokonać. Było tam wiele o dążeniu do doskonałości i szukaniu nieprzeciętnych, ponadczasowych rozwiązań, więc pod tym względem przypomina mi to naszego Leonardo - Michała Bartyzela - który jak Don Kichot walczy o czystość naszego cechu programistycznego ;-) Co mnie jednak zaskoczyło w życiu Leonardo, którego znamy jako malarza - Mona Liza czy Dama z Gronostajem (nie Łasiczką!), to fakt, że Leonardo gro życia parał się innymi czynnościami niż malarstwo (!) Czyżby oznaczało to, że aby stać się dobrym programistą należy zająć się...czymś innym? Przypomina mi to wpis na blogu Poza schematy - Ostrzenie piły, robienie zdjęć, czyli trochę o pasjach.

A skąd przyszło mi oglądać telewizję w Sylwestra, niektórzy mogliby spytać? Powodem było jakieś "przecudne" choróbsko, które sprawiło, że w przeddzień Sylwestra temperatura skoczyła mi do 39,6 st. C (!) Jak ujęła to wczoraj moja żona - była to największa zanotowana temperatura na Na Uboczu. Niezła to była jazda. Rozłożyło mnie na amen. Dobrze mieć bratnią duszę przy sobie w takiej chwili, która sprawi, że da się zbić temperaturę choćby na chwilę. Kolejny raz miałem możliwość "skosztowania" pomocy mojej żony Agaty. Dzięki niej mogłem poczuć, jak to przyjemnie mieć 38 st.C ;-) Takiego zakończenia roku nie zapomina się. Temperatura podczas zabawy sylwestrowej iście wysoka! I tak z wahaniami przez 2 dni. Niech ktoś nie sądzi, że wystarczyło zażyć gripex, czy podobne cudo. Po 8 tabletkach w ciągu 24h i okładach doszliśmy do 38,7, aby za moment znowu skończyć na 39+. Wątroba miała również niezłą jazdę. I jeszcze kompletny brak apetytu. Skończyło się na bardziej radykalnym, głównie mentalnie, posunięciu - paracetamol w czo...Dalej nie piszę - zbyt krępujące ;-) Do tego prysznic w wodzie jak najbardziej zimnej i voila - około 22:00 w Sylwka byłem prawie żywy. Niezapomniany Sylwester. Ciut dłużej i pewnie nie pamiętałbym go wcale - tylko z opowiadań.

Miałem trochę czasu na przemyślenia i przy braku Sieci pozostało mi jedynie rozmyślać. Właśnie wdrożenie *tego* radykalnego rozwiązania nasunęło mi na myśl, że wiele z naszego oprogramowania potrzebuje takich radykalnych działań, ale z różnych powodów nie zostają wdrożone. I to często z bardzo błahego powodu, np. niezrozumienie rozwiązania przez głównego architekta czy resztę zespołu, nieśmiałość pomysłodawcy, brak zgody na wdrożenie jako pomysł innego, mniej doświadczonego członka zespołu, itp. Najgorsze jest wtedy, kiedy przygotowanie słuchaczy, jest niewystarczające, albo jeszcze gorzej, ich przekonanie o słuszności zastosowania wcześniej wybranej technologii nad proponowaną, biorą górę nad rozsądkiem. Może być też tak, że osoba proponująca sama nie do końca potrafi wytłumaczyć, dlaczego pomysł może wypalić. Ot, kobieca intuicja. Chciałoby się liczyć na wsparcie zespołu, który pomoże w zbadaniu tematu i sprawdzeniu, czy warto iść w tym kierunku. Pomoc zamiast egoistycznego myślenia o wyższości własnego postrzegania świata ostatecznie poprawi notowania wszystkim. Czasami nietypowe zagrania psują ustalony kanon i sprawiają, że tworzymy nowy, lepszy wariant. Czy nie nasuwa to skojarzeń z grą w szachy, karty, itp., gdzie nietypowe zagrania nowicjusza powodują frustrację bardziej zaawansowanych graczy? I jeszcze ów nowicjusz wygrywa partię. Nie od dzisiaj wiadomo (chociaż odnośnika na poparcie tezy nie mam pod ręką), że największe wynalazki powstają w młodych umysłach, kiedy nie są jeszcze obarczone żadnymi "dobrymi praktykami" czy przyzwyczajeniami. Przyzwyczajenie drugą naturą człowieka. Jeśli dodam, że nauczenie się żonglowania 3 piłeczkami to niecały kwadrans, pewnie nikt z nowicjuszy w temacie nie uwierzy mi. A wystarczy oduczyć się (!) przyzwyczajenia podawania piłeczki z ręki do ręki. Ważne, aby nauczyć się oduczać się i wciąż wykazywać chociażby skłonności do nauki.

Do całej końcówki roku 2008 nie mógłbym nie dodać kolejnego wydarzenia spoza dziedziny informatyki, która ma na nią niebagatelny wpływ - kapitalny remont mieszkania i przeprowadzka w...przedostatni dzień roku (!) Cała rodzinka na najwyższych obrotach, aby wysprzątać stare mieszkanie, poprzenościć pozostałe rzeczy na nowe i się w nim zadomowić. Dopiero kiedy rozpoczęło się sprzątanie nowego mieszkania zaczęły wychodzić błędy ekipy zwanej majstrami. Błędów jest tyle, że tylko usiąść i płakać. Jeśli ja jestem takim majstrem (aka profesjonalistą) jak oni, to już powinienem zabrać się za inny fach. Cały parkiet do wymiany, płytki nierówno położone, kruszące się fugi, silikon położony, jakby wcale nie był kładziony, ściany pomalowane jak przez nowicjuszy. Po prostu klapa na całego! To jest chyba pierwszy raz w moim życiu, kiedy tak na prawdę odczułem na własnej skórze, co musi czuć nasz klient, kiedy otrzymuje oprogramowanie, którego wcale nie zamawiał, ale wciąż jest zgodne z wymaganiami (aby później kontynuować prace już w ramach aneksów do głównej umowy!). I tak się wszystko kula powoli. Ja uczę się o dobrym wytwarzaniu oprogramowania, klienci o normach ISO, budowlańcy o własnych technikach i technologiach, a życie swoje. Jest jednak światełko w tunelu skoro w Łodzi mamy Michała Bartyzela, w Lublinie Sławka Sobótkę, którzy piszą peany nt. dobrego stylu programowania. Z nowym rokiem, kiedy określamy swoje plany rozwojowe, warto poświęcić trochę czasu na zarzucenie kilku przyzwyczajeń i zastosowanie się do zaleceń kolegów. Nawet, jeśli za jakiś czas okaże się, że nie był to najtrafniejsza wybór, zalecam więcej prototypowania. A jeśli prototypowanie, to najlepiej w jakimś projekcie. Można rozwinąc swój własny samodzielnie, a można dołączyć do jednego z już istniejących. Właśnie to stanowi dla mnie główną różnicę między projektem komercyjnym a otwartego oprogramowania (ang. OSS - Open Source Software). W pierwszym znacznie trudniej wprowadzić rewolucyjne zmiany, podczas gdy w drugim są one wręcz pożądane. Oczywiście jak to w życiu bywa Nie myli się ten, kto nic nie robi, albo ostatnio zasłyszane Nie zabłądzisz w lesie, do którego nie wejdziesz. Prototypowanie, ulepszepszanie, ponownie prototypowanie i tak w kółko. I jedna ważna zasada, którą wyczytałem, gdzieś na blogu, prototyp to nie jest zerowa wersja produktu. Prototyp wyrzucamy do śmieci, zapożyczając jedynie idee dla wersji pierwszej produktu. Nie dajmy się przekonać, że prototyp jest na tyle dobry, że może stać się wersją pierwszą. Może być niebezpieczne dla zdrowia psychicznego samego autora.

Osobiście najbardziej zależało mi na jeszcze jednym wydarzeniu, o którym nie mogę jeszcze napisać, że zostało w pełni zakończone. Caluteńki grudzień miałem głowę zajętą właśnie tym przedsięwzięciem i cieszę się, że teraz przyszło mi już tylko czekać na wyniki. Możnaby powiedzieć, że "praca" weszła na produkcję i oczekuje opinii użytkowników. Kiedy będę miał to za sobą na pewno odetchnę z ulgą. Nawet pojawiły się plany, aby kontynuować temat. Na razie jedynie nieśmiało wspominam o tym. Więcej niebawem.

Nie odmówiłem i sobie prawa do wyboru kilku postanowień na nowy 2009 rok:
  • promować znaczenie poznawania nowych technologii i szkieletów aplikacyjnych
  • wzmożyć aktywność w świecie projektów otwartego oprogramowania
  • zwiększyć zrozumienie moich wypowiedzi
Nie są to bardzo wyrafinowane decyzje, ale dawały mi dużo zabawy w roku 2008 i nie ukrywam, że czekam na więcej. Szczególnie ostatnie ma dla mnie znaczenie, bo zapytany nigdy nie mogę dobrnąć do końca z moją wypowiedzią w założonym czasie ;-)

Blog zgłosiłem do konkursu Blog Roku 2008 w kategorii profesjonalne. W 2007 zakończył na 8. miejscu z 93 głosami w III etapie (57. głosami w II). Biorąc pod uwagę statystyki bloga z ostatniego roku (mimo znaczącej przerwy w grudniu) oraz wyniku pierwszego miejsca z 2007 z 700 głosami w sumie, śmiem twierdzić, że Notatnik ma niemałą szansę na zajęcie miejsca na pudle. To byłby z pewnością przyczynek do zmiany jego statusu z prywatnego na bardziej otwarty, taki społecznościowy, z większym udziałem innych indywidualności świata javowego w Polsce. Mamy jdn.pl, dworld.pl, j2ee.pl, a więc będzie kolejny. Decyzja zależy od Waszego zaangażowania. Coś ala SpieprzajDziadu.com, który z bloga jednego aktora stał się blogiem społeczności czytelników. Brakuje mi chęci na zestawienie infrastruktury - własny serwer, wordpress, forum, serwer aplikacyjny, więc zainteresowanych wsparciem inicjatywy uprasza się o kontakt.
Nota bene, oba wspomniane wcześniej blogi startują również w konkursie Blog Roku 2008 i to w kategorii profesjonalne! Zapowiada się interesująca potyczka. Wygrać z takimi tuzami będzie dla mnie zaszczytem i spotęguje moją radość ;-)

p.s. Urzekł mnie ostatni teledysk Beautiful Lie grupy 30 Seconds to Mars, który jak wieść niesie calkowicie był zrealizowany gdzieś na kole podbiegunowym. Widziałem go na MTV HD i zaparło mi dech w piersiach. I nie chodzi o muzykę, ale o nowatorski sposób jego realizacji. Cudeńko! Jak masz doła przed rozpoczęciem prac w przedłużającym się projekcie warto go wysłuchać.

12 grudnia 2008

Wrażenia po SCDJWS 5 (311-230)

2 komentarzy
I mam za sobą. Pozytywnie? Nie wiem. Na koniec egzaminu pojawił się jedynie komunikat:

THANK YOU ...blebleble...your score will be sent to you in 6-8 weeks after the beta analysis is complete.

Znaczy się, że w Sylwestra nie będę opijał sukcesu. Pisałem (patrz: Sun Certified Developer for Java Web Services (SCDJWS) bezpłatnie do 10 grudnia!), że "nie mam co liczyć na PASS, ale przynajmniej rozeznam się w materiale, w moich brakach i jeszcze wyrażę swój głos", ale już po połowie wiedziałem, że ten konkretny egzamin nie należy do bardzo wyrafinowanych i z każdym pytaniem byłem coraz bardziej przekonany, że go zdam (podkreślam, że moja wiedza Web Services nie należy do najbardziej oszałamiających i podszedłem do egzaminu z czystej ciekawości, czego można się spodziewać). Niestety, po 150 pytaniach w ciągu 240 minut pozostaje mi jeszcze czekać 6-8 weeks, aby poznać wynik.

Komentarzy zostawiłem sporo, bo udało mi się namierzyć pytania, które były błędne (proste literówki, które powodowały, że program nie mógłby się skompilować, a więc i odpowiedź była niepoprawna) i w ten sposób wyraziłem swoją opinię. Dług spłacony. Pojawiło się kilka pytań o "servlet-based vs EJB3-based Web Services", więc mam nadzieję, że chociaż pytaniami o EJB3 podniosłem trochę wynik. Nie mogłem uwierzyć, kiedy pod koniec, około 130. pytania, pojawiły się pytania zahaczające o....Net! Bodajże 10 pytań dotyczyło WCF, z czego trzech całkowicie nie zrozumiałem. Był moment, że koło mnie zdawały jeszcze 2 osoby z tematów microsoftowych, więc może testy ze sobą interferowały. 3 pytania dot. WCF to były "strzały". Ostatecznie na 30 minut przed końcem miałem 15 pytań do przejrzenia, a wiele odpowiadałem na zasadzie podobieństw pytań tak, że jedno pytanie było zarazem odpowiedzią na inne. I tak przeszło mi zabawiać się z akronimami i pojęciami webservice'owymi. A naliczyłem ich sporo. Zresztą sami zobaczcie (w kolejności ich występowania):

JAX-WS, JAXB, WSIT, SAAJ, WSDL, REST, SOAP, XML, JAXP, SAX, DOM, JAXR, SEI, apt, wsimport, wsgen, WS-I Basic Profile, WSDL-to-Java, Java-to-WSDL, EJB-based vs servlet-based endpoints, I-Stack, EJB3, doc-style, proc-style/rpc-style, rpc-lit, doc-lit, asynchronous WS, interaction/processing layer, XML Digital signatures, enveloping vs enveloped vs detached signatures, SSL, HTTP, mutual authentication, XML encryption, XACML, XKMS, X.509, SAML,Kerberos, WS-* (Policy, SecureConversation, Message, Security, ReliableMessaging, SecurityPolicy, Trust), XSD, MIME, SOA, JSON, RESTful WS vs SOAP WS, JAXB Validations, Fast InfoSet, StAX, WCF, .Net, MTOM, UDDI, i tak dalej.

Podsumowując, dużo było o JAXR i bezpieczeństwie (powiedziałbym, że razem naliczyłbym do 1/3 pytań). Trochę o REST, WS-I Basic Profile 1.1 (raz pojawiła się wzmianka o 1.0a i sądzę, że była to pomyłka z poprzedniego egzaminu) i te nieszczęsne WCF. Pojawiły się 2-3 pytania o SOA. Generalnie niezbyt techniczny egzamin, a raczej taki architektoniczny.

Podchodził ktoś jeszcze? Wrażenia?

05 grudnia 2008

Sun Certified Developer for Java Web Services (SCDJWS) bezpłatnie do 10 grudnia!

10 komentarzy
Natrafiłem na dWorld.pl na ciekawą informację - SCDJWS za darmo. Jeszcze zostały 3 dni (poza weekendem), aby skorzystać z możliwości bezpłatnego podejścia do egzaminu Sun Certified Developer for Java Web Services (SCDJWS) i mimo, że zarobionym po pachy, potraktowałem egzamin czysto rekreacyjnie (w końcu, ile można siedzieć w tych kodach korygujących błędy z Tornado w tle?!).

Przeglądając wymagania dotyczące egzaminu, nie mam wątpliwości, że nie mam co liczyć na PASS, ale przynajmniej rozeznam się w materiale, w moich brakach i jeszcze wyrażę swój głos. W końcu poza 4h, nic nie tracę, a z pewnością dużo mogę zyskać. Potraktowanie tematu Web Services w postaci egzaminu stanowi dla mnie ciekawą formę szkolenia, więc zysk oczywisty. A może jednak mam wystarczająco wiedzy, aby to obronić? Jak nie podejdę, nie będę wiedział. A jak z Tobą? Podchodzisz?

01 grudnia 2008

37. spotkanie Warszawskiej Grupy Użytkowników Technologii Java (Warszawa JUG)

0 komentarzy
Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG) zaprasza na 37. spotkanie, które odbędzie się 02.12.2008 o godzinie 18:00 w sali 5440 Wydziału MIMUW przy ul. Banacha 2 w Warszawie.

Temat prezentacji: Java Native Interface, czyli dlaczego Java jest zależna od platformy
Prowadzący: Damian Szczepanik

Podczas prezentacji należy oczekiwać wiadomości wprowadzających do Java Native Interface (JNI), jak można go wykorzystać, gdzie i w jakich przypadkach jest niezbędny oraz kiedy należy się trzymać od niego z daleka. Z upływającym czasem pojawi się więcej praktyki. Zostanie zaprezentowane, co należy pobrać z Sieci i jak skonfigurować, aby móc korzystać z możliwości JNI w swoim IDE. Dla tych, których tematyka zainteresuje bardziej, garść porad. Dla tych, których nie zainteresuje (czytaj nie wykażą podczas spotkania chęci współpracy), będzie "wyjściówka" - nie wyjdą ze spotkania, dopóki nie odpowiedzą na pytania dotyczące JNI :) Tym samym uczestnicy zostali ostrzeżeni.

Lektura (nie)obowiazkowa: Java Native Interface w Wikipedii.

Historia Damiana z Javą zmieniała się jak w kalejdoskopie, co pozwoliło mu poznać jej wszystkie trzy oblicza. Zaczynalem, jak wszyscy, od SE, ale dość szybko dane mu było poznać tajniki pisania oprogramowania na platformie ME. W czasie studiów prowadził wykopaliska na terenie EE i pewnie tak zostałoby do dziś, gdyby nie firma Samsung, gdzie od prawie trzech lat tworzy oprogramowanie do telewizorow cyfrowych (!) Damian jest programistą z zawodu, integratorem kodu z doświadczenia, a (jak nikt nie patrzy) zarzadza systemem kontroli wersji. Podsumowując, ciekawa osóbka, której niewysłuchać to zgrzeszyć.

Planowany czas prezentacji to 1,5 godziny, po której planuje się 15-30-minutową dyskusję.

Wstęp wolny!

Zapraszam w imieniu grupy Warszawa JUG!