piątek, 27 sierpnia 2010

Kolorowanie składni Javy w systemie LaTeX

Dzisiaj opiszę trochę o środowisku lstlisting w systemie składu tekstu LaTeX. Czemu chcę o tym napisać? Ponieważ ten temat do mnie co chwile wraca. Nie wystarcza mi raz skonfigurowane i użyte środowisko, tylko co jakiś czas musze coś w nim zmodyfikować i wykorzystać gdzieś indziej. Innymi słowy chciałbym sobie zrobić małą ściągawkę na blogu, dotyczącą tego pakietu, bo ciągłe przeszukiwanie dokumentacji - co znaczą poszczególne opcje - zaczęło mnie już irytować.

Chcąc ładnie wyświetlić kod w naszym dokumencie, składanym przy użyciu systemu LaTeX, musimy dołączyć w preambule pakiet listings. Najczęściej zaraz pod nim następuje konfiguracja pakietu:



Następnie będzie można już korzystać z prostego otoczenia do wstawiania kodu:



W nawiasach kwadratowych można przedefiniować niektóre ustawienia dostępne w lstset, dodać etykietę i treść podpisu. Zmiany te będą aktywne dla danego listingu kodu.

Odmiennym sposobem wstawienia kodu może być dołączenie go bezpośrednio z pliku zewnętrznego:



I tutaj w nawiasach kwadratowych można przedefiniować odpowiednie parametry.

Poniżej najważniejsze i najciekawsze parametry lstset:

language - Wybór języka programowania z którego korzystamy. W przypadku Javy mamy dostępny dialekt AspectJ, który możemy użyć następująco: language=[AspectJ]Java.
basicstyle - Ogólny styl kodu, np. \footnotesize \small \scriptsize itp. Gdzieś wyczytałem / usłyszałem, że kod powinien być trochę mniejszą czcionką pisany od reszty tekstu.
aboveskip - Odstęp nad kodem.
belowskip - Odstęp pod kodem.
showspaces - Wyświetlanie znaku spacji (jako pokreślenie). Domyślnie wyłączone.
showstringspaces - Wyświetlanie znaku spacji (jako pokreślenie) ale w tekstach (Stringach). Domyślnie włączone, więc warto ustawić na false.
showtabs - Wyświetlanie znaku pokreślenia w miejscach występowania tabulatora.
tab - Możemy zdefiniować, co będzie wyświetlane jako znak tabulacji. Wymaga showtabs=true.
prebreak - Wyświetlanie znaku na końcu linii tekstu, która musi być złamana.
postbreak - Wyświetlanie znaku na początku linii, która została złamana.
breakindent - Wielkość wcięcia złamanej linii.
frame - Ramka dookoła listingu. Możliwe wartości: none, leftline, topline, bottomline, lines(linia na dole i górze) , single (pojedyncza ramka), shadowbox (ramka z cieniem).
identifierstyle - Styl identyfikatorów (zmiennych).
commentstyle - Styl komentarzy.
stringstyle - Styl napisów.
keywordstyle - Styl słów kluczowych.
numbers - Położenie numerów linii. Możliwe wartości: none, left, right.
stepnumber - O ile linijek ma się wyświetlać numer linii. Domyślnie 1.
numberstyle - Styl numerków.
numberblanklines - Jeśli false to puste linie nie mają numerków, domyślnie true.
numbersep - Odległość między numerem a listingiem.
captionpos - Pozycja podpisu listingu. Możliwe wartości t (top) i/lub (bottom).
gobble - Liczba początkowych znaków w kodzie, która ma być ignorowana. Tzn. jak wklejamy kod, który zawsze się zaczyna od dwóch spacji, to możemy je, za pomocą tego parametru, zignorować
escapeinside - Definiuje znaki pomiędzy którymi, można wstawić dodatkowy komentarz wewnątrz kodu. Użyte w ten sposób: escapeinside="" powodowało mi kiedyś, że nie chciał odpowiednio cudzysłowów wyświetlać.

Czasami użycie niektórych parametrów może wymagać dołączenia dodatkowych pakietów przed definicją.

Poniżej zamieszczam przykładowy kod który będę próbował ładnie wyświetlić:



