30 kwietnia 2009

Servlety - rodzina klas i interfejsów

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

Pełne archiwum SDJ 2008 i 2007 do zgarnięcia

Post przeniesiony na nowego bloga pod adres http://tomaszdziurko.pl/2009/04/pelne-archiwum-sdj-2008-i-2007-do-zgarniecia/

29 kwietnia 2009

O wyglądzie bloga słów kilka

Od kilku wieczorów próbuję zmienić trochę wygląd mojego bloga. Aktualny szablon jest tymczasowy, bo po pierwsze nie do końca mi się podoba, a po drugie jest dość standardowy. Przez "standardowy" rozumiem również (poza tym, że jest standardowo dostarczany przez Google'a ;) ) także jego popularność wśród Javowych bloggerów. Tylko wśród blogów, które regularnie czytam, korzysta z niego Jacek Laskowski - Notatnik Projektanta Java EE, Paweł Zubkiewicz - Java programmer's blog oraz IT Researches. I wcale im się nie dziwię :), bo z szablonów, które są do wyboru na starcie blogowania właśnie ten wydaje się najlepszy do prowadzenia merytorycznego bloga. Czytelna kolorystyka i układ, a dodatkowo duża szerokość, dzięki czemu dłuższe wypowiedzi nie ciągną się przesadnie w dół to niewątpliwe zalety tego szablonu. A ja głównie tylko dlatego, że nie do końca trafia w mój gust estetyczny szukam jakiegoś zamiennika o podobnych parametrach. Niestety póki co bezskutecznie.

Swoją drogą podoba mi się wyglą bloga Splatch's devblog, jest przejrzysty i szeroki, a ja właśnie czegoś w takich klimatach szukam.

Inną rzeczą, która zajęła mi na początku trochę czasu było estetyczne wyświetlanie kodów źródłowych w moich postach. Użyłem SyntaxHighlightera, a ostatnio zastanawiałem się nawet nad opisaniem mojej walki z tym narzędziem na blogu. Uprzedzili mnie inni polscy blogowicze: Maciej Zbrzezny oraz Paweł Zubkiewicz, więc nie będę wymyślał koła i zainteresowanych odsyłam pod podane linki.

25 kwietnia 2009

NNTP, Apache Commons Net i polskie znaki w wiadomościach

Jak co weekend, dzisiaj też usiadłem do magisterki. Spośród kilku rzeczy, które sobie zaplanowałem pojawił się temat wysyłania wiadomości/powiadomień na wewnętrzną grupę dyskusyjną mojego akademika za pomocą protokołu NNTP.

Szybkie rozpoznanie pokazało, że całość jest prosta jak przysłowiowa budowa cepa i nie powinna sprawiać żadnych problemów. Poniżej mała klasa pokazująca sposób wysyłania posta na grupę pw.test przy pomocy biblioteki Apache Commons Net.


package pl.tdziurko.nntptest.main;

import java.io.Writer;
import org.apache.commons.net.nntp.NNTPClient;
import org.apache.commons.net.nntp.SimpleNNTPHeader;

/**
*
* @author Tomasz Dziurko
*/
public class Main {

public static void main(String[] args) throws Exception {

NNTPClient client = new NNTPClient();
client.connect("news.ustronie.pw.edu.pl");

client.selectNewsgroup("pw.test");
Writer postArticle = client.postArticle();

SimpleNNTPHeader headers =
new SimpleNNTPHeader("Tomasz Dziurko <tdziurko@gmail.com>", "Test kodowania polskich znaków");
headers.addNewsgroup("pw.test");
headers.addHeaderField("Mime-Version", "1.0");
headers.addHeaderField("Content-Type","text/plain; charset=UTF-8");
headers.addHeaderField("Content-Transfer-Encoding", "8bit");

postArticle.write(headers.toString());
postArticle.write("ąęóśłżźćń - test polskich znaków\r\n");
postArticle.close();

client.completePendingCommand();

client.disconnect();
}

}


Wszystko działało zgodnie z oczekiwaniami do momentu, gdy zacząłem w treści wiadomości używać polskich znaków. Zamiast "ąęóśłżźćń" pojawił się następujący obrazek:


Kombinacje z ustawianiem innego kodowania w nagłówku wysyłanej wiadomości, zmiana kodowania całego projektu czy nawet zmiana ustawień czytnika (tak tak, zacząłem winić nawet biednego Thunderbirda ;) ) nic nie pomogły. Wtedy postanowiłem zajrzeć do źródeł biblioteki ze stajni Apache'a i po krótkim śledztwie znalazłem winowajcę: klasę org.apache.commons.net.nntp.NNTP.


