Transformata xslt w javie

Dawno nie było nic o javie, to dziś pora na transformatę XSLT. Bardzo ciekawa rzecz, która pozwoli nam zwykłego xml przekształcić do postaci, która można pokazać zwykłemu użytkownikowi i on nie ucieknie. Nie wiem czy to będzie dobre porównanie ale pliki xsl są dla xml tym samym co css dla html.

Teraz przykład transformaty xslt w javie:

Result fin = new StreamResult(response.getWriter());

InputStream ins = new ByteArrayInputStream(content);
UnicodeInputStream uis = new UnicodeInputStream(ins, “UTF-8″);

Source str = new StreamSource(new InputStreamReader(uis, "UTF-8"));

InputStream vins = new ByteArrayInputStream(visualization);
UnicodeInputStream vuis = new UnicodeInputStream(vins,”UTF-8″);
Source xsl = new StreamSource(new InputStreamReader(vuis,”UTF-8″));

TransformerFactory transFact = TransformerFactory.newInstance();
Transformer trans = transFact.newTransformer(xsl);
trans.transform(str, fin);

I co my tu mamy. Content to zawartość naszego xml już w postaci bajtowej a visualization to xsl. Należy je przekształcić do typu Source aby można je było wykorzystać przy transformacie, którą wykonujemy na końcu i wynik mamy w fin.

Nie pamiętam bibliotek z których tutaj korzystałem ale jest kilka, które implementuje transformatę. Rzeczą na którą należy tu zwrócić uwagę jest klasa UnicodeInputStream. Ja korzystałem i lekko zmodyfikowałem tą klasę ale widziałem, że apache udostępnia własną klasę, która może być lepsza od tej przeze mnie używanej. Dzięki tej klasie możemy obejść problem z BOM. A czym jest BOM? Jest to kilka bajtów na początku pliku określających kodowanie. Niestety java go nie ignoruje i nie zanosi się na to aby zostało to rozwiązane. Tutaj z pomocą przychodzą na takie klasy jak UnicodeInputStream. Jak byśmy użyli standardowego InputStream to przy próbie transformaty otrzymalibyśmy błąd, że content is not allowed in prolog.

Panasonic lumix fz8 - opinia

Dawno temu zastanawiałem się jaki wybrać aparat. Po przeczytaniu kilku opinii, pobawieniu się canonem s3 mojego wujka, zdecydowałem się na czarnego panasonica fz8. I uważam to za dobry wybór.

W zestawie dostałem aparat, ładowarkę, akumulatorek, pasek, płytkę z jakimiś programami oraz książeczkowe instrukcje. Niestety nie było tam wersji po polsku tylko dodatkowa płytka z instrukcją po polsku. Od razu dokupiłem torbę i kartę.

Aparat jest bardzo lekki. Dobrze, że można nałożyć na niego tulipan (osłonę przeciwsłoneczną), która dodaje troszkę masy i wielkości. Obudowa wydaje się być wytrzymała i jest chropowata, co nie powinno spowodować wyśliźnięcia się aparatu z ręki. Lampa wyskakuje jak szalona.

Co do jakości zdjęć to wychodzą bardzo dobre w plenerze i przy niewielkim ISO. Co do zdjęć w pomieszczeniach i przy sztucznym świetle (oczywiście bez lampy), może przy użyciu statywu wychodziłyby w miarę. Pstrykania zdjęć w takich warunkach nie polecam.

Na pewno można polecić ten aparat początkującym fotoamatorom a i bardziej zaawansowani użytkownicy mogą być z niego zadowoleni. Mimo niewielkiego rozmiaru drzemią w Panasonicu - lumix fz8 bardzo duże możliwości. Sam z braku czasu nie poznałem go jeszcze do końca ale fotografowanie w trybie “P” daje troszkę możliwości konfiguracyjnych i zdjęcia wychodzą dobre.

A tutaj można znaleźć więcej moich zdjęć.

Logowanie sql w javie - log4jdbc