Dobra teraz pokażę kilka konkretnych przykładów zastosowania tego co dotychczas opisałem. Na początek ustawienia zaproponowane przez mojego przyjaciela Tomka:



A oto efekt:

No kod został bardzo ładnie pomalowany. Wszystkie słowa kluczowe zostały ładnie wyłapane i pomalowane na niebiesko. Komentarze również zostały ładnie wyróżnione niezależnie od tego w jaki sposób zostały zadeklarowane. Podpis rysunku uzyskano przy pomocy dodatkowego parametru dla danego listingu:



Jakby się przyjrzeć bardziej temu listingowi to można jednak zobaczyć mały mankament. Otóż długa linijka tekstu została automatycznie złamana przez system składu. Spowodowało to jednak to, że obramowanie pomiędzy liniami 11 a 12 zmieniło kolor na kolor tekstu. Nie wiem czym to jest dokładniej spowodowane, ale podejrzewam komendę \raisebox użytą przy prebreak. Jak ktoś wie skąd to się bierze, to chętnie poznam rozwiązanie. Niby można wyłączyć łamanie linii za pomocą breaklines=false ale to spowoduje, że tekst wyjdzie po za obszar ramki.

Jak dla mnie ustawienia te nie są idealne. W swojej pracy magisterskiej zrezygnuję z ramki i kolorów. Dlaczego? Gdyż będę musiał wtedy część stron wydrukować na kolorowej drukarce a takiej nie posiadam. Może to spowodować, że marginesy stron pochodzących z różnych źródeł, nie będą dokładnie do siebie pasowały (z powodu innych obszarów drukowania w różnych drukarkach). Dlatego wolę uniknąć kolorowych stron w swojej pracy.

Poniżej zamieszczam mój zestaw ustawień:



Dają one następujący efekt:


Już nie wygląda tak ładnie, ale nie jest też tragicznie. Można się dziwić czemu nie wyrzuciłem z kodu definicji keywordstyle, commentstyle i stringstyle tylko ustawiłem w nich kolor na czarny? A no po to, aby krój czcionki mi się nie zmienił :)

Dobra teraz chciałbym pokazać takie ustawienia, aby składnia kodu wyglądała tak jak w NetBeans’ie:



Efekt poniżej:

Nie jest to do końca tak jak bym sobie tego życzył. NetBeans dodatkowo nazwę klasy i metody testSetId wyświetla czcionką pogrubioną. A metoda assertEquals jest czcionką pochyloną pisana, ze względu że jest to metoda statyczna. Szukałem sposobu w jaki to zrobić, ale lstlisting po za słowami kluczowymi, komentarzami i string’ami nic więcej nie rozróżnia…

Ale można, jakby dodefiniować nowe słowa kluczowe i zastosować dla nich oddzielny styl. Z tym że jeśli chodzi o nazwy klas i metod, to warto te ustawienia jednorazowo dla konkretnego listingu stosować. Przykład poniżej:



Efekt poniżej:


Uff udało się. Nazwa klasy i metody są już pisane pogrubioną czcionką. Również metoda assertEquals zaczęła być wyświetlana kursywą. A co ja takiego zrobiłem? Najpierw zdefiniowałem nowy classoffset o numerze 1. Następnie zdecydowałem jakie słowa kluczowe należą do tego zestawu (morekeywords) i jak mają wyglądać (keywordstyle). Następnie czynność powtórzyłem dla assertEquals nadając jej inny styl. Może da się to jakoś bardziej uniwersalnie zrobić, ale tego już nie wiem.

Na koniec podam jeszcze kilka ciekawych sztuczek. Gdybyśmy chcieli zmienić numerowanie linii musimy przedefiniować polecenie \thelstnumber. Np. chcąc wyświetlać dwukropek po numerze linii musimy po definicji \lstset dodać poniższą linijkę:



Chcąc zrobić np. na końcu dokumentu spis wszystkich listingów użytych w dokumencie wystarczy wydać komendę:



Aby zmienić nagłówek dodawany przez to polecenie piszemy w preambule:



Chcąc zmienić nazwę Listing dokładaną do każdego listingu możemy zastosować nastepującą instrukcję w preambule:



I jeszcze numerowanie listingów. Chcąc je numerować według numeru rozdziału i numeru który to rysunek w danym rozdziale piszemy (najlepiej w jednej linijce):