public class NNTP extends SocketClient
{
/*** The default NNTP port. Its value is 119 according to RFC 977. ***/
public static final int DEFAULT_PORT = 119;

// We have to ensure that the protocol communication is in ASCII
// but we use ISO-8859-1 just in case 8-bit characters cross
// the wire.

private static final String __DEFAULT_ENCODING = "ISO-8859-1";

...

/***
* Initiates control connections and gets initial reply, determining
* if the client is allowed to post to the server. Initializes
* {@link #_reader_} and {@link #_writer_} to wrap
* {@link SocketClient#_input_} and {@link SocketClient#_output_}.
***/
@Override
protected void _connectAction_() throws IOException
{
super._connectAction_();
_reader_ =
new BufferedReader(new InputStreamReader(_input_,
__DEFAULT_ENCODING));
_writer_ =
new BufferedWriter(new OutputStreamWriter(_output_,
__DEFAULT_ENCODING));
__getReply();

_isAllowedToPost = (_replyCode == NNTPReply.SERVER_READY_POSTING_ALLOWED);
}

...

}

Jak widać przy tworzeniu zarówno Writera i Readera zastosowano kodowanie ISO-8859-1, czyli nie posiadające w swoich zasobach polskich ogonków. Gdy zaczynałem się zastanawiać w jaki sposób zbuduję całą bibliotekę po zmianie wartości zmiennej __DEFAULT_ENCODING na "UTF-8", zauważyłem w archiwum ze źródłami plik pom.xml. Alleluja! - pomyślałem - Maven lekiem na moje problemy. Teraz wszystko powinno pójść niczym z płatka :)

NetBeans 6.5 z zainstalowanym pluginem pozwala na otwieranie projektów z pliku pom.xml, więc już w IDE mogłem dokonać modyfikacji biblioteki. Następnie uruchomiłem testy i ku mojemu zdziwieniu okazało się, że jeden z nich nie zakończył się sukcesem. Szybkie pytanie do Wielkiego Googla i już wiedziałem, że pewna metoda testująca działa bez problemów tylko na anglojęzycznych systemach operacyjnych (przenośność Javy ;) ). Żeby już nie przedłużać zabawy ze źródłami po prostu ją wykomentowałem i uruchomiłem testy ponownie.


Ufff, udało się :) Teraz mogłem zbudować zmodyfikowaną bibliotekę i podczepić ją do mojego projektu wysyłającego wiadomość testową.
Poniżej można zobaczyć efekty, wszystkie polskie znaki są prawidłowo wysyłane na grupę dyskusyjną.

21 kwietnia 2009

SCWCD - Cykl życia serwletu

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

SCWCD - zaczynamy przygotowania

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

16 kwietnia 2009

Trochę historii - moje wrażenia z nauki do SCJP

Od mojego egzaminu Sun Certified Java Programmer (SCJP) w wersji 1.5 minęło już trochę czasu, ale być może ten post pomoże komuś w wyborze sposobu przygotowań i przyczyni się do uzyskania lepszego wyniku.

Pomoce naukowe
- SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055) , po prostu 'must have' dla każdego planującego zdobycie SCJP. W tej książce jest wszystko co może Cię spotkać na egzaminie. Całość przeczytałem raz, niektóre rozdziały, z których czułem się najmniej pewnie (Generics, Threads) dwukrotnie.
- symulator EnthuWare JQ+, koszt tylko niecałe 28$ lub 18$ (zniżka dla studentów), a bez niego miałbym pewnie kilkanaście procent mniej.
- specyfikacja i api języka do doczytywania niuansów
- IDE to testowania własnych pomysłów na pytania i zabawy kodem z przykładowych pytań
- blog Mariusza Lipińskiego O technologiach dla języka Java, w którym autor opisuje swoje przygotowania do egzaminu (coś w klimatach podsumowań 'Two Minute Drill' z książki Sierry & Bates, tylko przyjemniej się czyta).
- forum SCJP na JavaRanch.com, gdzie udzielają się także autorzy polecanej przeze mnie książki.