Zdecydowana większość pewnie słyszała o log4j, wiele osób też go używało i uważa za dobre narzędzie. Jednak co zrobić jak chcemy sprawdzić jakie operacje na bazie danych są wykonywane w naszej aplikacji a jeszcze lepiej ich czasy. Tutaj z pomocą przychodzi nam log4jdbc. Proste narzędzie, które pozwala nam logować informacje o zapytaniach, kwerendach i to dosyć szczegółowo.

W log4jdbc dostajemy 4 loggery:

  1. jdbc.sqlonly - najprostszy, pokazuje tylko zapytania SQL.
  2. jdbc.sqltiming - ukazane czasy wykonywania operacji, w większości przypadków ten jest wystarczający.
  3. jdbc.audit - wszystkie wywołania SQLowe oprócz ResultSet.
  4. jdbc.resultset - wszystko łącznie z ResulSet.

Całą konfigurację log4jdb możemy zdefiniować w pliku log4j.xml a tutaj znajduje się przykładowy plik log4j.xml z włączonym logowaniem zapytań do bazy danych.
Osobiście polecam takiego appendera

<appender name=”sql-timing-appender” class=”org.apache.log4j.RollingFileAppender”>
<param name=”File” value=”ścieżka_gdzie_zapisać_log/sql.log”/>
<param name=”Append” value=”true”/>
<param name=”Encoding” value=”UTF-8″/>
<param name=”MaxFileSize” value=”10000KB”/>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”—–> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n”/>
</layout>
</appender>

ponieważ możemy zdefiniować tutaj rozmiar logów a także plik za każdym razem będzie dopisywany do wcześniejszych logów a nie tworzony nowy.

Jak już mamy konfigurację zapisu to jeszcze potrzebujemy biblioteki. W pracy korzystałem z następujących (nie mogę tutaj wrzucić archiwów a na jakiś hostingu plików to zginie szybko, więc po nazwach będzie można je znaleźć) .

  • log4jdbc3-1.1beta
  • slf4j-api-1.4.3
  • slf4j-log4j12-1.4.3

Ostatnia rzeczą jaką wykonujemy jest zdefiniowanie połączenia z bazą danych na nowych ustawieniach. Zmieniamy sterownik na net.sf.log4jdbc.DriverSpy , który obsługuje najbardziej popularne bazy danych. Jeśli, którejś nam brak to zawsze możemy ustawić we właściwościach log4jdbc aby wskazywał na dany sterownik. A także zamieniamy stary adres lokalizacji bazy:
jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase na
jdbc:log4jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase


Po zakończeniu zbierania logów należy przywrócić poprzednie ustawienia połączenia z bazą, ponieważ na tym sterowniku baza danych chodzi dużo wolniej niż na natywnym, zaobserwowane na przykładzie sterownika posgresql

e-urzędy

Do napisania trochę o podpisie elektronicznym skłoniła mnie ta notka. Z racji tego, że w mojej pracy zastosowanie podpisu cyfrowego jest dosyć ważną kwestią, to pewne pojęcie o nim mam. Skupię się nie na wykorzystaniu podpisu cyfrowego przez przedsiębiorców a przez osoby fizyczne.

Chyba mało kto lubi załatwiać sprawy urzędowe. Nie rzadko trzeba stracić cały dzień na bieganiu od okienka do okienka, z jednego końca miasta na drugi o humorach urzędników nie wspominając. O ile wygodniej by było, jakby wszystkie takie sprawy można było załatwić przez internet. I oczywiście można takie coś zrobić w niektórych urzędach. Moja firma jest na etapie wdrożenia “Cyfrowych urzędów” do ponad 100 urzędów w jednym województwie, kolejna 100 w innym województwie będzie zinformatyzowana w najbliższym czasie oraz jeszcze w tym roku co najmniej 2 kolejne województwa. Można powiedzieć, że w 25% województw można będzie załatwić sprawy urzędowe przez internet. Do tego dodać cyfrowe urzędy wytworzone przez inne firmy, więc sytuacja wcale nie jest zła z e-urzędami.