Definicję tę umieszczamy za \begin{document}! Dodatkowo trzeba przedefiniować section (w premabule):



Co ciekawsze jak kilka razy w ramach \lstset zdefiniujemy pewne wartości to zostaną wybrane te położone dalej. Dlatego czasem jak nam nie chcą działać pewne zmiany to sprawdźmy czy nie mamy duplikatów. Ja trochę czasu w ten sposób straciłem.

Ponadto trzeba kolejne ustawienia wartości rozdzielać przecinkiem (nie stawiamy go po ostatnim parametrze). Inaczej nie wszystkie parametry zostaną dobrze skwalifikowane. Podobnie możemy mieć ustawione parametry które nie istnieją, a kod i tak się będzie kompilował :)

I jeszcze uwaga jeśli chodzi o umieszczanie listingów kodu na prezentacjach z użyciem pakietu beamer. Musimy zezwolić na „złamanie” slajdu, gdyby kod się nie zmieścił na jednym. Inaczej dostaniemy błąd: Paragraph ended before \lst@next was complete. Pozbywamy się tego za pomocą:



Powinniśmy jednak unikać kilkustronicowych listingów kodu na slajdach prezentacji, gdyż nie należy to do sztuki tworzenia dobrych prezentacji. Zmniejszenie czcionki kodu może zwiększyć liczbę kodu jaki możemy przedstawić, ale stanie się on mniej czytelny. Zresztą komu chce się analizować kilkustronicowy kod na prezentacjach?

Użycie allowframebreaks powoduje jednak, że w górnej części slajdu w tytule będzie na końcu wyświetlana cyfra rzymska mówiąca który to slajd z kodem. Nawet jak będziemy tworzyć jednoslajdowe listingi to i tak otrzymamy brzydką jedynkę rzymską w tytule. Aby się tego pozbyć należy w preambule dokumentu dodać linijkę:



Od teraz już nasze listingi kodu, czy to w dokumentach, czy w prezentacjach będą wyglądać profesjonalnie:)

czwartek, 26 sierpnia 2010

Wrażenia po 8th Students’ Science Conference

Wróciłem właśnie z Ósmej Konferencji Naukowej Studentów. Moje przygotowania opisywałem na blogu kilka dni temu wpisem: Przygotowania do Konferencji Naukowej Studentów. Dzisiaj opiszę jak poszło.

Była to dla mnie wyjątkowa konferencja, ponieważ podczas niej przeprowadziłem swoją pierwszą prezentację w języku angielskim. Na miejsce dojechałem przygotowanym do tego autobusem. Znalazłem w nim kilka znajomych osób, inne zapoznałem, więc podróż minęła w miarę szybko. Na miejscu była rejestracja uczestników, torba z materiałami konferencyjnymi i przydział do pokojów. O 13.00 był obiad, o 15.00 rozpoczęcie oficjalne konferencji i chwile po 16.20 rozpocząłem swoją prezentację.

Zgodnie z tym co wcześniej juz mówiłem, miałem przygotowaną twardą podkładkę i tekst swojej prezentacji. Zostałem wyczytany przez prowadzących konferencję, wyszedłem na środek i zacząłem mówić.

Powiedziałem na początku, że jest to moja pierwsza publiczna prezentacja w języku angielskim, dlatego będę się posiłkował kartką. Trochę nie fajnie było, że musiałem się co chwila obracać się aby zmienić slajd, ale wydało mi się to lepsze niż pokazywanie człowiekowi obsługującemu komputer, kiedy ma przełączyć slajd. Na kolejnych prezentacjach jednak widziałem, że taki mechanizm się w miarę sprawdzał.

Prezentację wygłosiłem zgodnie z zaplanowanym czasem i później był czas na pytania. Trafiło mi się, że na sali był doktor, który zajmował się podobnym do mojego problemem i zasypał mnie gradem pytań - oczywiście po angielsku. Już w pewnym momencie nie wiedziałem czego on ode mnie oczekuje, więc starałem się cokolwiek odpowiedzieć, byle już to zakończyć. Po mojej prezentacji pozostałem na sali i słuchałem kolejnych prezentacji z danej sesji. W końcu mogłem odetchnąć. Znajomi mówili mi, że całkiem dobrze wypadłem i prawie nie zaglądałem w kartkę.