Uwagi ogólne
1. Bez przerobienia sporej ilości testów lepiej nie podchodzić do egzaminu. Pytania są specyficzne, a po przerobieniu kilkunastu zestawów szybkość i skuteczność wychwytywania drobnych niuansów znacznie wzrasta.
2. Pieniądze wydane na symulator nigdy nie są pieniędzmi wyrzuconymi w błoto.
3. Eksperymentuj. Nie jesteś czegoś pewny? Zastanawiasz się co będzie jeśli pytanie wyglądałoby trochę inaczej? Odpal środowisko i przetestuj swoje pomysły! Moje zabawy z IDE sporo mi dały.
4. Nie przeciągaj przygotowań. Ustal sobie jakąś datę, nawet za 3-4 miesiące, kiedy chcesz przystąpić do egzaminu i konsekwentnie do niej dąż. Mając w głowie 'deadline' będziesz systematyczniej pracował, aby zdążyć na czas. Mam znajomego, który uczy się do SCJP już ponad pół roku bez żadnych planów kiedy chce podejść do egzaminu i końca jego przygotowań nie widać :)

Formalności
Przelanie odpowiedniej kwoty, przesłanie potwierdzenia przelewu i otrzymanie vouchera zajęło mi 2 dni. Załapałem się na promocję Suna (trzeba było podać odpowiedni kod promocji przy zamawianiu vouchera) pozwalającą na ponowne darmowe podejście do egzaminu w przypadku nie zaliczenia. Na szczęście nie musiałem z niej skorzystać :)
Egzamin zdawałem w BizTech Konsulting w Warszawie. Niewielka sala z klimatyzacją, dwa stanowiska, przyjemna obsługa. Przy planowaniu terminu podejścia do egzaminu warto zadzwonić wcześniej, bo może się okazać, że wolne terminy są za 1-2 tygodnie, więc lepiej nie czekać z tym na ostatnią chwilę.

Więcej o indywidualnych sposobach przygotowań do egzaminu oraz wrażeniach już po można przeczytać:
- na portalu GoldenLine (forum grupy SCJP)
- na SCJP Wall of Fame na JavaRanch - linki do 'story' przy niektórych osobach z listy

PS: A sam zdałem na 80% :)

12 kwietnia 2009

Here we go!

Stało się, zapadła wiekopomna decyzja o rozpoczęciu prowadzenia bloga. Pomysł kiełkował mi w głowie już od dłuższego czasu, ale jak to z pomysłami bywa, muszą dojrzeć. Początkowo miałem wątpliwości czy będę miał o czym pisać i czy będę miał w ogóle na to pisanie czas. Ale w nowej pracy sporo się dzieje, aktualnie bardziej jestem w educationalMode niż w workingMode, więc materiału na posty nie powinno zabraknąć.

O czym będzie ten blog?
Bloga traktuję jako notatnik do zapisania moich problemów podczas programowania i rozwiązań jakie udało mi się znaleźć lub wypracować. Dodatkowo będą pojawiały się tutaj ciekawostki ze świata Java/JEE (linki do ciekawych artykułów, postów lub książek). Co jakiś czas będę starał się umieszczać opis jakiejś biblioteki lub frameworku, z którym miałem styczność wraz z przykładowym tutorialem.
Ponieważ jestem w trakcie pisania pracy magisterskiej (roboczy tytuł "Tworzenie aplikacji JEE - porównanie frameworków front-endowych"), wieści z edukacyjnego frontu też będą stanowiły jakąś część moich postów.
Oczywiście nie samym programowaniem człowiek żyje, wiec jeśli coś mnie zaciekawi, wzburzy, itp to także znajdzie to odzwierciedlenie w blogu. Oczywiście takie posty otrzymają tag 'off-topic', a w przyszłości może uda się rozdzielić subskrypcję na dwie: tą z off-topic i tą bez.

Po co to wszystko?
Po pierwsze jak wiele osób mam chęć pozostawienia po sobie jakiegoś śladu. A że artysta ze mnie kiepski to zamiast poematu czy rzeźby, zostawię po sobie trochę wiedzy z programowania w Javie w postaci łatwo dostępnej dla innych.
Po drugie: człowiek lepiej przyswaja nową wiedzę, jeśli musi ją opisać własnymi słowami. Wszystko lepiej się utrwala i na dłużej zostaje w głowie. A jeśli kiedyś będę miał problem z przypomnieniem sobie jak rozwiązałem jakiś problem, szybciej znajdę to w notatkach na moim blogu niż w archiwum moich projektów :)

Jacek Laskowski na swoim blogu opisując swoje wystąpienia na konferencjach i JUG-ach wielokrotnie podkreślał, że bardzo dużo można się nauczyć i dowiedzieć wchodząc w merytoryczną interakcję ze słuchaczem. Ponieważ nie lubię wystąpień publicznych przed większą grupą ludzi, łatwiejszym sposobem wejścia w interakcję będzie relacja autor postów <--> autorzy komentarzy. Więc niniejszym zachęcam do regularnego odwiedzania bloga i komentowania :)