Ale co to ma wspólnego z podpisem cyfrowym. Jak składamy wniosek, to dobrze byłoby go w jakiś sposób podpisać. Jeśli wydaliśmy te kilkaset złotych na podpis to możemy go dołączyć do wniosku. Wtedy jest on traktowany tak samo jak wniosek z odręcznym podpisem. A co jeśli nie mamy podpisu cyfrowego. To też nie jest wtedy problem, bo mamy 2 wyjścia. Jednym z nich jest podpisanie wniosku podpisem udostępnionym przez cyfrowy urząd. Taki podpis można porównać do zalakowanej koperty z pieczęcią z wosku, jakie się nieraz widzi na filmach. Wniosek jest ważny ale czasem urząd będzie mógł nas sprawdzić telefonicznie. Jednak zawsze możemy również złożyć wniosek bez żadnego podpisu ale wtedy powinniśmy się na 99% spodziewać telefonu od urzędnika. Na pewno nie tracimy dnia na załatwienie spraw urzędowych.

W urzędzie dostajemy urzędowe poświadczenie odbioru - upo. W elektronicznym też dostaniemy takie coś i może ono być generowane przez HSM i zostanie ono przesłane na nasze konto w cyfrowym urzędzie. Od maja tego roku zmienia się prawo i będzie istniało coś takiego jak urzędowe poświadczenie doręczenia - upd, które interesant będzie musiał potwierdzić. Oczywiście wszystko drogą elektroniczną. Nie ma co do tego jakiś standardów, ale najprawdopodobniej w urzędach gdzie wdrożenia miała moja firma, będzie to wyglądało w następujący sposób, że urząd wyśle informację o rozpatrzeniu sprawy, interesant potwierdzi przyjęcie przez kliknięcie, poleci informacja do urzędu i wtedy zostanie zwrócone właściwe upd. To jest na razie na etapie planowania.

nokia 1600 - opinia

Posiadam ten telefon już dwa lata, więc mogę go jakoś ocenić i może ta opinia się komuś przyda. Od razu zaznacza, że mam wymagania co do telefonu całkiem inne od większości ludzi. Dla mnie telefon powinien dzwonić i mieć możliwość wysyłania i odbierania sms. Nie są mi potrzebne żadne mp3, aparaty jak te rzeczy mogę mieć. O aparacie napiszę kiedyś.

Nokia 1600 to był mój pierwszy telefon i jak go kupowałem to nie miałem żadnego pojęcia o telefonach, prócz tego że nokie to dobre telefony. Pierwszą zaletą tej nokii jest jej prostota. Dla kogoś, kto nie miał wcześniej żadnego telefonu jego opanowanie nie zajmie dużo czasu. Kolejnym plusem jest ergonomia użytkowania. Telefon leży mi idealnie w ręce a klawisze są miękkie i bardzo dobrze się je naciska. Obudowa wydaje się niezbyt mocna ale to tylko pozory. Nokia 1600 kilka razy mi spadła na ziemię ale nie wywarło to na nią żadnego wpływu. Za największą zaletę tego telefonu uznaję jego baterię. Przy niewielkim używaniu bez ładowania wytrzymywał 12-14 dni. Przy dużym wykorzystaniu, tak jak w ostatnim okresie przeze mnie, bateria również trzymała długo bo 6-8 dni.

Niestety nie ma róży bez kolców i nokia 1600 także posiada wady. Pierwszą, która pojawiała się od samego początku było zawieszanie się telefonu raz na jakieś 3-4 tygodnie. Pomagało wyciągnięcie baterii i ponowne jej włożenie. Zauważyłem, że wyłączenie raz na jakiś czas telefonu i po chwili go włączenie likwidowało tą wadę. Usterka niezbyt uciążliwa jak dla mnie.
Po półtora roku użytkowania kilka razy pojawił się błąd, może 5 razy, który poważnie mnie zaniepokoił. Było to zgubienie zasięgu, w miejscach w których zawsze wcześniej był oraz później też. Pomagało na to zmiana na ręczny wybór sieci i z powrotem na automatyczny. Myślę, że może powodem tego błędu mogło być zbyt duże natężenie odbiorników i hotspotów na niewielkim obszarze i przez to antena głupiała. Ostania wada jaka mi się pojawiła jakiś miesiąc temu, to samoczynne wyłączanie się telefonu co kilka dni i to już było uciążliwe. Jednak tym się za bardzo nie przejąłem, bo wtedy byłem w okresie kupowania nowego telefonu nokia 6021.