Po zakończeniu danej sesji podszedłem do tego doktora, który mnie męczył pytaniami aby wyjaśnić pewne sprawy. Rozmawialiśmy długi czas - na szczęście juz po polsku - i miał wiele uwag do mnie.

Po pierwsze problem który przedstawiałem - mechanizm automatycznej migracji danych z bazy relacyjnej do obiektowej - jest juz problemem znanym, starym i że właściwie nic odkrywczego, specjalnego w swoim artykule nie zrobiłem. To że nie było żadnego podobnego rozwiązania, wykorzystującego db4o nie znaczy wcale, że należy się tym zajmować. Dla mnie była to część magisterki, a głównym motorem napędowym tworzenia artykułu i prezentacji była darmowa wycieczka na Węgry. Zresztą wiele osób, z którymi rozmawiałem twierdziła podobnie.

Po drugie to na konferencje naukowe przygotowuje się artykuły, które muszą na prawdę wnosić coś nowego. Artykuły te wcześniej przechodzą przez recenzentów i każdy musi wystawić pozytywną opinię. Inaczej są odrzucane. Nasze artykuły również pewną recenzję przechodziły, ale nie było takiego sita. Ze 109 przysłanych nadesłanych artykułów doliczyłem się ponad 80 w książce z publikacjami. Artykuł powinien więc być czymś nowym. Tam gdzie kilka innych artykułów się kończy tam dopiero powinna zaczynać się twoja praca - twój artykuł.

Po trzecie powinno się rozwiązywać projekty praktyczne. To znaczy, że nie powinniśmy sami sobie wymyślać problemów do rozwiązania, aby mieć przyjemność i satysfakcję z tego, tylko powinniśmy rozwiązywać problemy praktyczne. To znaczy, takie problemy które najlepiej są zlecone przez przemysł, lub tworzą zupełnie coś nowego. Jednak takimi problemami to się zajmują doktoranci i doktorzy. My biedni studenci zazwyczaj nie dostajemy nie wiadomo jakich wyszukanych, trudnych problemów na magisterkę, bo wtedy nikt by się nie obronił w terminie. No i niestety czasami musimy rozwiązywać problemy, które niekoniecznie mają jakieś zastosowanie w rzeczywistości.

No trudno. Mimo wielu tych uwag nie załamałem się jakoś szczególnie. Najważniejsze z tego wszystkiego jest, aby wynieść jakąś naukę na przyszłość.

No dobra to tyle jeśli chodzi o początek konferencji i moje wystąpienie. Później słuchałem wystąpień innych. Pewien Węgier zrobił jakby GuitarHero ale dla prawdziwej gitary basowej. To znaczy pomiędzy gitarę a wzmacniacz podłączył swoje urządzenie, które na połowie ekranu wyświetlało jakie nuty należy grać, a obok w jakim stopniu nam to wychodzi, na podstawie przechwyconego sygnału z gitary. Ciekawy projekt, tyle że dotychczas był testowany przez autora i jego ojca :)

Wieczorem po kolacji był czas wolny. Oczywiście trzeba było się zrelaksować po ciężkim dniu. Zaczęła się więc swoista integracja ludzi i konsumpcja napojów nieodłącznie towarzyszących studentom. Udało się zorganizować muzykę i nagłośnienie w jednej ze sal konferencyjnych, czego mi trochę brakowało w kolejnych dniach.

Następnego dnia po śniadaniu byłem na kilku wystąpieniach znajomych osób. Później jednak poszedłem z Marcinem szukać bankomatu w mieście i zjechać dwa razy na zjeżdżalnii Alpine Coaster.

Po powrocie do ośrodka był obiad i wykład gościa – profesora fizyki z Politechniki Wrocławskiej – na temat najważniejszej liczby we wszechświecie. I nie chodzi o to: the answer to life, the universe and everything. Następnie kilka wystąpień wysłuchałem i trochę postanowiłem odpocząć. Wieczorem był czas wolny i wszyscy już byli po swoich wystąpieniach, więc można było się zrelaksować.

