23 stycznia 2010

Spóźnione SCWCD wreszcie jest

Ten postał został przeniesiony na mojego nowego bloga i można go znaleźć tutaj.

11 stycznia 2010

Tańsze zapisy na 4Developers => kwiaty dla lubej :)

Jakiś czas temu ruszyły zapisy na tegoroczną edycję konferencji informatycznej 4Developers. Jak to bywa na tym etapie organizowania takiej imprezy, agenda dopiero "się robi", ale gdy spojrzycie na tematykę prezentacji javowych i nazwiska prelegentów z poprzedniego roku, to widać, że było bardzo ciekawie, więc i za 2 miesiące powinno być ok.

Jeśli już teraz wiecie, że 26 marca chcecie tam być, to warto dopełnić formalności jeszcze przed 17 stycznia, ponieważ do tego dnia obowiązuje najbardziej promocyjna cena za uczestnictwo (szczegóły tutaj). A pieniądze w ten sposób zaoszczędzone będzie można wydać na niespodziankowy bukiet kwiatów dla swojej dziewczyny/narzeczonej/żony. Na pewno będzie z takiego prezentu zadowolona :)

13 grudnia 2009

Java i programowanie - jak zacząć i z czego się uczyć

Ten postał został przeniesiony na mojego nowego bloga i można go znaleźć tutaj.

16 października 2009

Java Developers' Day 2009 moimi oczami

Ten postał został przeniesiony na mojego nowego bloga i można go znaleźć tutaj.

26 września 2009

Jak odmienić sposób programowania używając refaktoryzacji - moje wrażenia

Ten postał został przeniesiony na mojego nowego bloga i można go znaleźć tutaj.

6 sierpnia 2009

Efektywny programista Java, część 3 i 4 - klasy użytkowe i unikanie zbędnego powielania obiektów

Dzisiaj kolejna porcja porad jak efektywnie programować w Javie. Tym razem w jednym poście dwie porady, bo każda z nich jest zbyt krótka, by umieszczać je oddzielnie.

Klasy użytkowe

Prawie w każdym projekcie pojawia się przynajmniej jedna klasa, która gromadzi metody użytkowe wspomagające działanie aplikacji. Taką klasę nazywamy najczęściej klasą pomocniczą (ang. utility class).
Składa się ona z kilku/kilkunastu metod statycznych używanych w różnych miejscach aplikacji. Taka klasa nie powinna umożliwiać tworzenia swojej instancji, gdyż jest to zbędne.

Bardzo łatwo możemy wymusić takie zachowanie na innych programistach tworząc konstruktor prywatny:


public class Utils {

/*
* This is utility class, you don't have to create instance to use it
*/
private Utils() { }

public static String prepareUserStringForEmail(User user) {
// ...
}

public static String createRandomString(int length) {
// ...
}

public static String formatDateWithTime(Date date) {
// ...
}
}



Dzięki takiemu prostemu zabiegowi, nasz kod zyskał na czytelności, a inni programiście nie będą używać naszej klasy w sposób niepoprawny.

Optymalizowanie tworzenia obiektów, których używamy wielokrotnie

Przyjrzyjmy się poniższemu fragmentowi pewnej klasy:


public class Utils {

/*
* This is utility class, you don't have to create instance to use it
*/
private Utils() { }

public static boolean isOlderThanCodeHardGoProBlogOwner(Date birthDate) {
if(birthDate == null) {
throw new IllegalArgumentException("Date can not be null");
}

Calendar calendar = Calendar.getInstance();
calendar.set(1984, Calendar.JULY, 22);
Date codeHardGoProOwnerDateOfBirth = calendar.getTime();

return birthDate.compareTo(codeHardGoProOwnerDateOfBirth) < 0;
}

}

Sprawdzamy tutaj, czy czyjaś data urodzin jest wcześniejsza niż moja. Tworzymy obiekt klasy Calendar, ustawiamy mu odpowiednie wartości roku, miesiąca i dnia, a następnie porównujemy ze zmienną birthDate.
Gdy wywołamy metodę kolejny raz, obiekt calendar zostanie utworzony ponownie i zostanie mu ustawiona ta sama data co poprzednio. Nie jest to rozwiązanie najbardziej optymalne. Widać tutaj wyraźnie, że tworzenie obiektu calendar i ustawianie mu odpowiedniej wartości powinno zostać wydzielone poza metodę i wykonywane tylko raz. Efekt taki możemy uzyskać przenosząc fragment kodu do bloku statycznego, a zmienną klasy Date uczynić prywatną i statyczną:


public class Utils {

private final static Date CODE_HARD_GO_PRO_BLOG_OWNER_BIRTH_DATE;

static {
Calendar calendar = Calendar.getInstance();
calendar.set(1984, Calendar.JULY, 22);
CODE_HARD_GO_PRO_BLOG_OWNER_BIRTH_DATE = calendar.getTime();
}

private Utils() { }

public static boolean isOlderThanCodeHardGoProBlogOwner(Date birthDate) {
if(birthDate == null) {
throw new IllegalArgumentException("Date can not be null");
}

return birthDate.compareTo(CODE_HARD_GO_PRO_BLOG_OWNER_BIRTH_DATE) < 0;
}

}


Teraz nasza metoda będzie wykonywała się trochę szybciej. Oczywiście zysk będzie znacznie większy, gdy taki wielokrotnie używany obiekt będzie bardziej skomplikowany, a jego tworzenie kosztowniejsze i bardziej czasochłonne.

31 lipca 2009

Wicket - się dzieje

Ostatnio społeczność związana z frameworkiem Wicket ma kilka powodów do zadowolenia. Po pierwsze pojawiła się finalna wersja 1.4. Najważniejsza zmiana w porównaniu z wersją 1.3 to całkowite przejście na Javę 1.5 i wprowadzenie generycznego interfejsu IModel wraz z implementacjami. O wszystkich nowościach i zmianach można poczytać tutaj.
Jednocześnie z pojawieniem się wersji 1.4 został opublikowany ostatni upgrade wersji 1.3 o numerze 1.3.7 poprawiający kilkanaście "bugów". Autorzy zapowiadają, że jeśli nie pojawią się krytyczne błędy to ta gałąź nie będzie dalej rozwijana. W związku z tym należy się powoli przygotowywać do migracji na wersję 1.4 w aplikacjach używających Wicketa 1.3.x. Problem dotyczy również i mnie, bo moja magisterka używa wersji 1.3.6.

Kolejnym wydarzeniem istotnym dla fanów Wicketa jest opublikowanie w serwisie RefCardz ściągawki (ang. cheatsheet) o tym frameworku. Na kilku stronach zebrano najważniejsze informacje, najlepsze praktyki i spor porad bardzo przydatnych dla osób używających Wicketa. Całość można pobrać tutaj.

I na koniec informacja bardziej z naszego, polskiego poletka. Paweł Szulc pracuje nad mavenowym archetypem znacznie przyśpieszającym rozpoczęcie pracy z Wicketem. Projekt nazywa się WicketCool i można się z nim zapoznać pod tym adresem. Bardzo podoba mi się pomysł stworzenia czegoś takiego i mam nadzieję, że pomysł zyska na popularności, a Pawłowi należą się podziękowania za poświęcony czas i po prostu za dobrą robotę.
Dodam tylko, że sam projekt miał premierę na prezentacji Pawła podczas tegorocznej Javarsovii.