Polecam nokię 1600 każdemu kto w telefonie ceni prostotę, nie goni za telefonem, który potrafi wszystko zrobić i ma w sobie cała masę innych rzeczy. Również ta nokia jest idealna dla kogoś, kto nigdy wcześniej nie używał komórki.

Podsumowanie roku

Dawno nie pisałem nic bo niestety w firmie terminy goniły a nie miałem czasu, siły aby coś napisać. Teraz zrobię trochę ekshibicjonizmu (pewien eksperyment) i trochę późne ale jednak podsumowanie roku.

Zeszły rok był chyba najważniejszy, jak na razie, w moim życiu. Jaka zmiana nastąpiła w moim życiu niech świadczy fakt, że rok przywitałem w całkiem innym towarzystwie i całkiem innym miejscy niż go pożegnałem. Ale do rzeczy.

Pierwsza połowa roku upłynęła mi napisaniu pracy dyplomowej. Najciekawsze w tym jest to, że nie mając zielonego pojęcia o javie, tą pracę pisałem z wykorzystaniem jee. Z perspektywy czasu nie żałuję tego wyboru ale na pewno napisałbym tą pracę w tej chwili inaczej i więcej rzeczy bym wykorzystał (hibernate, jsf, gwt… może nic z tego albo coś całkiem innego). Jeśli mi czas pozwoli i nie będę miał natłoku innych zajęć, to może to napiszę. Przy okazji nie wyobrażam sobie abym mógł programować w c, c++ i ewentualnie php.

Ciekawym miesięcznym epizodem była praktyka i ludzie których tam poznałem. Może pod względem czysto informatycznym zbyt wiele sie nie dowiedziałem, oprócz opanowania do perfekcji instalacji windowsa (koło 15 razy) ale parę rzeczy się dowiedziałem i nie zaciekawiły. Poznałem tam wspaniałe narzędzie, które może uratować nasz system - hirens’s bootCD, miałem styczność i mogłem się trochę pobawić systemem SCADA, od którego poprawnego działania był zależna większość mieszkańców Tarnowa.

Również w tym półroczu zakończyłem ostatecznie swój związek. Mimo tego, że były próby tego ratowania już wcześniej ale czasem pewne słowa zadają większe rany niż ostrza. Tak uważam, że to trwało zbyt długo. Było, minęło i znowu odzyskałem szczęście o czym za chwilę.

Nadszedł czerwiec, praca dyplomowa już napisana i czas na obronę. Zawsze mówiłem, że na początku był chaos a później powstała moja uczelnia. Cała obrona była zorganizowana na wariackich papierach od momentu zdania pracy do instytutu, gdzie był tylko tydzień do obrony, po nie poinformowanie promotora o terminie obrony i przydzielenia na zastępstwa, kogoś kto wykładał na całkiem innym kierunku i o jego przedmiocie mieliśmy tylko wspomniane w kilku zdaniach. Przez cztery lata do różnych dziwnych rzeczy sie przyzwyczaiłem, więc jakiegoś większego wrażenia to na mnie nie zrobiło. Sama obrona minęła dosyć spokojnie i oczywiście pozytywnie. Jednak uścisk dłoni najbardziej zakręconego Profesora z jakim miałem styczność ale jednocześnie prawdziwego pasjonata pozostanie w pamięci. Celowo napisałem profesora przez duże P bo zasługuje on jak najbardziej na ten tytuł.

