Sunday, November 23, 2008

Warsjava08 - subiektywnie...

No i po konferencji. Myślę, że wysiłek oranizatorów w tym roku bardzo się opłacił. Konferencja była naprawdę dobrze zoorganizowana (olbrzymi krok do przodu w stosunku do '07).
Co mi się podobało:

- duża ilość uczestników i obowiązek rejstracji przez sieć, który sprawił że organizatorzy mogli zapewnić każdemu posiłek (a nawet można było iść po dokładke ;) ).

- którsze prezentacje, dzięki temu można było posłuchać o różnych rzeczach, a jak ktoś danym tematem nie był zainteresowany to mógł łatwo przeczekać.

- fajna impreza integracyjna :)

- koszulki dla wszystkich

- adrenalina towarzysząca losowaniu nagród

Co mi się troszke niepodobało (ale tylko troszkę...):

- trochę brak dyscypliny niektórych prelegentów (chyba właściwie jednego) sprawił, że prezentacje Łukasza i Jacka zostały mocno skrócone. Prezentacja Jacka mogła być naprawdę bardzo ciekawa gdyby miał więcej czasu. Ważne jest też robienie przerw, dzięki którym można rozporostować nogi, porozmawiać i odzyskać świeżość umysłu do słuchania kolejnych prezentacji.

- prezentacja o Eclipse RCP i web'ie. Uważam, że poziom tej prezentacji był średni, a prowadzący pokazał coś (RAP-a) o czy nie umiał, wiele więcej powiedzieć. Sama aplikacja w SWT to przecież nie jest jakieś wiekie osiągnięcie, a to co miało robić różnicę czyli RAP, zostało dość pobieżnie nakreślone i tak naprawdę niewiele o tym rozwiązaniu się dowiedzieliśmy.

- brakowało mi takiego wstępu oraz podsumowania wygłoszonego przez ktogoś z organizatorów (prelegentów).

Podsumowując...

Licze na to, że prezentację Jacka o web-appie i OSGi jeszcze kiedyś w całości usłyszę. Temat jest gorący i wart zainteresowania, a Jacek prezentacje przygotowuje naprawdę solidnie.

Wielkie brawa dla organizatorów i dużego postępu jaki zrobiła Warsjava w ciągu tego roku. Brawa dla sponsorów za to, że mogliśmy nakarmić nie tylko umysły, a potem się wspólnie spotkać i porozmawiać przy piwku.

Może, warto zaprosić na spotkanie JUGowe Tomasza Zieleniewskiego, aby opowiedział nam wiecej o SIPie, SIP servletach i SLEE, bo temat jest dość interesujący. Ale na JUGu przydała by się raczej bardziej techniczna, a mniej marketingowa prezentacja.

Tuesday, October 21, 2008

Dexter, MacBook & product placement.

A dzisiaj coś z zupełnie innej beczki, a mianowicie produkt placement firmy Apple.

Chyba każdy z nas oglądając produkcje filmowe z USA zwrócił uwagę na te laptopy z jabłuszkami na pokrywach, prawda ? Występują one niezwykle często, myślę, że popularność ich w filmach i serialach jest dużo większa niż w rzeczywistości.

Na filmach pokazani są super-fajni ludzie, a przecież ci jak wiadomo korzystają wyłącznie ze sprzętu firmy Apple :). Mogłoby się wydawać, że ten produkt placement jest nachalny i mocno przypadkowy (tzn. Apple mówi, chcemy żeby w Waszym firmie grały Mac'i i wszystkie komputery w danym filmie maja logo ogryzka...).

Oglądając ostatni odcinek serialu Dexter, bliżej się temu product placement'owi przyjrzałem. Product placement jabłuszek jest dużo bardziej podstępny niż nam się wydaje :) (zgodnie ze spiskową teorią dziejów).

Wydawałoby się że wszystkie komputery w Dexterze to Mac'i, nic bardziej błędnego. Ostatni obejrzany odcinek doprowadził mnie do bardzo ciekawych wniosków (sezon 3, epizod 3).

Na posterunku policji wszyscy korzystają z komputerów HP. Takie nudne miejsce, nudni ludzie korzystający z nudnych komputerów ;). Wyjątkiem jest Dexter, korzystający ze swojego MacBooka Pro, zarówno w domu jak i w pracy.


