23 stycznia 2010
Spóźnione SCWCD wreszcie jest
Ten postał został przeniesiony na mojego nowego bloga i można go znaleźć tutaj.
Etykiety:
SCWCD
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 :)
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 :)
Etykiety:
konferencje
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.
Etykiety:
how-to,
jak zacząć,
java
16 października 2009
Java Developers' Day 2009 moimi oczami
Ten postał został przeniesiony na mojego nowego bloga i można go znaleźć tutaj.
Etykiety:
Java Developers' Day,
konferencje
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.
Etykiety:
książki,
refaktoryzacja
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.
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:
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.
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ą:
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.
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.
Etykiety:
efektywny programista,
how-to,
java
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.
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.
Subskrybuj:
Posty (Atom)