Nadeszło lato, można powiedzieć takie ostanie beztroskie, studenckie, dziecięce wakacje. Podczas nich nigdzie się nie śpieszyłem, leniłem, dobrze się bawiłem. Czas sielanki, która już się nie powtórzy.<ekshibicjonizm mode on>Również w lipcu poznałem pewną cudowną i wspaniałą dziewczynę, z którą czuje się jak w niebie, z którą mogę rozmawiać o wszystkim i tematy są jak rzeka, nigdy się nie kończą, z którą znowu poczułem się szczęśliwy i którą mocno pokochałem. Jeśli to kochanie kiedykolwiek przeczytasz, dzięki, że jesteś.</ekshibicjonizm mode off> Także w lecie zaczęło się powolne myślenie o przyszłości, co mi los przyniesie i do którego miasta mnie rzuci, bo na 90% było pewne, że nie zostanę w Tarnowie.

Właśnie od września wylądowałem w Krakowie o czym była już notka jak się tu znalazłem. Więc teraz moje życie wygląda tak praca-mieszkanie, czasem gdzieś wyjdę a w weekendy spotkania z moim kochaniem. Nie narzekam na nic tylko mam nadzieję, że ten rok będzie również udany jak poprzedni.

Webservice - krótki wstęp

Do niedawna nie miałem pojęcia o webservice’ach, wiedziałem że takie coś istnieje ale jak działa to była czarna magia. Ale teraz mogę się stać ekspertem z racji tego, że w pracy jeden projekt jest prawie skończony oparty na nich (implementacja klienta) i drugi też będę robił (strona serwera).

Czym są webservicy, jak sama nazwa wskazuje są to usługi sieciowe i dzielą się jak wspomniałem wyżej na implementację po stronie klienta i po stronie serwera. Aby wygenerować webserice jest potrzebny plik wsdl. Ma on strukturę xmlową i kilka chyba obowiązkowych węzłów:

  • types
  • message
  • portType
  • binding
  • service

Aby wygenerować usługę lub klienta z wsdla moża użyć wbudowanego kreatora w eclipsie bądź skorzystać z narzędzia dostarczanego przez fundację apache w ich własnej implementacji ws Axis2 - wsdl2java. Osobiście nie polecam wizarda w eclipsie ponieważ jego działanie nie jest zbyt stabilne i trochę trzeba się namęczy. Wsdl2java i java2wsdl są prostymi konsolowymi aplikacjami o prostej składni. Również z kodu javy można wygenerować wsdl.

Zacznijmy może od usługi. Po wygenerowaniu w eclipsie usługi dostajemy kilka plików. W głównej mierze są to interfejsy, implementacje jakiś naszych typów zadeklarowanych w wsdl ale nas najbardziej będzie interesował plik z końcówką Impl od implementation. Są w nim metody naszego webservicu, które nie posiadają implementacji tylko zwracają jakieś wartości. Naszym zadaniem jest obudowanie ich i sprawienie aby wykonywały to co jest w założeniach projektu.

Strona klienta jest jeszcze prostsza. Szukamy w wygenerowanych plikach, jednego w którym nazwa zawiera słowo Locator. To się tyczy Axis 1. Tworzymy nową instancję tej klasy i poprzez tego lokatora łączymy się z ws. Pozostaje nam tylko wywołać metody z odpowiednimi parametrami chyba, że chcemy jakoś wykorzystać wartości zwracane przez te metody to wtedy tworzymy odpowiedni kod.

Trudny wybór - aparat

Już dawno chodziła mi po głowie myśl kupna cyfrówki. Początkowo chciałem coś niedrogiego w granicach 500 złotych, bez żadnej sprecyzowanej firmy. Jednak zwlekałem z zakupem ale że mikołaj za niedługo to sobie sprawię taki prezent.

Początkowo spodobał mi się canon s3. Niedawno kupił go sobie mój wujek i przypadł mi do gustu. Więc się zacząłem zastanawiać nad nim i nowszym modelem canon s5. Po przeglądnięciu i wysłuchaniu opinii o nich zostałem przy s3. Ale wtedy przypadkowo pojawił się na moim horyzoncie Panasonic- Lumix fz8. Aparat bardzo zbliżony do canona s3, w niektórych elementach lepszy a w niektórych gorszych, więc wybór był dosyć cieżki. Minimalnie ale jednak dalej mi podchodził canon s3, chociaż lumix był tańszy o jakieś 100-150 złotych. Właśnie dziś zobaczyłem, cena panasonica fz8 została obniżona i ta różnica wynosi teraz prawie 350 złotych. Za tak zbliżone aparaty to ta cena może mieć decydujące znaczenie.