No właśnie Dexter zawsze korzysta z Mac book'a, no ale cóż on jest fajny i nie można mu się dziwić, że wybrał Mac'a w końcu fajnie ludzie wybierają fajne komputery.


Ale najlepsze na koniec. W ostatnim odcinku pojawił się niejaki Nathan Marten, mający na koncie wyrok za pedofilie, a obecnie dobierający się do rodziny Dexter'a.
Bardzo zły gości, nie sądzicie ? Jakiego komputera może używać taki zły do szpiku kości drań ? I tu niespodzianka! Nathan używa wypasionego laptopa firmy Alienware.


Firma ta zajmuje się budowaniem modeli z górnej półki dla graczy! Tak te komputery adresowane są dla graczy. Tak więc, jak czarne kapelusze to gracze. Pedofil nie mógł wybrać Mac'a bo jest zdecydowanie niefajnym człowiekiem.

Nie traktujcie tego artykułu zbyt poważnie :)

Wednesday, October 8, 2008

Pragmatyczny programista vs. Crtl+space

Ostatnio okazyjnie nabyłem książkę Panów: Andrew Hunta oraz Davida Thomasa pod tytułem "Pragmatyczny programista". Warto dodać że książka ta została wydana w 2000 roku (w USA, w Polsce 2002).

W rozdziale o narzędziach, autorzy przekonują do tezy, że programista powinien posługiwać się biegle jednym edytorem tekstu i używać go wszędzie, gdzie się da. Tłumaczą, że maestria w posługiwaniu się jednym prostym narzędziem, jest znacznie ważniejsza niż wyręczanie się kombajnem w rodzaju IDE.
Dla mnie teza ta jest dzisiaj już trochę nieaktualna. Wyobraźmy sobie kogoś kto nad projektem w JEE (z wykorzystaniem np. spring, hibernate, struts) pracuje np. vi. Znałem osobiście jednego programistę który taki styl pracy preferował ale do pewnego czasu. Kiedy poznał Intellij Idea (to nie jest blog sponsorowany) i zapoznał się z klawiszologią jego praca stała się nie tylko szybsza i prostsza ale także mniej błędogenna.

Czy więc dzisiaj słowa zawarte w pragmatycznym programiście są nadal aktualne?

Od 2000 roku wiele się zmieniło, wystarczy spojrzeć jakie wtedy były IDE i jakie są teraz... Dzisiaj Eclipse czy IDEA to nie tylko produkty tworzone pod kontem konkretnego języka. To rozwiązania do których istnieje całe bogactwo rozszerzeń, dzięki którym praca programisty staje się nie tylko prostsza ale także mniej błedo genna.
Często bowiem zdarza się, że edytując config w xml popełniam literówke. Błędy zawarte w plikach konfiguracyjnych wychodzą dopiero podczas działania aplikacji. Wykrywanie takich błędów jest więc bardzo kosztowne, ponieważ trzeba aplikacje zbudować, uruchomić i jeżeli będziemy mieli szczęście to wyłapiemy błąd podczas uruchamiania aplikacji, jeżeli nie to będziemy go musieli wy klikać.
Gdy mamy do dyspozycji IDE, z walidacją tych configów błąd lub ostrzeżenie zobaczymy na ekranie w momencie jego popełnienia, tak więc IDE oszczędza nam w tym wypadku wiele pracy. Dodatkowo IDE podpowie także w xml nazwę pakietu czy klasy.
Dodatkowo dzięki IDE zwiększa się czytelność kodu (autoformatowanie) i nawigacja po strukturach klas i interfejstów jest bardzo ułatwiona.

Dzisiaj IDE zaspokaja w 99% potrzeby programisty, ale fakt jest faktem, że raz na jakiś czas trzeba coś zrobić poza nim. Wtedy trzeba użyć narzędzi o których piszą autorzy "Pragmatycznego programisty". Maestria w posługiwaniu się nimi jest atutem, ale czy koniecznością ?