Trzeciego dnia konferencji był wyjazd do Liberca w Czechach. Nie było zorganizowanych żadnych przewodników ani innych szczątkowych informacji co właściwie można tam zobaczyć. Najpierw wiec większość wycieczki poszła na rynek. Poniżej zdjęcie ratusza autorstwa Marka.


Na rynku się rozeszliśmy w różne kierunki. Ja szedłem z małą grupką osób, ot tak przed siebie zobaczyć co jest za rogiem. W ten sposób zaszliśmy pod budynek muzeum. Jako że wstęp kosztował tylko 20 koron postanowiliśmy zwiedzić to miejsce. Nie było to żadne tematyczne muzeum tylko takie ogólne, ale w bardzo ładnym budynku. Najbardziej zapamiętałem zbroję w rozmiarze dla dziecka w wieku około 2 lat. Na koniec pamiętna sesja zdjęciowa pod budynkiem. Zdjęcie z aparatu Sylwii.


Później zakupy w miejscowym Tesco i powrót do ośrodka. Wieczorem było zakończenie i podsumowanie konferencji. Wręczono wyróżnienia i nagrody za najlepsze wystąpienia. Wieczorem było ognisko z dużą porcją jedzenia. Tylko gitary trochę brakowało.

Na następny dzień był przewidziany powrót do domu. Ja nie jechałem do samego Wrocławia, a jedynie do Jeleniej Góry, by później jechać do Kamiennej Góry. Na szczęście jedna osoba z konferencji jechała do Krzeszowa (jeszcze za kamienną) więc miałem z kim gadać w tym czasie jeszcze.

Ogółem jestem zadowolony, że wziąłem w tej konferencji udział. Zobaczyłem jak bardzo się różną od siebie konferencje np. Javowe od naukowych. Byłem zaskoczony, że ludzie się interesowali prezentacjami innych uczestników. Dużo rozmawiali po wystąpieniach i w przerwach kawowych. Sam się zainteresowałem kilkoma wystąpieniami i trochę podyskutowałem z autorami. Mimo kilku niedociągnięć uważam konferencję za udaną. Szkoda trochę że kończę już studia, chociaż kto wie co nam życie jeszcze zgotuje.

sobota, 21 sierpnia 2010

Przygotowania do Konferencji Naukowej Studentów

Dzisiaj będzie trochę nietechnicznie. To znaczy nie będę opisywał żadnej technologii tylko opowiem o moich nastrojach przed Konferencja Naukową Studentów (KNS). Ale zacznijmy od początku.

Czym jest ta konferencja? A no jest to konferencja naukowa organizowana przez Politechnikę Wrocławską dla studentów. Zazwyczaj konferencje naukowe są organizowane dla pracowników naukowych (doktorów, profesorów). Piszą oni wcześniej artykuł, który następnie przedstawiają na danej konferencji. Artykuły dotyczą zagadnień nad którymi aktualnie pracują i temat musi jakoś być powiązany z tematem konferencji. Uczestnicy przedstawiają więc swoje osiągnięcia i wymieniają się wiedzą podczas rozmowy w przerwach między wystąpieniami. Ponadto chcąc się wspinać w górę po drabinie kariery naukowej trzeba mieś jakieś tam / ileś tam publikacji naukowych.

Konferencja Naukowa Studentów jest tego typu konferencją, ale przygotowaną dla studentów. Aby ambitniejsi, lub tacy co wybierają się na doktorat, mogli mieć już w swoim dorobku coś co jest liczone jako publikacja naukowa.

W tym roku po raz pierwszy konferencja miała być przygotowana we współpracy z Óbuda University w Budapeszcie. Czyli polscy i węgierscy studenci mieli się wymieniać wiedzą i doświadczeniem. Aby wziąć udział w konferencji należało przygotować artykuł naukowy na 6 stron maks. Była ustalona formatka (czcionka, odstępy itp.) i marginesy były takie duże że nie było ciężko napisać taki artykuł. Jako że konferencja jest międzynarodowa należało przygotować artykuł w języku angielskim. Niby jakaś opłata miała być za udział w konferencji, ale zazwyczaj można sobie załatwić dofinansowanie z uczelni na taki wyjazd. Dla polskich studentów był też przewidziany autobus jadący z Polski na Budapesztu wliczony w cenę konferencji.