Jeśli została obniżona cena powyższego panasonica to może też panasonic fz18 będzie tańszy. Nawet jak jego cena będzie zbliżona do canona s3, a jest to bardzo możliwe, może nawet tańszy, to wtedy raczej go wybiorę. Żeby nie było tak kolorowo to kolejny podobny aparat do canona s3 i lumixa fz8 - olympus sp550. Może nie brałem go jakoś bardziej pod uwagę ale też aparat ciekawy i dosyć korzystna cena.

Najprawdopodobniej w przyszłym tygodniu będę miał jeden z tych aparatów chyba, że jeszcze zmienię zdanie i trafi mi się coś innego.

O moim zakupie

Ojciec chrzestny - scena chrztu

Notka trochę napisana z opóźnieniem ale w końcu się pojawia.

Sobotę spędziłem miło z moim skarbem i  po tym udało mi się w nocy trafić na końcówkę “Ojca chrzestnego. Nawet nie wiedziałem, że będzie. Tak to jest jak się nie ogląda w ogóle tv ani nie czyta programu. Ale wracając do rzeczy, pod koniec filmu jest scena chrztu, gdzie Michael Corleone jest ojcem chrzestnym syna swojej siostry. To jest jedna z moich ulubionych scen tego filmu. A co w niej jest takiego ciekawego, to dobro, które jest tylko maską zła. Michael, który początkowo jest dobry i nie wchodzi w interesy rodziny, właśnie w tej scenie pokazuje swoją prawdziwą twarz. Z jednej strony wyznanie wiary i słowa przyszłego dona, że wyrzeka się grzechu i szatana a w tym samym czasie następuje egzekucja wrogów Rodziny.

Jak dla mnie mistrzostwo, z jednej strony chrzest - kojarzący się z czymś dobrym a z drugiej wielokrotne morderstwo. Szkoda, że jest tak mało scen w filmach, zrobionych w podobny sposób.

Dodawanie certyfikatów w javie

Czasem jak korzystamy z klienta webservicu to potrzebujemy dodać certyfikat danej strony do aplikacji. O ile w przeglądarce zaakceptowanie certyfikatu jest proste i sprowadza się do paru kliknięć, to w aplikacji może to być trochę utrudnione.

Należy dodać certyfikat do listy certyfikatów w systemie ale jak to zrobić. Jest kilka sposobów aby to wykonać ale nie sprawdzałem ich dokładnie tylko skorzystałem ze sposobu opisanego tuta . Ta możliwość jest bardzo prosta do dodania pożądanego przez nas certyfikatu.

Ściągamy ten kod i kompilujemy go. Później uruchamiamy w konsoli skompilowany program z parametrem, gdzie tym parametrem jest nazwa hosta strony gdzie jest certyfikat. Musi on być bez żadnego http:// ani tym podobnych ani żadnych slashy na końcu. Po uruchomieniu z tym parametrem zostanie wypisany wyjątek, że nie można odnaleźć certyfikatu a także treść certyfikatu ze strony z możliwością dodania go do zaufanych certyfikatów. W katalogu gdzie jest nasz skompilowany program tworzy się plik “jssecacerts”, który zawiera zaufane certyfikaty z pliku cacerts oraz nasz nowy certyfikat. Można tamten plik podmienić tym naszym ale moim zdaniem lepiej tego nie robić. Ostatnią rzeczą jaką musimy zrobić jest w wpisanie w kodzie w miejscu gdzie łączymy się ze stroną z certyfikatem takiego fragmentu

System.setProperty(”javax.net.ssl.truststore”, “sciezka/do/pliku/jssecacerts”);