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/
Etykiety:
SDJ
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.
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.
Etykiety:
offtopic,
SyntaxHighlighter
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.
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.
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ą.
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ą.
Etykiety:
Apache Commons Net,
java,
magisterka,
NNTP
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% :)
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 :)
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 :)
Subskrybuj:
Posty (Atom)