Tak wiec widmo niemal darmowej wycieczki na Węgry okazał się bardzo motywujący dla mnie do wzięcia udziału w tej konferencji. Nie zraził mnie angielskojęzyczny charakter konferencji, ani konieczność przygotowania wystąpienia w celu zaprezentowania artykułu. A wystąpienia publiczne mi się jakiś czas temu bardzo spodobały. Uznałem więc, że to będzie kolejne wyzwanie dla mnie.

O czym zrobiłem artykuł? A no opisałem pewien fragment tego co robie w ramach pracy magisterskiej. Wysłałem artykuł do organizatorów w wyznaczonym czasie i czekałem na rozwój sytuacji.

Po jakimś czasie dostałem wiadomość od organizatorów, że zgłoszono 109 artykułów. 102 były z Polski i 7 z Węgier. Komitet organizacyjny podjął wiec decyzję, aby konferencję zrobić w Polsce w Szklarskiej Porębie. Nie jest to to samo co Budapeszt, no ale trudno się mówi. Charakter konferencji ma być jednak zachowany, więc wystąpienie po angielsku dalej jest aktualne. Udało się załatwić dofinansowanie z uczelni aby pojechać na konferencję, więc dobra - jadę.

Konferencja zaczyna się w poniedziałek (23.08.2010). Prezentację już jakiś czas temu przygotowałem. Przykładam dużą wagę do swoich wystąpień publicznych i uważam, że odpowiednio wcześniej przygotowana prezentacja to podstawa sukcesu wystąpienia. Kilkukrotne jej przejrzenie w ciągu kilku dni, już powoli układa odpowiednie zdania w głowie, co należy przy którym slajdzie powiedzieć.

Jako że nie jestem specjalistą z języka angielskiego przygotowałem sobie dokładny tekst wystąpienia. Nie przygotowywałem tego nigdy wcześniej, więc zobaczymy jak to wyjdzie. Planuję mieć przy sobie treść mojego wystąpienia, aby czasem zerkać na kartkę i wygłaszać te trudniejsze zdania. Obok treści dodałem sobie małe obrazki odpowiadające slajdom z mojej prezentacji, abym mógł się szybko odnaleźć. Oczywiście muszę również uważać, aby nie czytać cały czas i aby kartka nie stała się barierą między mną a słuchaczami. Patrząc na rozpiskę konferencji występuję jako pierwszy więc nie będę musiał długo czekać i się dodatkowo stresować :)

Dzisiaj jeszcze wygłosiłem swoją prezentację moim współlokatorom. Dziękuje Ewie i Łukaszowi że chciało się wam mnie słuchać! Wyłapali oni moje potknięcia językowe. Wiem już nad czym muszę popracować. Dodatkowo sprawdziłem czas jaki mi ona zajmuje, gdyż na konferencji jest ograniczenie do 12 minut na prezentacje + 3 minuty na pytania. Spokojnie się mieszczę w czasie i nie powinien go przekroczyć.

Po konferencji napiszę na blogu jak mi poszło pierwsze publiczne wystąpienie w języku angielskim, jak i o samej konferencji.

Przy okazji zachęcam jeszcze do rejestracji na Java Developer’s Day 2010. Do niedzieli obowiązuje jeszcze najniższa cena więc warto się zarejestrować. Ja już to zrobiłem :)

czwartek, 12 sierpnia 2010

Podpisywanie apletu, czyli szybki sposób na aplikację osadzoną w przeglądarce

Dzisiaj opiszę pewną retrospekcję jak mi się przydarzyła jakiś czas temu. Przyszedł do mnie kolega (Kaktus) i się pyta mniej wiecej tak:

Kaktus: Ty Stachu, czy taką zwykłą aplikację okienkową napisaną w Swingu da się przenieść do appletu?
Ja: No da się.
Kaktus: A w takiej zwykłej aplikacji okienkowej da się jakoś prosto połączyć z bazą danych?
Ja: No da się.
Kaktus: No a da się więc z apletu połączyć się bezpośrednio z bazą danych?
Ja: No to to już nie koniecznie... Ale zobaczę co da się zrobić...