Jak widać wiele się zmieniło w ciągu ostatnich paru lat w pracy programistów. IDE jest dzisiaj ważnym narzędziem bez którego ciężko się obyć. Należy jednak pamiętać, że IDE to tylko narzędzie i nie ma w nim magicznych krasnoludków, które wszystko za nas zrobią. Niestety efektem ubocznym korzystania z IDE jest często niewiedza, co tak naprawdę się dzieje pod spodem, co IDE robi za nas. Spotkałem już "programistów" którzy tworzyli programy w IDE, a gdy poprosiłem ich o uruchomienie ich z linii poleceń, nie potrafili tego zrobić :) Podobne anegdotki, krążyły o programistach korzystających z Visual Studio, że nie piszą oni kodu, a go wyklikują.

Podsumowując, świat idzie na przód i narzędzia też i sam edytor to dzisiaj stanowczo zbyt mało. Dzisiaj maestria w posługiwaniu się IDE jest coraz bardziej wskazana, należy być jednak świadomym tego co IDE za nas robi (czasami może nam coś popsuć i wtedy wiemy gdzie szukać błędu), bo czasami nadchodzi chwila w której musimy stanąć twarzą w twarz z linią poleceń.

Wednesday, September 17, 2008

Rada

Dzisiaj podczas szukania czegoś na temat hibernate znalazłem ciekawą stronkę na, którą jakimś dziwnym trafem nigdy nie trafiłem :)

Common Problems

A na niej złotymi zgłoskami ważną rade...


I'm having trouble with a bidirectional association.

When you update a bidirectional association you must update both ends.
parent.getChildren().add(child);
child.setParent(parent);

It's best to do this in an association management method of your persistent class.


I'm still having trouble!

Read the documentation! There's a detailed section about "Parent/Child Relationships" in chapter 16 of the reference documentation including code examples.


Tak to w życiu bywa... że chcesz czy nie chcesz dokumentacje przeczytać warto, a nawet trzeba :)

Wednesday, July 2, 2008

SpringOne08


Na SpringOne 2008 wybrałem się dzień wcześniej. Wszystko zaczeło się tam gdzie zawsze czyli na Okęciu. Po piwie w miejscowym barze i podróży samolotem Brussel Airlines (Już nigdy z nimi nie polece, trzeba płacić za napoje i jedzenie jak w tanich liniach, chociaż te tanie nie są), po wylądowaniu w BRU i podróży pociągiem (z przygodami) udało mi (oraz 2-jce znajomych) dotrzeć do hotelu. W hotelu, okazało się, że hotel ten też został wybrany przez SpringSource jako baza wypadowa.

Day 1.


Rozpoczeło się od rejstracji, otrzymania identyfikatora oraz porcji gażdetów. Następnie belgijskie śniadanie czyli na maxa słodkie (choć dobre) ichnie drożdżówki. Generalnie katering był przyzwoity, stały 4 lodówki wyposarzone w to co Coca-Cola oferuje w Belgi. Konferencja odbywała się w multikinie (w kinie z wieloma salami).


Rozpoczeło się od wstępu Roda Johnsona, który był dość ciekawy, a zarazem bardzo marketingowy. Następnie prezentacje odbywały się równolegle w 3 salach, także zawsze można było coś ciekawego znaleść.

Ja uczestniczyłem w prezentacjach na temat Spring Batch. Rozwiązanie mnie zainteresowało, ale mój entuzjazm został szybko przygaszony tym iż jest to wersja dość młoda i nie posiada np. możliwości defioniowania zależności między job'ami i step'ami :(

Następnie "Persistence Tuning for the Spring Environments by Thomas Risberg" - wykład ciekawy, nie było srebrnych kul, ale raczej metodycznie krok po kroku wytłumaczone, co i kiedy powinno być optymalizowane.

Później przyszedł czas na najcieplejszą z nowinek czyli Spring Dynamic Modules. Narazie OSGi zachwyca entuzjastów, ale już lada dzien zapuka także w okienko projektów w naszych firmach ;)

Lunch break zaobfitował w poznanie znajomych z kraju nad Wisłą, kanapki i rosołek (no tutaj organizatorzy nie zaszaleli).

Po jedzonku "Spring Transaction Choices for Performance by Juergen Hoeller" - podsumowując, używajmy transakcji rozproszonych wtedy gdy to konieczne, gdy nie, natywnych. Dodatkowo były omawiane różne rodzaje zarządzania transakcjami gdy współpracujemy z różnymi źródłami danyc (np. wiele baz + jms).