Aplety to był taki wynalazek który rozpoczął wielką ekspansję języka Java. Na konferencji SunWorld’95 pokazano przeglądarkę internetową potrafiącą wykonywać kod wewnątrz strony WWW – coś co dzisiaj nazywamy apletem. Potem zaczęto dodawać nowe funkcjonalności do języka Java, co było widoczne w kolejnych wersjach języka. Obecnie aplety nie są masowo wykorzystywane w przemyśle (zostały wyparte przez flash’a i inne podobne technologie). Piszą o nich jednak jeszcze w książkach i wykładają na uczelniach wyższych.

Dlaczego więc piszę o apletach skoro to taki staroć? Bo za pomocą apletu możemy w stosunkowo łatwy sposób (zakładając pewną znajomość języka Java) zrobić aplikację działającą w oknie przeglądarki. Takie aplikacje czasem są wymagane na studiach, a bez porządnego wprowadzenia do framework’ów Javowych ciężko się do tego zabrać. Mamy jeszcze .NET i Visual Studio, który posiada edytor stron HTML typu przeciągnij i upuść (drag and drop). Dzięki takiemu zestawowi można również szybko coś przygotować na przeglądarkę, aby pokazać prowadzącemu na studiach w celu zaliczenia pewnego przedmiotu. Ale ja nie dzisiaj o tym.

Java od początków swojego powstawania była reklamowana jako język bezpieczny i stabilny. Nigdy więcej wycieków pamięci, nigdy więcej sprzątania po sobie i obowiązują twarde restrykcje jak chcemy zrobić coś lepszego. Z tego względu też ograniczenia apletów są bardzo duże. Działają one w piaskownicy o następujących ograniczeniach:

  • nie można pozwalać uruchamiać programów na komputerze
  • nie można komunikować się z innym serwerem niż ten z którego zostały ściągnięte
  • nie można czytać, ani zapisywać plików na komputerze użytkownika
  • nie można zbierać informacji o komputerze użytkownika (poza kilkoma podstawowymi)

Pewien czas się zastanawiałem czy będzie możliwe połączenie z bazą danych z poziomu apletu. Po pewnym czasie mnie oświeciło, jak sobie przypomniałem, że kiedyś widziałem aplet który robił czego „normalnie” nie wolno. Przypomniało mi się wtedy o podpisywaniu apletów.

Wziąłem więc jakiś mój stary projekt (Swing + JDBC + MySQL) i przerobiłem go na szybko na aplet. Pierwsze uruchomienie zgodnie z oczekiwaniami zakończyło się fiaskiem:


java.security.AccessControlException: access denied (java.security.AllPermission )
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at NewJApplet.init(NewJApplet.java:23)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception: java.security.AccessControlException: access denied (java.security.AllPermission )

Trzeba więc podpisać aplet. Aby szybko to zrobić w NetBeans’ie należy kliknąć prawym na nazwę projektu i przejść do właściwości.


Następnie na zakładce Web Start zaznaczamy Self-signed. Oznacza to ze aplet będzie podpisany przez nas samych.

Przybudowujemy projekt i uruchamiamy w przeglądarce. Udało się! Dostajemy ostrzeżenie czy aby na pewno chcemy uruchomić aplet:

Klikamy Run i możemy się cieszyć apletem działającym w przeglądarce i łączącym się z bazą danych za pomocą JDBC :)

Przy okazji postanowiłem sprawdzić czy można się połączyć z hostem na innym komputerze niż ten z którego został załadowany aplet. Po jakimś czasie spędzonym na konfigurowanie firewall’i i uprawnień na bazie danych w końcu się udało. Możliwe jest więc wyjście poza piaskownice i poza serwer z którego ładowaliśmy aplet :)

Chciałbym jeszcze poruszyć temat uprawnień. W Javie jest możliwe dodawanie dodatkowych uprawnień niektórym aplikacjom za pomocą plików *.policy. W przypadku apletów nie można zdefiniować takiego pliku, aby był pobierany z serwera i użyty przy uruchomieniu danego apletu. Można jedynie ręcznie edytować na lokalnym komputerze plik java.policy, ale to odradzam.

Na koniec powiem, że przygotowując ten wpis opierałem się na książce core Java 2 Podstawy. Jest w niej również ładnie opisane jak zrobić aplikację która jest równocześnie apletem i aplikacją standalone. Polecam początkującym programistom.