Na koniec dnia pierwszego "Working with Hibernate with Spring 2.5 by Rossen Stoyanchev". I tutaj poznałem fajny trick, przyznam się, że sam na to nie wpadłem. Otóż przy testach integracyjnych Rossen proponował otwieranie transakcji przed testem, a potem jej rollback po zakonczeniu testu. Wstyd się przyznać ale zawsze miałem ten problem bo commitowałem i musiałem potem posprzątać po sobie (a to niestety trwa...).

Po pierwszym dniu konferencji było piwko oraz frytki z ketchupem, a gdy ten się skończył belgijska specjalność z majonezem...
Z konferencji nasz dyskusja przeniosła się do pobliskiego pubu... :)

ps. dzień drugi opiszę jutro :)

tutaj znajdziecie slajdy z konferencji :)

Friday, May 16, 2008

Parametry wysyłane GETem, polskie znaki i UTF-8

Ostatnio miałem problem w pracy z ukochanymi polskimi znakami, a konkretniej z wysyłaniem ich metodą GET. W projekcie kodowanie to UTF-8 przy przekazywaniu parametrów z polskim kodowaniem (zakodowanych oczywiscie do UTF-8)  w request-cie przychodziły krzaki.

Problemem okazało się, że przesyłanie znaków zakodowanych GETem niewiele daje bo serwer aplikacyjny ma w swojej konfiguracji zapiane w jakim kodowaniu są requesty i tak je przetwarza, zwykle jest to Latin-1.

Co należy zrobić ?
W przypadku JBoss'a:

W pliku %jboss-home%\server\%konfiguracja%\deploy\jboss-web.deployer\server.xml należy dodać atrybut URIEncoding="UTF-8" elementu Connector (dla portu 8080)

W przypadku gdy ruch do JBossa jest kierowany przez Apacha za pomocą mod_jk konieczne jest dodanie w server.xml do Connectora atrybutu URIEncoding="UTF-8" (tym razem dla portu 8009). I powinno śmigać

A tu troche literatury na temat kodowania polskich znaków:
http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/

http://www.warski.org/blog/?p=4

http://confluence.atlassian.com/display/DOC/Configuring+Tomcat's+URI+encoding

A z takich ciekawostek to kiedyś miałem też problem z PostgreSQL 8.1 (ale w innych wersjach było to samo) ponieważ baza była zainstalowana z innym niż UTF-8 domyślnym kodowaniem.
Problem był z polskimi znakami w bazie mającej kodowanie ustawione na UTF-8. Wyszystko było w porządku do momentu kiedy wywołało się w SQL funkcji tolower , toupper. Polskie znaki nie były traktowane wtedy jako litery tylko jako znaki specjalne i tym samym nie były "zmniejszane" i "zwiększane". Zainstalowanie bazy z domyślnym kodowaniem UTF-8 pomogło.

Wednesday, April 30, 2008

Wielomodułowy projekt w Maven 2

Oto prosty sposób jak zrobić w Maven 2 projekt wielomodułowy:

1. Z wiersza poleceń wykonaj:
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=mojeIdGrupy -DartifactId=mojArtefakt -DpackageName=  -Dversion=1.0

W wyniku wykonania tego polecenia zostanie utworzony katalog o nazwie "mojArtefakt" a w nim plik pom.xml oraz inne rzeczy które można (należy)  skasować.

2. W pliku pom.xml  "packaging" zmieniamy z jar na pom.

3. W katalogu mojArtefaktId wywołujemy polecenie:

mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=mojeIdGrupy.myMultiProjectArtifactId -DartifactId=mojModul -DpackageName=mojeIdGrupy.myMultiProjectArtifactId.mojModul -Dversion=1.0

Tara!!!! i gotowe. Jeżeli chcemy mieć więcej modułów powielamy czynność w punkcie 3.

Ciekawszy i bez wątpienia pełniejszy opis problemu na:
Scriptalandia

The beginnig

Tak więc oto  mój blog... !
Będzie, a przynajmniej takie są założenia ma być o Javie i okolicach oraz IT.
Myślę, że zagadnienia poruszane tutaj nie będą porażały swoją oryginalnością i wyszukaniem, raczej ma być to chleb powszednie inżyniera oprogramowania.
Mam nadzieje, że nie będe jedynym czytającym :)