<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-62160705063034256</id><updated>2011-08-31T12:57:21.369+02:00</updated><category term='Prelekcje'/><category term='inne'/><category term='komunikacja'/><category term='konferencje'/><category term='java'/><category term='NetBeans'/><category term='szkolenia'/><category term='Ecplise'/><category term='Silesia JUG'/><title type='text'>Marek Kliś - różności okołojavowe i nie tylko</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-5334070645431910583</id><published>2009-10-21T20:14:00.003+02:00</published><updated>2009-10-21T20:24:23.540+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencje'/><title type='text'>JDD 2009</title><content type='html'>W ostatni piątek (tj. 16.10.09) miała w Krakowie miejsce czwarta odsłona konferencji Java Developers' Day.&lt;br /&gt;&lt;br /&gt;Konferencja zaczęła się od wykładu jednego ze sponsorów czyli Red Hat. Tom Baeyens i Joram Barrez opowiedzieli o jBPM.&lt;br /&gt;&lt;br /&gt;Po ich wykładzie przyszła kolej na pierwszy keynote czyli Mark Richards i „sztuka messagingu”. Wykład ciekawy i z humorem ale chyba za dużo nawiązań do wspaniałej jakości polskich trunków ;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/St9RgOtHSoI/AAAAAAAAAn4/lkXKecT1Byw/s1600-h/jdd2009.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 269px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/St9RgOtHSoI/AAAAAAAAAn4/lkXKecT1Byw/s320/jdd2009.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5395120492758125186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ostatni wykład w tej części należał do sponsora. Tomasz Skutnik z e-point przekazał trochę doświadczenia ze swojej firmy na temat radzenia sobie z sytuacjami wyjątkowymi w aplikacjach JEE.&lt;br /&gt;&lt;br /&gt;Po przerwie obiadowej rozpoczęły się dwie równoległe sesje. Sesję 2. (w której uczestniczyłem) rozpoczął Waldemar Kot z tematem wielowątkowości w Java EE. Następne wykłady były już mniej techniczne. Jacek Kunicki opowiedział i pokazał jak można się bawić klockami Lego wykorzystując Lego Mindstorms i leJOS. Matr Richards przedstawił najpopularniejsze antywzorce programowania - tak naprawę to nie dotyczyły one bezpośrednio Javy. Ostatnim wykładem w drugiej sesji były "psychologiczne" aspekty naszej pracy czyli „o czym wiedzą najlepsi programiści” w wykonaniu Michała Bartyzela i Mariusza Sieraczkiewicza.&lt;br /&gt;&lt;br /&gt;Ostatni wykład poprowadził Scott Davis opowiadając o REST i pokazując klika przykładów z wykorzystaniem Groovy i Grails.&lt;br /&gt;&lt;br /&gt;Ogólnie konferencję zaliczam do udanych. Pomysł z agendą przy identyfikatorze bardzo dobry gdyż ma się ją cały czas przy sobie (tak było też na GeeCONie). Niestety wg mnie miejsce konferencji było gorsze niż rok temu. Wysiedzieć na plastikowych, rozkładanych siedzeniach (na rozkładanej trybunie) się wręcz nie dało. Projektory na sesji nr 2. były do niczego i ciężko było śledzić kod pisany przez prelegenta. Ilość miejsc parkingowych była zdecydowanie za mała.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-5334070645431910583?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/5334070645431910583/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=5334070645431910583' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/5334070645431910583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/5334070645431910583'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/10/jdd-2009.html' title='JDD 2009'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/St9RgOtHSoI/AAAAAAAAAn4/lkXKecT1Byw/s72-c/jdd2009.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-314001738813426993</id><published>2009-07-05T20:49:00.003+02:00</published><updated>2009-07-05T21:39:39.334+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencje'/><title type='text'>Javarsovia 2009 już za nami</title><content type='html'>W tym roku po raz pierwszy wybrałem się do Warszawy na &lt;a href="http://javarsovia.pl/"&gt;Javarsovie&lt;/a&gt;. Ponieważ jakiś czas temu w mediach ukazała się informacja, że Panowie z wiejskiej zezwolili łaskawie na sprzedawanie alkoholu w pociągach stwierdziłem, że zamiast spędzić kilka godzin za kierownica przyjemniej będzie czas podróży spędzić np w Warsie przy kuflu ;) Tak więc pobudka po 3 rano, samochodem do Bielska Białej i o 4.55 wyruszam IC Pilsko w kierunku Warszawy. W Katowicach dołącza do mnie &lt;a href="http://ordinarythoughts.org/"&gt;Marek Goldmann&lt;/a&gt;. Niestety okazało się, że w Warsie sprzedają piwo ale tylko bezalkoholowe. Na szczęście relacja Marka z JavaOne2009 zajęła prawie całą podróż do Warszawy.&lt;br /&gt;Około godziny 9 stawiliśmy się po krótkim spacerze z dworca na Miecznikowa 1. Rejestracja, odebranie gadżetów, przywitanie ze znajomymi i konferencję czas zacząć. &lt;br /&gt;Pierwszy wykład, na który się udałem to &lt;a href="http://warski.org/"&gt;Adam Warski&lt;/a&gt; i &lt;span style="font-style:italic;"&gt;&lt;a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&amp;task=view&amp;id=112&amp;Itemid=#Typesafe"&gt;Co jeszcze mogą nam dać anotacje - weryfikacja statyczna&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;Jako drugi wybrałem wykład Kuby Kubryńskiego na temat &lt;a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&amp;task=view&amp;id=112&amp;Itemid=#CI"&gt;Ciągłej Integracja w procesie wytwarzania oprogramowania&lt;/a&gt;.&lt;br /&gt;Trzeci wykład to &lt;a href="http://paulszulc.wordpress.com/"&gt;Paweł Szulc&lt;/a&gt; i Apache Wicket.&lt;br /&gt;Wszystkie trzy wykłady oceniam bardzo dobrze. Pomimo tego że od 3 rano byłem na nogach na żadnym z nich nie ziewałem tylko słuchałem z zainteresowaniem.&lt;br /&gt;Po przerwie obiadowej przyszła kolej na warsztaty &lt;a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&amp;task=view&amp;id=112&amp;Itemid=#Warsztaty_coding"&gt;Coding by example&lt;/a&gt; pod patronatem Bartosza Bańkowskiego, Igora Czechowskiego i Szczepana Fabera. Ponieważ byłem wcześniej (na &lt;a href="http://08.jdd.org.pl/"&gt;JDD&lt;/a&gt; oraz &lt;a href="http://www.geecon.org/"&gt;GeeCONie&lt;/a&gt;) na wykładach Szczepana stwierdziłem, że nie mogę odpuścić warsztatów. Nie wszyscy uczestnicy przyszli z własnymi laptopami więc można było sprawdzić jak się nam podoba idea programowania w parach. Ja zostałem sparowany z Grześkiem co miało ten plus, że był on gorącym zwolennikiem (co najważniejsze doświadczonym) IntelliJ IDEA a ponieważ od dłuższego czasu posiadam licencję, mogłem podejrzeć kilka skrótów oraz zobaczyć to środowisko w rękach doświadczonego programisty. Chyba muszę więcej czasu poświęcić temu IDE. &lt;br /&gt;Warsztaty były naprawdę na wysokim poziomie - i to nie tylko dlatego, że dostaliśmy po kubku jako pierwsi, którzy skończą ćwiczenie.&lt;br /&gt;Właśnie sobie uświadomiłem, że była to moja pierwsza konferencja, w której uczestniczyłem a jako prelegenta nie było &lt;a href="http://jaceklaskowski.pl/"&gt;Jacka Laskowskiego&lt;/a&gt;.&lt;br /&gt;Niestety nie mogłem uczestniczyć w spotkaniu integracyjnym po konferencji gdyż o 19:38 czekał na mnie już pociąg powrotny, a w nim mała niespodzianka. W wagonie, w którym jechałem jechało około 7 osób z &lt;a href="http://javarsovia.pl/"&gt;Javarsovii&lt;/a&gt;, których wcześniej nie znałem.&lt;br /&gt;Niestety PKP dowiozło mnie na miejsce z 30 minutowym opóźnieniem - tak więc dzień konferencji zakończył się dla mnie po 1 w nocy następnego dnia.&lt;br /&gt;Nie mam porównania z poprzednimi edycjami &lt;a href="http://javarsovia.pl/"&gt;Javarsovii&lt;/a&gt; ale tę oceniam wysoko i bardzo dziękuję &lt;a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&amp;task=view&amp;id=98&amp;Itemid="&gt;kapitule konferencji&lt;/a&gt; za ich wkład w to, że &lt;a href="http://javarsovia.pl/"&gt;Javarsovia&lt;/a&gt; wypadła tam znakomicie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-314001738813426993?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/314001738813426993/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=314001738813426993' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/314001738813426993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/314001738813426993'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/07/javarsovia-2009-juz-za-nami.html' title='Javarsovia 2009 już za nami'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-2503408957164440949</id><published>2009-05-08T21:26:00.003+02:00</published><updated>2009-05-08T21:31:23.502+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencje'/><category scheme='http://www.blogger.com/atom/ns#' term='szkolenia'/><title type='text'>I po GeeCONie</title><content type='html'>Dzisiaj zakończyła się pierwsza (i mam nadzieję, że nie ostatnia) edycja konferencji &lt;a href="http://www.geecon.org"&gt;GeeCON&lt;/a&gt;. Kto nie był niech żałuje bo naprawdę jest czego. Dwa dni (trzy dla tych, którzy brali udział w szkoleniach czyli GeeCON University) wykładów z udziałem "gwiazd" światowego formatu.&lt;br/&gt;Przygotowanie oceniam bardzo wysoko. Mojego zdania nie zmienia nawet kilka "sprzętowych" wpadek.&lt;br/&gt;Pozostaje mi tylko podziękować chłopakom z &lt;a href="http://www.geecon.org/main/organizers"&gt;GeeCON Team&lt;/a&gt; za fantastyczną robotę, którą odwalili i życzyć wytrwałości, sponsorów, oraz pomocników, żeby &lt;a href="http://www.geecon.org"&gt;GeeCON&lt;/a&gt; zagościł na stałe w kalendarzu imprez javowych.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-2503408957164440949?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/2503408957164440949/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=2503408957164440949' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/2503408957164440949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/2503408957164440949'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/05/i-po-geeconie.html' title='I po GeeCONie'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-1802278365885031568</id><published>2009-03-29T19:14:00.010+02:00</published><updated>2009-03-29T19:51:08.394+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans 6.7M2 i instalator platformowych aplikacji</title><content type='html'>Od jakiegoś czasu jest dostępna wersja &lt;a href="http://bits.netbeans.org/download/6.7/m2/"&gt;M2 NetBeans 6.7&lt;/a&gt; - wydanie stabilnej wersji jest &lt;a href="http://www.netbeans.org/community/releases/roadmap.html"&gt;planowane&lt;/a&gt; na czerwiec. Postanowiłem się bliżej przyjrzeć co nowa wersja będzie oferować.&lt;br /&gt;Pierwsze co zwróciło moją uwagę to plugin instalatora dla aplikacji tworzonych z wykorzystaniem platformy NetBeans.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-ulIIBpcI/AAAAAAAAAfc/NXjxKFoRqTI/s1600-h/NBInstaller01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-ulIIBpcI/AAAAAAAAAfc/NXjxKFoRqTI/s320/NBInstaller01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318661637807384002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po jego zainstalowaniu pojawia się nam nowa opcja dla projektów typu &lt;span style="font-style:italic;"&gt;Module Suite&lt;/span&gt; czyli &lt;span style="font-style:italic;"&gt;Generate Suite Installer&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-u6GWwznI/AAAAAAAAAfk/3SPaVfzBSIU/s1600-h/NBInstaller02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 279px; height: 320px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-u6GWwznI/AAAAAAAAAfk/3SPaVfzBSIU/s320/NBInstaller02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318661998109576818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wybranie tej opcji uruchamia prostego kreatora.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-vZ2kBXxI/AAAAAAAAAfs/r-jSTKikVtg/s1600-h/NBInstaller03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-vZ2kBXxI/AAAAAAAAAfs/r-jSTKikVtg/s320/NBInstaller03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318662543626034962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W pierwszym kroku podajemy kilka informacji charakteryzujących naszą aplikację oraz podstawowe wymagania jakie musi spełniać system, na którym będzie ona instalowana.&lt;br /&gt;Drugi krok to podanie treści (lub pliku) licencji, która musi być zaakceptowana podczas instalacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/Sc-vaqsdaPI/AAAAAAAAAf0/Fi_28RFAT_A/s1600-h/NBInstaller04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/Sc-vaqsdaPI/AAAAAAAAAf0/Fi_28RFAT_A/s320/NBInstaller04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318662557620070642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I to tyle. Po chwili instalator jest gotowy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/Sc-wOuTQDSI/AAAAAAAAAf8/TLy8GLCGwTA/s1600-h/NBInstaller06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 280px; height: 119px;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/Sc-wOuTQDSI/AAAAAAAAAf8/TLy8GLCGwTA/s320/NBInstaller06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318663451941276962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W katalogu &lt;span style="font-style:italic;"&gt;dist&lt;/span&gt; naszej aplikacji czeka na nas archiwum zip "*-installer-image.zip". Wystarczy je przesłać do klienta, który sobie je rozpakuje i uruchomi plik &lt;span style="font-style:italic;"&gt;installerLuncher&lt;/span&gt; (sh lub vbs w zależności od systemu). Instalator przeprowadzi użytkownika ukazując mu kolejne okna.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xg61aOTI/AAAAAAAAAgI/cee080Covo8/s1600-h/NBInstaller07.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 71px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xg61aOTI/AAAAAAAAAgI/cee080Covo8/s320/NBInstaller07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664864055048498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhQUr78I/AAAAAAAAAgQ/hQeReFsgtMI/s1600-h/NBInstaller08.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhQUr78I/AAAAAAAAAgQ/hQeReFsgtMI/s320/NBInstaller08.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664869823377346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhhszBGI/AAAAAAAAAgY/WND-793g15g/s1600-h/NBInstaller09.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhhszBGI/AAAAAAAAAgY/WND-793g15g/s320/NBInstaller09.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664874487907426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhu1zP_I/AAAAAAAAAgg/PLgbnbBvCh8/s1600-h/NBInstaller10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhu1zP_I/AAAAAAAAAgg/PLgbnbBvCh8/s320/NBInstaller10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664878015332338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhw-pn-I/AAAAAAAAAgo/ogIyG5FzrwA/s1600-h/NBInstaller11.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-xhw-pn-I/AAAAAAAAAgo/ogIyG5FzrwA/s320/NBInstaller11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664878589321186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-x_EYMSdI/AAAAAAAAAhA/5NVyLe2VCRg/s1600-h/NBInstaller12.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/Sc-x_EYMSdI/AAAAAAAAAhA/5NVyLe2VCRg/s320/NBInstaller12.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318665382012930514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/Sc-yJTc9cDI/AAAAAAAAAhI/Hg0Jk9lcUFY/s1600-h/NBInstaller13.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/Sc-yJTc9cDI/AAAAAAAAAhI/Hg0Jk9lcUFY/s320/NBInstaller13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318665557858152498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-yJ89CTuI/AAAAAAAAAhQ/bQaPx9pTxa4/s1600-h/NBInstaller14.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-yJ89CTuI/AAAAAAAAAhQ/bQaPx9pTxa4/s320/NBInstaller14.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318665568998543074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po przejściu tych kilku kroków aplikacja jest zainstalowana. &lt;br /&gt;&lt;br /&gt;Wg mnie plugin będzie przydatny ale pod warunkiem, że w wersji finalnej zostanie dopracowany (nie trzeba będzie pisać własnych zadań ant'a tworzących instalatora w oparciu np o &lt;a href="http://blogs.kiyut.com/tonny/2008/01/02/deploy-netbeans-platform-based-application-using-izpack-installer/"&gt;IzPack'a&lt;/a&gt;). Brakuje mu np wybrania w kreatorze opcji czy porobić skróty np na pulpicie czy w menu Start. No i domyślna grafika z logiem NetBeans'a 6.0 też nie jest na czasie.&lt;br /&gt;Zauważyłem także, że jeśli w kreatorze użyjemy polskich znaków instalator nie uruchomi się wcale i nie informuje nas o żadnych błędach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-1802278365885031568?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/1802278365885031568/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=1802278365885031568' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/1802278365885031568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/1802278365885031568'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/03/netbeans-67m2-i-instalator.html' title='NetBeans 6.7M2 i instalator platformowych aplikacji'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dqSd_vS7ivk/Sc-ulIIBpcI/AAAAAAAAAfc/NXjxKFoRqTI/s72-c/NBInstaller01.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-7934414085288624613</id><published>2009-03-07T20:58:00.004+01:00</published><updated>2009-03-08T10:46:10.705+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencje'/><title type='text'>4Developers</title><content type='html'>No i po &lt;a href="http://4developers.org.pl/"&gt;4Developers&lt;/a&gt;.&lt;br /&gt;Na pierwszy ogień poszedł wykład &lt;span style="font-style:italic;"&gt;EJB 3.1 - Killing The Top Eleven Myths, Tales and Biases&lt;/span&gt;, który wygłosił &lt;a href="http://www.adam-bien.com/"&gt;Adam Bien&lt;/a&gt;. Adam próbował rozwiać wszelkie mity krążące na temat EJB. Przedstawił także kilka nowości w EJB 3.1, które to niedługo ma ujrzeć światło dzienne.&lt;br /&gt;Drugi wykład prowadził &lt;a href="http://www.nealford.com/"&gt;Neal Ford&lt;/a&gt; na temat &lt;span style="font-style:italic;"&gt;The Productive Programmer: Mechanics&lt;/span&gt;. Zwrócił uwagę na podstawowe mechanizmy pracy programisty, na które czasami nie zwracamy uwagi, a które jednak wpływają na naszą szeroko rozumianą produktywność.&lt;br /&gt;Trzeci wykład to Corneliu Vasile Creanga i &lt;span style="font-style:italic;"&gt;Flex and Java integration&lt;/span&gt;. Było to króciutkie wprowadzenie do Flexa i pokazanie, że można go w prosty sposób integrować z Java - w końcu wystąpienie to było na ścieżce Javowej ;) Niewątpliwie atrakcją tego wykładu był spadający głośnik, który urwał się z sufitu i zatrzymał się tuż koło głowy jednego z uczestników wykładu.&lt;br /&gt;Przed przerwą obiadową Paweł Bachara pokazał nam możliwości Java w urządzeniach embedded na przykładzie SUN SPOT'a.&lt;br /&gt;&lt;br /&gt;Za następną cześć należałby się minus organizatorom - mianowicie była godzinna przerwa ale jak ktoś miał ochotę zjeść jakiś obiadek musiał to zrobić na własny rachunek. Na pochwałę zasługuje naprawdę przyzwoity bufet z przekąskami, który był okupowany przez tych, którym nie chciało się wychodzić w taką pogodę w poszukiwaniu jedzenia. Napisałem wcześniej, że "należałby się minus" - ale nie należy się z tego powodu, że wejściówkę miałem za darmo więc nie będę krytykował ;)&lt;br /&gt;&lt;br /&gt;Po przerwie &lt;span style="font-style:italic;"&gt;Java Underground&lt;/span&gt; prowadzona przez &lt;a href="http://dworld.pl/"&gt;Grzegorza Dudę&lt;/a&gt;. Pięć pięcio-minutowych wystąpień przebiegło bardzo sprawnie. Adam Bien z EJB, JavaFX (Bartek Kuczyński), Scala (Szymon Jachim), Jazz (Bartek Chrabski), Domain Driven Development (&lt;a href="http://art-of-software.blogspot.com/"&gt;Sławek Sobótka&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Do następnego wykładu podszedłem bardzo nieufnie, gdyż był to wykład sponsorowany (niestety nie dało się akurat wtedy przejść na inną ścieżkę - tzn jedyną na którą się dało była ścieżka .NET). Jednak Tomasz Skutnik z firmy e-point bardzo pozytywnie mnie zaskoczył (i nie tylko mnie z tego co wiem). Wykład na mało ciekawy temat &lt;span style="font-style:italic;"&gt;Wielojęzykowość w aplikacjach J2EE&lt;/span&gt; okazał się bardzo interesujący i dobrze poprowadzony. Przykłady wzięte z prawdziwych projektów pokazujące problemy, o których istnieniu na co dzień nie zdajemy sobie sprawy,  były bardzo interesujące.&lt;br /&gt;&lt;br /&gt;Jedynym wykładem, dla którego opuściłem ścieżkę javową był &lt;span style="font-style:italic;"&gt;Busy Java Developer’s Guide to Scala: Introduction&lt;/span&gt; &lt;a href="http://www.tedneward.com"&gt;Ted'a Neward'a&lt;/a&gt; na ścieżce języków specjalizowanych.&lt;br /&gt;&lt;br /&gt;Wykład Teda troszkę się przeciągnął przez co spóźniłem się na wykład &lt;a href="http://jaceklaskowski.pl/"&gt;Jacka Laskowskiego&lt;/a&gt; pod tytułem &lt;span style="font-style:italic;"&gt;Zwinne i lekkie aplikacje webowe w Javie z Groovy, Grails i Project Zero&lt;/span&gt;. Jacek pokazał nam w jaki sposób używając Grailsów zbudować szybko i prosto aplikację, która nie działa ;) ale dzięki temu, że nie zobaczyłem działających przykładów chyba bardziej mnie ciągnie, żeby bliżej się przyglądnąć Grooviemu i Grailsom. Więc wykład Jacka jak najbardziej udany - zainteresował mnie tematem. Przy okazji prelekcji dowiedziałem się, że będę na &lt;a href="http://javarsovia.pl/"&gt;javarsovi&lt;/a&gt; w czerwcu ;)&lt;br /&gt;&lt;br /&gt;Ogólnie konferencję uważam za bardzo udaną. Nie mam się do czego przyczepić ;)&lt;br /&gt;&lt;br /&gt;A już niedługo kolejna konferencja - &lt;a href="http://www.geecon.org/"&gt;GeeCON&lt;/a&gt;. Ja już się zarejestrowałem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-7934414085288624613?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/7934414085288624613/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=7934414085288624613' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7934414085288624613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7934414085288624613'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/03/4developers.html' title='4Developers'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-3296442998694437091</id><published>2009-03-02T17:53:00.008+01:00</published><updated>2009-03-02T18:44:24.016+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='szkolenia'/><category scheme='http://www.blogger.com/atom/ns#' term='Silesia JUG'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans Platform Certified Training - dzień 2.</title><content type='html'>Drugi dzień szkolenia przebiegał pod znakiem "wyglądu" aplikacji napisanych na platformie.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SawRgCTobOI/AAAAAAAAAd8/pfrTMZxWfh8/s1600-h/NBP17.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SawRgCTobOI/AAAAAAAAAd8/pfrTMZxWfh8/s320/NBP17.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637302835670242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pierwszy wykład należał do &lt;a href="http://blogs.sun.com/geertjan/"&gt;Geertjana&lt;/a&gt;, który opowiedział nam o systemie okien czyli &lt;a href="http://bits.netbeans.org/6.5/javadoc/org-openide-windows/overview-summary.html"&gt;Windows System API&lt;/a&gt;. Drugi wykład to &lt;a href="http://bits.netbeans.org/6.5/javadoc/org-openide-filesystems/overview-summary.html"&gt;System File System API&lt;/a&gt;, o którym opowiadał Karol. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRyv-tE7I/AAAAAAAAAeE/u00LAMrs-bQ/s1600-h/NBP11.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRyv-tE7I/AAAAAAAAAeE/u00LAMrs-bQ/s320/NBP11.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637624333570994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wykład Karola był przeplatany przykładami prezentowanymi przez &lt;a href="http://blogs.sun.com/geertjan/"&gt;Geertjana&lt;/a&gt;. W oczekiwaniu na pizzę oraz w ramach relaksu poruszone były tematy nie związane bezpośrednio z platformą czyli Groovy i Wicket.&lt;br /&gt;Jak widać na zdjęciach zrobionych podczas przerwy uczestnicy czuli nie tylko głód wiedzy ;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRy_uoVvI/AAAAAAAAAeM/oEBR08-o9tg/s1600-h/NBP12.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRy_uoVvI/AAAAAAAAAeM/oEBR08-o9tg/s320/NBP12.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637628561118962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRzRg-LgI/AAAAAAAAAeU/s0amVagbt5k/s1600-h/NBP15.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SawRzRg-LgI/AAAAAAAAAeU/s0amVagbt5k/s320/NBP15.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637633335668226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po przerwie przyszedł czas na omówienie jednej z ciekawszych i efektowniejszych bibliotek platformy czyli &lt;a href="http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-visual/overview-summary.html"&gt;Visual Library&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SawRzlYorOI/AAAAAAAAAec/otaKBTMWq8o/s1600-h/NBP16.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SawRzlYorOI/AAAAAAAAAec/otaKBTMWq8o/s320/NBP16.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637638669413602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Następnie &lt;a href="http://blogs.sun.com/kharezlak/"&gt;Karol&lt;/a&gt; opowiedział nam jak wygląda jego praca w SUNie, czyli głównie poprawianie błędów zgłoszonych przez użytkowników w &lt;a href="http://www.netbeans.org/issues/query.cgi"&gt;Issuezilli&lt;/a&gt;. Przy okazji dowiedzieliśmy się, że jeśli chcemy aby znaleziony przez nas błąd został przez kogokolwiek dostrzeżony musimy mu nadać priorytet co najmniej P3 ;)&lt;br /&gt;Na koniec kilka pomysłów na moduły lub aplikacje, które pozwolą uczestnikom uzyskać certyfikat NetBeans Certified Engineer.&lt;br /&gt;Drugi dzień szkolenia zakończył się wcześniej niż pierwszy bo ok godziny 16.&lt;br /&gt;Uwagi uczestników szkolenia można przeczytać na grupie &lt;a href="http://groups.google.com/group/silesia-jug/browse_thread/thread/4df9f9e0f0464bda"&gt;Silesia JUG&lt;/a&gt;.&lt;br /&gt;Jeśli bylibyście zainteresowania takim szkoleniem na swojej uczelni lub w ramach Waszego JUGu to informacje na ten temat są dostępne na oficjalnej stronie &lt;a href="http://edu.netbeans.org/courses/nbplatform-certified-training/"&gt;szkolenia&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-3296442998694437091?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/3296442998694437091/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=3296442998694437091' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3296442998694437091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3296442998694437091'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/03/netbeans-platform-certified-training.html' title='NetBeans Platform Certified Training - dzień 2.'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dqSd_vS7ivk/SawRgCTobOI/AAAAAAAAAd8/pfrTMZxWfh8/s72-c/NBP17.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-4390322231388538657</id><published>2009-02-28T21:11:00.007+01:00</published><updated>2009-02-28T21:30:05.337+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='szkolenia'/><category scheme='http://www.blogger.com/atom/ns#' term='Silesia JUG'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans Platform Certified Training - dzień 1.</title><content type='html'>Pierwszy dzień szkolenia z platformy NetBeans właśnie za nami. Plan pierwszego dnia przedstawiał się następująco:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SambOU2WYOI/AAAAAAAAAdU/QSiBADxMAvI/s1600-h/NBP_plan1.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SambOU2WYOI/AAAAAAAAAdU/QSiBADxMAvI/s320/NBP_plan1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307944306249982178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Szkolenie zaczęło się od krótkiego wstępu &lt;a href="http://blogs.sun.com/geertjan/"&gt;Geertjana&lt;/a&gt;. Następnie miejsce na "mównicy" zajął &lt;a href="http://blogs.sun.com/kharezlak/"&gt;Karol&lt;/a&gt; i opowiedział o korzyściach wynikających z używania platformy. Jego wystąpienie było przerywane przykładami pokazywanymi przez &lt;a href="http://blogs.sun.com/geertjan/"&gt;Geertjana&lt;/a&gt;. Po tym wszystkim przyszedł czas na pierwsze warsztaty. Uczestnicy prowadzeni przez trenera "przenieśli" zwykła Swingową aplikację (Anagram Game z przykładów dostępnych w NetBeansie) na platformę. Warsztaty zostały brutalnie przerwane przez rozwoziciela pizzy, który przywiózł nam ją o 15 minut za wcześnie. Jednak nikt nie protestował tylko w spokoju zabrał się za jedzenie szukając w głowie pomysłu na aplikację, za napisanie której możnaby dostać papierek certyfikowanego inżyniera NetBeans ;)&lt;br /&gt;Po przerwie Piotr Tabor opowiedział o swoim &lt;a href="http://code.google.com/p/protobuf-netbeans-plugin/"&gt;projekcie&lt;/a&gt; edytora.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/Samb6Qq6pGI/AAAAAAAAAdc/HtB_SrCSiYM/s1600-h/NBP02.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/Samb6Qq6pGI/AAAAAAAAAdc/HtB_SrCSiYM/s320/NBP02.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307945061042529378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jak widać momentami nawet prowadzący byli zaciekawieni ;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/Samb6n4SKUI/AAAAAAAAAdk/RYPxrPyzTiQ/s1600-h/NBP03.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/Samb6n4SKUI/AAAAAAAAAdk/RYPxrPyzTiQ/s320/NBP03.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307945067272612162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Następnie przyszła kolej na omówienie mechanizmu Lookup a później ćwiczenia, na których można było bliżej się z nim poznać.&lt;br /&gt;Przedostatnim punktem było moje króciutkie i nieoficjalne wystąpienie pokazujące pewne komercyjne zastosowanie platformy.&lt;br /&gt;Na ostatnim wykładzie Geertjan opowiadał jak wygląda w platformie "model danych" czyli Nodes API oraz Explorer &amp;amp; Properties API oraz pokazywał to na praktycznym przykładzie.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SamcPeeutoI/AAAAAAAAAds/HsGVF7t7A-c/s1600-h/NBP05.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SamcPeeutoI/AAAAAAAAAds/HsGVF7t7A-c/s320/NBP05.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307945425526765186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Kilka słów na temat pierwszego dnia możecie także przeczytać na blogu &lt;a href="http://blogs.sun.com/geertjan/entry/gliwice_on_the_netbeans_platform"&gt;Geertjana&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Tematyka poruszana na tym szkoleniu praktycznie nie wymagała żadnej specjalistycznej wiedzy. Podstawowa znajomość Javy była w zupełności wystarczająca oby zrozumieć o czym mowa. Pomocna mogła być również znajomość Swinga na poziomie pozwalającym określić czym różni się JPanel o JLabel ;)&lt;br /&gt;&lt;br /&gt;PS. Na SUNowskiej stronie &lt;a href="http://community.java.net/jugs/"&gt;JUGów&lt;/a&gt; jest ciekawa ankieta. Pytanie: &lt;span style="font-style:italic;"&gt;Przez kogo wg Ciebie powinna być reprezentowana społeczność JUG na JavaOne&lt;/span&gt;. Jedna z osób wydaje mi znajoma ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-4390322231388538657?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/4390322231388538657/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=4390322231388538657' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4390322231388538657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4390322231388538657'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/02/netbeans-platform-certified-training.html' title='NetBeans Platform Certified Training - dzień 1.'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dqSd_vS7ivk/SambOU2WYOI/AAAAAAAAAdU/QSiBADxMAvI/s72-c/NBP_plan1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-7332913840304570423</id><published>2009-01-30T19:23:00.006+01:00</published><updated>2009-01-30T20:17:46.022+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencje'/><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='komunikacja'/><category scheme='http://www.blogger.com/atom/ns#' term='Prelekcje'/><title type='text'>Dlaczego warto się udzielać w JUGach?</title><content type='html'>Ostatnio pojawiły się w końcu &lt;a href="http://picasaweb.google.pl/PROIDEAconferences/JavaDevelopersDay2008JDD08#"&gt;zdjęcia&lt;/a&gt; z ubiegłorocznej konferencji &lt;a href="http://08.jdd.org.pl/"&gt;Java Developer Day&lt;/a&gt;. Podczas ich przeglądania przypomniała mi się wypowiedź &lt;a href="http://jaceklaskowski.pl/"&gt;Jacka Laskowskiego&lt;/a&gt; na sesji Java Underground na temat dlaczego warto się udzielać w grupach, projektach (javowych). Podsumowując krótko jednym z argumentów Jacka było to, że przestajemy być anonimowi choćby w momencie szukania pracy - można się pochwalić udziałem w jakimś projekcie Open Source lub prowadzeniem wykładów. &lt;br /&gt;Swoją drogą to zastawiam się czy potencjalni pracodawcy w ogóle wiedzą co to są JUGi albo jak przekłada się "popularność" w JUGach na "kojarzenie" takiego delikwenta przez tych pierwszych?&lt;br /&gt;Ja chciałem na pytanie tytułowe odpowiedzieć w trochę inny, trochę nietypowy sposób. Mianowicie w bardziej materialny, czyli jakie korzyści (materialne) ja uzyskałem do tej pory z "udzielania się".&lt;br /&gt;Poniżej krótkie zestawienie.&lt;br /&gt;Prelekcja nt &lt;a href="http://platform.netbeans.org/"&gt;NetBeans Platform&lt;/a&gt; na &lt;a href="http://www.java.pl/"&gt;PJUG&lt;/a&gt; w Krakowie - licencja &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt; 7 (wtedy licencja kosztował chyba około &lt;span style="font-weight:bold;"&gt;179$&lt;/span&gt;)&lt;br /&gt;Artykuł do &lt;a href="http://dworld.pl/java-express/"&gt;JavaExpress&lt;/a&gt; - wylosowałem wejściówkę na &lt;a href="http://08.jdd.org.pl/"&gt;JDD08&lt;/a&gt; (&lt;span style="font-weight:bold;"&gt;380pln&lt;/span&gt;).&lt;br /&gt;Prelekcja nt &lt;a href="http://platform.netbeans.org/"&gt;NetBeans Platform&lt;/a&gt; na &lt;a href="http://groups.google.com/group/silesia-jug"&gt;SJUG&lt;/a&gt; w Katowicach - licencja &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt; 8 (&lt;span style="font-weight:bold;"&gt;225$&lt;/span&gt;)&lt;br /&gt;Preferencyjna cena dla aktywnych członków JUG na &lt;a href="http://4developers.org.pl/"&gt;COOLuary&lt;/a&gt; (20pln).&lt;br /&gt;Na &lt;a href="http://4developers.org.pl/"&gt;COOLuarach&lt;/a&gt; wylosowałem wejściówkę na 4Developers (&lt;span style="font-weight:bold;"&gt;229pln&lt;/span&gt;).&lt;br /&gt;Książek, USB flashy, długopisów nie liczę ;). Choć taka &lt;br /&gt;&lt;a href="http://helion.pl/ksiazki/sprifr.htm"&gt;Spring Framework. Profesjonalne tworzenie oprogramowania w Javie&lt;/a&gt; to kolejne &lt;span style="font-weight:bold;"&gt;89pln&lt;/span&gt; - a ja wylosowałem taką na spotkaniu z Alefem Arendsenem (więc książka jest z jego autografem).&lt;br /&gt;Poznani nowi, wspaniali ludzie - &lt;span style="font-weight:bold;"&gt;bezcenne&lt;/span&gt; ;)&lt;br /&gt;Podsumowując - robiąc to co lubię, ucząc się cały czas - niejako efektem ubocznym "udzielania się" w społecznościach Javowych są za zeszły rok "profity" w wysokości co najmniej 2000pln. Aż sam się zdziwiłem jak to policzyłem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-7332913840304570423?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/7332913840304570423/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=7332913840304570423' title='Komentarze (5)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7332913840304570423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7332913840304570423'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/01/dlaczego-warto-sie-udzielac-w-jugach.html' title='Dlaczego warto się udzielać w JUGach?'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-7929606114565512863</id><published>2009-01-24T21:33:00.003+01:00</published><updated>2009-01-24T22:06:39.719+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencje'/><title type='text'>Co tam słychać w COOLuarach...</title><content type='html'>Właśnie wróciłem z pierwszej w Polsce UnConference poświęconej Javie czyli z &lt;a href="http://dworld.pl/cooluary/"&gt;COOLuarów&lt;/a&gt;. Jeśli ktoś nie by to niech żałuje. Naprawdę jest czego.&lt;br /&gt;Dzień został podzielony na pięć godzinnych sesji, w każdej sesji było dostępnych pięć stolików. Po krótkim wstępie &lt;a href="http://dworld.pl/"&gt;Grzegorza&lt;/a&gt; na temat konferencji i jej wyglądu, zaczęło się ustalanie agendy. Wbrew moim obawom tablica dość szybko zapełniła się żółtymi karteczkami z propozycjami tematów.&lt;br /&gt;W pierwszej sesji wziąłem udział w dyskusji na temat narzędzi niezbędnych w pracy programisty. Dyskusja dotyczyła głównie IDE oraz maven vs Ant. Temat zresztą sam zgłosiłem ;)&lt;br /&gt;W drugiej sesji były już tylko dwa stoliki. Spring przy jednym, refaktoryzacja przy drugim. Ja wziąłem udział w tej pierwszej choć z relacji żałuję, że jednak nie w tej drugiej gdyż dyskusja zeszła raczej na temat plusów i minusów nowej polityki firmy Spring w sprawie opłat za dostęp do ich produktów.&lt;br /&gt;Po przerwie obiadowej przysiadłem się do stolika Scali. Tutaj jednak mogłem uczestniczyć tylko biernie gdyż temat ten nie był mi znany.&lt;br /&gt;Przedostatnia sesja dotyczyła ogólnie szkieletów dla aplikacji webowych z głównym pytaniem co sądzimy o JavaServer Faces. Pierwsze zdanie w tej dyskusji &lt;a href="http://blog.mocna-kawa.com/"&gt;Wiktora&lt;/a&gt; od razu zbiło pytających z tropu gdyż "JavaServer Faces nie należy w ogóle używać" :) Ogólnie wniosek chyba był taki, że ruby (z rails) i groovy (z grails) górą ;)&lt;br /&gt;Ostatnia sesja to temat javy w wydaniu desktopowym oraz JavaFX ogólnie. Temat nie wywołał zażartej dyskusji. Pewnie wszyscy czekali już na końcowe losowanie nagród ;)&lt;br /&gt;Wielkie podziękowania należą się &lt;a href="http://dworld.pl/"&gt;Grześkowi&lt;/a&gt; gdyż odwalił kawał dobrej roboty przygotowując &lt;a href="http://dworld.pl/cooluary/"&gt;COOLuary&lt;/a&gt;. Mam nadzieję, że konferencja ta zagości na stałe w kalendarzu wydarzeń javowych.&lt;br /&gt;Na koniec nie wypada mi się nie pochwalić, że udało mi się wylosować wejściówkę na konferencję 4Developers ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-7929606114565512863?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/7929606114565512863/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=7929606114565512863' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7929606114565512863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7929606114565512863'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2009/01/co-tam-sycha-w-cooluarach.html' title='Co tam słychać w COOLuarach...'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-3483660081721862285</id><published>2008-12-20T19:00:00.009+01:00</published><updated>2008-12-20T20:01:35.968+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Własny komponent na pasku statusu w NetBeans</title><content type='html'>W jaki sposób dodać coś własnego do paska statusu aplikacji napisanej przy pomocy &lt;a href="http://platform.netbeans.org"&gt;platformy NetBeans&lt;/a&gt; (czyli np do &lt;a href="http://www.netbeans.org"&gt;NetBeans IDE&lt;/a&gt;)?&lt;br /&gt;W tym celu musimy stworzyć klasę implementującą interfejs &lt;a href="http://bits.netbeans.org/6.5/javadoc/org-openide-awt/org/openide/awt/StatusLineElementProvider.html"&gt;StatusLineElementProvider&lt;/a&gt;. Interfejs ten definiuje tylko jedną metodę &lt;span style="font-style:italic;"&gt;Component getStatusLineElement()&lt;/span&gt;. Metoda zwraca komponent, który ma być umieszczony na pasku statusu.&lt;br /&gt;Stwórzmy więc jakiś przykładowy projekt modułu z komponentem dla paska statusu.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SU0-PE-dOGI/AAAAAAAAAbM/qoY38LsRnow/s1600-h/project.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SU0-PE-dOGI/AAAAAAAAAbM/qoY38LsRnow/s320/project.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5281946366730123362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aplikacja ma ustawioną polską platformę dlatego nazwy bibliotek netbeansowych są po polsku. Menu aplikacji po uruchomieniu również. Należy zwrócić uwagę na biblioteki jaki są dodane do modułu &lt;span style="font-style:italic;"&gt;MyStatusLine&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;W tym przypadku komponentem jest zwykły JPanel z JLabelem (label z jakimś tekstem i ikoną). Po przejściu do źródła klasy &lt;span style="font-style:italic;"&gt;StatusLineElement&lt;/span&gt; musimy dopisać implementację interfejsu &lt;span style="font-style:italic;"&gt;StatusLineElementProvider&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;package org.myorg.status;&lt;br /&gt;&lt;br /&gt;import java.awt.Component;&lt;br /&gt;import org.openide.awt.StatusLineElementProvider;&lt;br /&gt;&lt;br /&gt;public class StatusLineElement extends javax.swing.JPanel implements StatusLineElementProvider {&lt;br /&gt;&lt;br /&gt;    public StatusLineElement() {&lt;br /&gt;        initComponents();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Component getStatusLineElement() {&lt;br /&gt;        return this;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    ...&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Aby nasza aplikacja "dowiedziała" się o nowym komponencie musimy ją o tym poinformować tworząc w katalogu &lt;span style="font-style:italic;"&gt;META-INF/services&lt;/span&gt; plik o nazwie takiej jak implementowany przez nas interfejs czyli &lt;span style="font-style:italic;"&gt;org.openide.awt.StatusLineElementProvider&lt;/span&gt;. Treścią tego pliku będzie pełna nazwa klasy implementującej ten interfejs czyli &lt;span style="font-style:italic;"&gt;org.myorg.status.StatusLineElement&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Po uruchomieniu aplikacji na pasku powinien znajdować się nasz komponent.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SU09KZ-xR0I/AAAAAAAAAbE/ISPJW9ordXk/s1600-h/sampleapp.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 186px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SU09KZ-xR0I/AAAAAAAAAbE/ISPJW9ordXk/s320/sampleapp.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5281945186957608770" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-3483660081721862285?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/3483660081721862285/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=3483660081721862285' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3483660081721862285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3483660081721862285'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/12/wasny-komponent-na-pasku-statusu.html' title='Własny komponent na pasku statusu w NetBeans'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/SU0-PE-dOGI/AAAAAAAAAbM/qoY38LsRnow/s72-c/project.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-4162956635176494850</id><published>2008-12-13T21:47:00.004+01:00</published><updated>2008-12-13T22:10:32.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Progress API</title><content type='html'>Progress API jest malutką ale użyteczną biblioteką wchodzącą w skład platformy &lt;a href="http://www.netbeans.org"&gt;NetBeans&lt;/a&gt; i oferującą programiście dostęp do paska postępu przydatnego przy długich zadaniach wykonywanych w tle.&lt;br /&gt;To co nas będzie interesowało to &lt;a href='http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-progress/org/netbeans/api/progress/ProgressHandleFactory.html'&gt;ProgressHandleFactory&lt;/a&gt; oraz &lt;a href='http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-progress/org/netbeans/api/progress/ProgressHandle.html'&gt;ProgressHandle&lt;/a&gt;.&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;public void startMyTask() {&lt;br /&gt;  Runnable runnable = new Runnable() {&lt;br /&gt;    public void run() {&lt;br /&gt;      ProgressHandle handle = ProgressHandleFactory.createHandle(&lt;br /&gt;        "Moje długie zadanie");&lt;br /&gt;      int count = 57;&lt;br /&gt;      handle.start(count);&lt;br /&gt;      for(int i = 0; i &amp;lt; count; i++){&lt;br /&gt;        handle.progress(i);&lt;br /&gt;          if(i &amp;gt; (count/2)){&lt;br /&gt;            handle.progress("Połowa zadania już za nami");&lt;br /&gt;          }&lt;br /&gt;          try {&lt;br /&gt;            Thread.sleep(200);&lt;br /&gt;          } catch (InterruptedException ex) {&lt;br /&gt;            Exceptions.printStackTrace(ex);&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;      handle.finish();&lt;br /&gt;    }&lt;br /&gt;  };&lt;br /&gt;  (new Thread(runnable)).start();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Uruchomienie powyższej metody spowoduje pokazanie się paska postępu w prawym dolnym rogu aplikacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SUQjIVisI6I/AAAAAAAAAas/83gGqwBWU-I/s1600-h/pgbar02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 198px;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SUQjIVisI6I/AAAAAAAAAas/83gGqwBWU-I/s320/pgbar02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5279383289313633186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po kliknięciu na pasek postępu możemy zobaczyć także informacje szczegółowe na temat wykonywanego zadania.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SUQjIY2RHWI/AAAAAAAAAa0/nBGxQ07JlWU/s1600-h/pgbar01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 74px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SUQjIY2RHWI/AAAAAAAAAa0/nBGxQ07JlWU/s320/pgbar01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5279383290201054562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;handle.start(count)&lt;/span&gt; uruchamia pasek postępu informując go z ilu kroków będzie się składać zadanie. &lt;span style="font-style:italic;"&gt;handle.progress(i)&lt;/span&gt; informuje ile kroków już mamy za sobą, &lt;span style="font-style:italic;"&gt;handle.progress("Połowa zadania już za nami")&lt;/span&gt; dodaje opis do widoku szczegółowego zadania, &lt;span style="font-style:italic;"&gt;handle.finish()&lt;/span&gt; kończy i ukrywa pasek.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-4162956635176494850?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/4162956635176494850/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=4162956635176494850' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4162956635176494850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4162956635176494850'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/12/progress-api.html' title='Progress API'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dqSd_vS7ivk/SUQjIVisI6I/AAAAAAAAAas/83gGqwBWU-I/s72-c/pgbar02.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-549484847313626719</id><published>2008-12-04T08:10:00.001+01:00</published><updated>2008-12-04T08:17:15.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='konferencje'/><title type='text'>Styczniowe COOLuary</title><content type='html'>Właśnie zauważyłem na &lt;a href="http://dworld.pl"&gt;Developers World&lt;/a&gt; wpis na temat przyszłorocznej konferencji pod dość ciekawą nazwą &lt;a href="http://dworld.pl/cooluary/"&gt;COOLuary&lt;/a&gt;. Patrząc na zasady oraz agendę konferencji stwierdzam, że szykuje się coś naprawdę ciekawego. A i cena nie jest powalająca. 30 pln za udział w całodniowej konferencji z obiadem to wg mnie przystępna cena. Założyłem po cichu, że zostanę potraktowany jako "&lt;span style="font-style:italic;"&gt;aktywny członek&lt;/span&gt;" ;)&lt;br /&gt;Ja się zapisuję.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-549484847313626719?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/549484847313626719/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=549484847313626719' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/549484847313626719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/549484847313626719'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/12/styczniowe-cooluary.html' title='Styczniowe COOLuary'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-2687360617144753864</id><published>2008-12-03T19:47:00.005+01:00</published><updated>2008-12-03T20:47:42.622+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans na skróty w edytorze</title><content type='html'>Chciałbym dzisiaj przybliżyć kilka pomocnych (według mnie) skrótów klawiszowych w edytorze NetBeans.&lt;br /&gt;&lt;br /&gt;1. &lt;span style="font-weight:bold;"&gt;Ctrl+/&lt;/span&gt; dodawanie/usuwanie komentarza z linijek wchodzących w skład zaznaczonego obszaru.&lt;br /&gt;&lt;br /&gt;2. &lt;span style="font-weight:bold;"&gt;Ctrl+E&lt;/span&gt; usuwanie linii kodu wchodzących w skład zaznaczonego obszaru. Bez zaznaczenia usunięcie tylko jednej linii.&lt;br /&gt;&lt;br /&gt;3. &lt;span style="font-weight:bold;"&gt;Alt+Shift+Up/Down&lt;/span&gt; przesunięcie linii (lub zaznaczonego fragmentu) w górę/dół.&lt;br /&gt;&lt;br /&gt;4. &lt;span style="font-weight:bold;"&gt;Ctrl+Shift+Up/Down&lt;/span&gt; skopiowanie linii (lub zaznaczonego fragmentu) powyżej/poniżej.&lt;br /&gt;&lt;br /&gt;5. &lt;span style="font-weight:bold;"&gt;Alt+Insert&lt;/span&gt; Generator kodu.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3MkcKCI/AAAAAAAAAY8/NrfpJzPln7M/s1600-h/pkt_05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 121px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3MkcKCI/AAAAAAAAAY8/NrfpJzPln7M/s320/pkt_05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649053359351842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. &lt;span style="font-weight:bold;"&gt;Ctrl+R&lt;/span&gt; Zmiana nazwy.&lt;br /&gt;&lt;br /&gt;7. &lt;span style="font-weight:bold;"&gt;Ctrl+F3&lt;/span&gt; Szukanie wystąpień słowa.&lt;br /&gt;7a. &lt;span style="font-weight:bold;"&gt;F3/Shift+F3&lt;/span&gt; Następne/poprzednie wystąpienie szukanego słowa.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3XMXICI/AAAAAAAAAZE/TmvM7k4Wwfw/s1600-h/pkt_07.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 125px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3XMXICI/AAAAAAAAAZE/TmvM7k4Wwfw/s320/pkt_07.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649056211148834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8. &lt;span style="font-weight:bold;"&gt;Alt+F7&lt;/span&gt; Wyszukiwanie użycia metody/zmiennej.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/STbe3a7ASQI/AAAAAAAAAZM/9PcmnCgQQQM/s1600-h/pkt_08.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 184px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/STbe3a7ASQI/AAAAAAAAAZM/9PcmnCgQQQM/s320/pkt_08.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649057212090626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;9. &lt;span style="font-weight:bold;"&gt;Alt+Shift+F&lt;/span&gt; Formatowanie kodu.&lt;br /&gt;&lt;br /&gt;10. &lt;span style="font-weight:bold;"&gt;Ctrl+Tab&lt;/span&gt; Przełączanie pomiędzy otwartymi edytorami.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3ndm6WI/AAAAAAAAAZU/x412-I9XBrU/s1600-h/pkt_10.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3ndm6WI/AAAAAAAAAZU/x412-I9XBrU/s320/pkt_10.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649060578453858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;11. &lt;span style="font-weight:bold;"&gt;Shift+Esc&lt;/span&gt; Przełączenie aktualnego okna pomiędzy dużym a małym rozmiarem.&lt;br /&gt;&lt;br /&gt;12. &lt;span style="font-weight:bold;"&gt;Ctrl+O&lt;/span&gt; Wyszukiwanie klasy do edycji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3n3GqqI/AAAAAAAAAZc/fpyMeowgcfo/s1600-h/pkt_12.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3n3GqqI/AAAAAAAAAZc/fpyMeowgcfo/s320/pkt_12.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649060685392546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;13. &lt;span style="font-weight:bold;"&gt;Ctrl+Q&lt;/span&gt; Powrót do ostatnio edytowanego miejsca.&lt;br /&gt;&lt;br /&gt;14. &lt;span style="font-weight:bold;"&gt;Ctrl+Shift+I&lt;/span&gt; Dodanie brakujących importów.&lt;br /&gt;14a. &lt;span style="font-weight:bold;"&gt;Alt+Enter&lt;/span&gt; Rozwinięcie menu dla podpowiedzi np dla "&lt;span style="font-style:italic;"&gt;żaróweczki&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbfZbXbMYI/AAAAAAAAAZk/0-VxS-YCG14/s1600-h/pkt_14.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbfZbXbMYI/AAAAAAAAAZk/0-VxS-YCG14/s320/pkt_14.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649641446846850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;15. &lt;span style="font-weight:bold;"&gt;Ctrl+I&lt;/span&gt; Wyszukiwanie. Z pola wyszukiwanie mamy możliwość uruchomienia różnych akcji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbiQ1UtjWI/AAAAAAAAAZ8/xknAN-ZuTt4/s1600-h/pkt_15.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 143px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STbiQ1UtjWI/AAAAAAAAAZ8/xknAN-ZuTt4/s320/pkt_15.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275652792330849634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;16. &lt;span style="font-weight:bold;"&gt;Ctrl+;&lt;/span&gt; Dodanie ";" na końcu linii. Szkoda tylko, że nie sprawdza czy linia jest już zakończona ";".&lt;br /&gt;16a. &lt;span style="font-weight:bold;"&gt;Ctrl+Shift+;&lt;/span&gt; Dodanie ";" na końcu linii, wstawienie nowej linii i przejście na jej początek.&lt;br /&gt;&lt;br /&gt;17. Nie jest skrótem klawiszowym. Stanięcie na deklaracji typu zwracanego przez metodę podświetla nam wszystkie możliwie punkty wyjścia z tej metody.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/STbfaDSRdVI/AAAAAAAAAZ0/wLREqFnSPzE/s1600-h/pkt_17.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 141px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/STbfaDSRdVI/AAAAAAAAAZ0/wLREqFnSPzE/s320/pkt_17.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649652162655570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A według Ciebie jakie skróty powinny się jeszcze znaleźć w tym krótkim zestawieniu?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-2687360617144753864?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/2687360617144753864/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=2687360617144753864' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/2687360617144753864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/2687360617144753864'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/12/netbeans-na-skrty-w-edytorze.html' title='NetBeans na skróty w edytorze'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/STbe3MkcKCI/AAAAAAAAAY8/NrfpJzPln7M/s72-c/pkt_05.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-3422506524051372945</id><published>2008-11-29T00:15:00.006+01:00</published><updated>2008-11-29T15:29:05.929+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Polska platforma NetBeans jeszcze raz czyli problemy z lokalizacją</title><content type='html'>We &lt;a href='http://marekklis.blogspot.com/2008/11/netbeans-release-candidate-2-sprawa.html'&gt;wpisie&lt;/a&gt; opisałem pojawienie się polskiego tłumaczenia platformy. Wszystko było pięknie tak jak to opisałem do momentu aż nie spróbowałem zrobić wersji dystrybucyjnej aplikacji zbudowanej na polskiej platformie (&lt;i&gt;Build ZIP Distribution&lt;/i&gt;). Po rozpakowaniu zipa i uruchomieniu aplikacji okazało się, że polskie menu gdzieś zniknęło. Jak się okazało jest za to odpowiedzialny &lt;a href='http://www.netbeans.org/issues/show_bug.cgi?id=138056'&gt;błąd&lt;/a&gt; znany już we wcześniejszej wersji &lt;a href='http://www.netbeans.org'&gt;NetBeans'a&lt;/a&gt;. Błąd ten dotyczy wszystkich tłumaczeń platformy.&lt;br/&gt;Pozostały mi więc dwie możliwości: albo przy każdym budowaniu aplikacji kopiować pliki z potrzebnymi tłumaczeniami albo napisać zadanie &lt;a href='http://ant.apache.org/'&gt;anta&lt;/a&gt; które uzupełni zipa za mnie. Wybrałem opcję drugą i okazało się, że zadanie to nie jest tak trudne jak mi się na początku wydawało. W tym celu do pliku &lt;i&gt;build.xml&lt;/i&gt; odpowiedzialnego za zadania anta związane z naszym projektem dodałem zadanie "&lt;i&gt;build-localized-zip&lt;/i&gt;". Zadanie to dodaje do pliku archiwum (stworzonego w zadaniu &lt;i&gt;build-zip&lt;/i&gt; - opis tego zadania znajduje się w pliku &lt;i&gt;harness/suite.xml&lt;/i&gt; w katalogu platformy, na której budujemy aplikację) pliki z polskimi tłumaczeniami. Minusem tego rozwiązania jest to, że zostaną dodane wszystkie "&lt;i&gt;polskie&lt;/i&gt;" pliki a nie tylko z tych modułów, które wykorzystujemy. Biorąc pod uwagę, że na dzień dzisiejszy przetłumaczona jest tylko część modułów platformy nie powinno to stanowić problemu.&lt;br /&gt;&lt;br /&gt;&lt;pre cols='80' class='moz-signature'&gt;&lt;br /&gt;&amp;lt;project name="TestPlatform" basedir="."&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;    &amp;lt;description&amp;gt;Builds the module suite TestPlatform.&amp;lt;/description&amp;gt;&lt;br /&gt;    &amp;lt;import file="nbproject/build-impl.xml"/&amp;gt;&lt;b&gt;&lt;br /&gt;    &amp;lt;target name="build-localized-zip" depends="clean,build-zip"&lt;br /&gt;                   description="Zbudowanie polskiej dystrybucji"&amp;gt;&lt;br /&gt;        &amp;lt;zip destfile="${dist.dir}/${app.name}.zip" update="true"&amp;gt;&lt;br /&gt;            &amp;lt;zipfileset dir="${netbeans.dest.dir}" prefix="${app.name}"&amp;gt;&lt;br /&gt;                &amp;lt;include name="**/locale/*_pl.jar"/&amp;gt;&lt;br /&gt;            &amp;lt;/zipfileset&amp;gt;&lt;br /&gt;        &amp;lt;/zip&amp;gt;&lt;br /&gt;   &amp;lt;/target&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br/&gt;&lt;br /&gt;Teraz wystarczy uruchomić nasze nowe zadanie i nowa dystrybucja naszej aplikacji będzie już "uzbrojona" w polskie menu.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/STB74bxAw6I/AAAAAAAAAYs/SxvkmQmo0c4/s1600-h/Screenshot-TestPlatform+-+NetBeans+IDE+6.5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/STB74bxAw6I/AAAAAAAAAYs/SxvkmQmo0c4/s320/Screenshot-TestPlatform+-+NetBeans+IDE+6.5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5273851373107069858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/STB9R_OrMJI/AAAAAAAAAY0/IRBcadLdGgw/s1600-h/Screenshot-TestPlatform+200811100614.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 206px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/STB9R_OrMJI/AAAAAAAAAY0/IRBcadLdGgw/s320/Screenshot-TestPlatform+200811100614.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5273852911635083410" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-3422506524051372945?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/3422506524051372945/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=3422506524051372945' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3422506524051372945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3422506524051372945'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/11/polska-platforma-netbeans-jeszcze-raz.html' title='Polska platforma NetBeans jeszcze raz czyli problemy z lokalizacją'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dqSd_vS7ivk/STB74bxAw6I/AAAAAAAAAYs/SxvkmQmo0c4/s72-c/Screenshot-TestPlatform+-+NetBeans+IDE+6.5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-2361674100948087443</id><published>2008-11-20T18:19:00.002+01:00</published><updated>2008-11-21T15:36:28.966+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Prelekcje'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Silesia JUG 19.11.2008 - materiały z prelekcji</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;No i po prelekcji. &lt;a href='http://javavsme.wordpress.com/2008/11/20/2-spotkanie-silesia-jug-zakonczone-3-przed-nami/'&gt;Marek Goldmann&lt;/a&gt; oraz &lt;a href="http://k-adamczyk.blogspot.com/2008/11/netbeans-platform-wraenia-po-2_20.html"&gt;Krzysztof Adamczyk&lt;/a&gt; napisali kilka słów na temat tego spotkania.&lt;br /&gt;Jeśli ktoś jest zainteresowany to udostępniam &lt;a href='http://marek.klis.googlepages.com/NetBeansPlatform.pdf'&gt;slajdy&lt;/a&gt;. Przykładowy projekt postaram się udostępnić w najbliższym czasie tylko muszę go odpowiednio przygotować.&lt;br /&gt;Pozwoliłem sobie również udostępnić &lt;a href='http://marek.klis.googlepages.com/document.pdf'&gt;slajdy&lt;/a&gt; &lt;a href='http://lukaszlipka.blogspot.com/'&gt;Łukasza Lipki&lt;/a&gt; wprowadzające i kończące 2. spotkanie śląskiej grupy użytkowników Javy.&lt;br /&gt;Do zobaczenia więc na następnym spotkaniu, które ma się odbyć w przyszłym tygodniu we wtorek tj. 25.11.2005 o 18:30 w &lt;a href='http://www.coig.pl/index.php?t=200&amp;amp;id=210'&gt;budynku COIGu&lt;/a&gt; w Katowicach. Tematem będzie &lt;a href='http://mule.mulesource.org/'&gt;ESB Mule&lt;/a&gt; a zaprezentuje go &lt;a href='http://lukaszlipka.blogspot.com/'&gt;Łukasz&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-2361674100948087443?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/2361674100948087443/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=2361674100948087443' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/2361674100948087443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/2361674100948087443'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/11/silesia-jug-19112008-materiay-z.html' title='Silesia JUG 19.11.2008 - materiały z prelekcji'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-3767669216756287444</id><published>2008-11-19T11:57:00.005+01:00</published><updated>2008-11-19T12:06:33.475+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans w samo południe</title><content type='html'>Wg oficjalnych informacji &lt;a href="http://www.netbeans.org/community/releases/roadmap.html"&gt;premiera&lt;/a&gt; wersji 6.5 &lt;a href="http://www.netbeans.org"&gt;NetBeans'a&lt;/a&gt; ma mieć miejsce jutro tj. 20 listopada. Więc mogę powiedzieć, że zdziwiłem się trochę po wejściu na stronę &lt;a href="http://www.netbeans.org/downloads/"&gt;Download IDE&lt;/a&gt; gdy zobaczyłem, że na stronie tej aktualną wersją do ściągnięcia jest właśnie 6.5. I to pomimo tego, że na stronie głównej aktualną wersją jest jeszcze 6.1. Stan ten zaobserwowałem w samo południe.&lt;br /&gt;Więc ściągam czym prędzej żeby na dzisiejszej &lt;a href="http://marekklis.blogspot.com/2008/11/silesia-java-user-group-netbeans.html"&gt;prezentacji&lt;/a&gt; pokazać już oficjalną wersję 6.5.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-3767669216756287444?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/3767669216756287444/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=3767669216756287444' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3767669216756287444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3767669216756287444'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/11/netbeans-w-samo-poudnie.html' title='NetBeans w samo południe'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-5829452261348059522</id><published>2008-11-17T21:54:00.001+01:00</published><updated>2008-11-17T21:54:17.172+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Prelekcje'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Silesia Java User Group - NetBeans Platform</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;W najbliższą środę tj. 19.11.2008 będę miał zaszczyt poprowadzić drugie już spotkanie &lt;a href='http://silesia.jug.pl'&gt;śląskiego JUGu&lt;/a&gt;. Tematem będzie oczywiście &lt;a href='http://platform.netbeans.org/'&gt;platforma NetBeans&lt;/a&gt;. Będę chciał przedstawić główne zalety używanie platformy tworząc podczas prelekcji od podstaw prostą aplikację.&lt;br/&gt;Może uda się też powiedzieć coś o nowościach w wersji 6.5 NetBeansa, która na dniach ma ujrzeć światło dzienne.&lt;br/&gt;Dla uczestników są przewidziane nagrody. Oprócz licencji &lt;a href='http://www.jetbrains.com/idea/'&gt;IntelliJ IDEA&lt;/a&gt; będą jeszcze nagrody niespodzianki ;) Więc jeśli nie dla prowadzącego i dla tematu to dla nagrody na pewno warto się pojawić w Katowicach na ul. Mikołowskiej 100 w budynku &lt;a href='http://www.coig.pl/index.php?t=200&amp;amp;id=210'&gt;COIGu&lt;/a&gt; o godzinie 18:30.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-5829452261348059522?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/5829452261348059522/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=5829452261348059522' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/5829452261348059522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/5829452261348059522'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/11/silesia-java-user-group-netbeans.html' title='Silesia Java User Group - NetBeans Platform'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-4127799939405523807</id><published>2008-11-10T19:03:00.002+01:00</published><updated>2008-11-10T19:12:10.221+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans Release Candidate 2 a sprawa polska</title><content type='html'>Kilka ,a może kilkanaście dni temu (build jest z 2008.10.27) pojawiła się kolejna wersja &lt;a href='http://www.netbeans.org'&gt;NetBeans'a&lt;/a&gt; kandydująca do końcowego wydania czyli RC2. Jak zapewne Wam wiadomo, wersja 6.5 będzie dostępna także w polskiej wersji językowej. Wszystko to dzięki polskiemu &lt;a href='http://wiki.netbeans.org/PolishTranslation'&gt;zespołowi tłumaczącemu&lt;/a&gt;.&lt;br /&gt;Chcąc zobaczyć jak to wygląda ściągnąłem polską wersję instalacyjną.&lt;br /&gt;Pierwsze wrażenia: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;niby polska wersja językowa ale cała instalacja przebiega po angielsku.&lt;/li&gt;&lt;li&gt;polska wersja NB nadpisała mi linki (na pulpicie i menu Start) do wcześniej zainstalowanej wersji angielskiej (pomimo, że wybrałem dla polskiej wersji inny katalog)&lt;/li&gt;&lt;li&gt;na dzień dzisiejszy procent spolszczenia pozostawia jeszcze dużo do życzenia (wiem, wiem... łatwiej narzekać zamiast pomóc w tłumaczeniu;) )&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SRh4LCEuqPI/AAAAAAAAAXk/yjSA5xi8yh0/s1600-h/nb65pl_01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SRh4LCEuqPI/AAAAAAAAAXk/yjSA5xi8yh0/s320/nb65pl_01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5267091895140395250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ale ponoć platforma jest w całości przetłumaczona. Więc czym prędzej założyłem nowy projekt &lt;i&gt;NetBeans Platform Applications&lt;/i&gt;. Muszę przyznać, że po uruchomieniu projektu poczułem się mile zaskoczony.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SRh4LX54NmI/AAAAAAAAAXs/jeTggAFX97Y/s1600-h/nb65pl_02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 204px;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SRh4LX54NmI/AAAAAAAAAXs/jeTggAFX97Y/s320/nb65pl_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5267091901000463970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dopóki IDE nie będzie kompleksowo przetłumaczone postanowiłem wrócić do oryginalnego NetBeans'a a dla przykładowego projektu ustawić, że ma korzystać z nowo zainstalowanej polskiej wersji platformy. W tym celu w menu &lt;i&gt;Tools&lt;/i&gt; -&amp;gt; &lt;i&gt;NetBeans Platforms&lt;/i&gt; dodałem (&lt;i&gt;Add Platform&lt;/i&gt;) jako kolejną platformę polską i we właściwościach projektu wskazałem, że ma z niej korzystać podczas uruchamiania.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SRh4LRS-iyI/AAAAAAAAAX0/7nZDmrZNz4I/s1600-h/nb65pl_03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 186px;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SRh4LRS-iyI/AAAAAAAAAX0/7nZDmrZNz4I/s320/nb65pl_03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5267091899226688290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dzięki temu mogę pracować w środowisku które ma wszystkie opcje w jednym języku (w angielskim) a jednocześnie korzystam z wyników pracy polskiej grupy tłumaczeniowej.&lt;br /&gt;&lt;br /&gt;Więc nie pozostaje mi nic innego jak podziękować im za ich pracę.&lt;br /&gt;&lt;br /&gt;PS. Jeśli chcecie korzystać z polskiej platformy i oryginalnego IDE to lepiej ściągnąć NetBeans'a w spakowanej wersji zip. Zaoszczędzi to nam poprawiania linków po instalacji polskiej wersji.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-4127799939405523807?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/4127799939405523807/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=4127799939405523807' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4127799939405523807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4127799939405523807'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/11/netbeans-release-candidate-2-sprawa.html' title='NetBeans Release Candidate 2 a sprawa polska'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/SRh4LCEuqPI/AAAAAAAAAXk/yjSA5xi8yh0/s72-c/nb65pl_01.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-3275303843483450583</id><published>2008-10-17T12:18:00.005+02:00</published><updated>2008-10-17T12:30:32.023+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='konferencje'/><title type='text'>Java Developers Day 2008 za nami</title><content type='html'>Konferencję Java Developers Day 2008 uważam za bardzo udaną. Może poza jednym wykładem sponsora ;) (kto był zapewne wie, który mam na myśli).&lt;br /&gt;Sam brałem udział oprócz ogólnych spotkań w sesji 1. czyli &lt;a href="http://mockito.org/"&gt;Mockito&lt;/a&gt; (Szczepan Faber), &lt;a href="http://www.jboss.org/envers/"&gt;Envers&lt;/a&gt; (Adam Warski) oraz CEP czyli Complex Event Processing w wykonaniu Waldka Kota. &lt;br /&gt;Nie mogę nie wspomnieć o ostatnim wykładzie w wykonaniu &lt;a href="http://www.jaceklaskowski.pl"&gt;Jacka Laskowskiego&lt;/a&gt;, który na koniec rozruszał całą salę pokazując przykłady użycia OSGi. Jak to bywa na prelekcjach przykłady dzielą się na te działające i nie ;)&lt;br /&gt;Fajną sprawą było też &lt;a href="http://dworld.pl/2008/10/15/agenda-java-underground/"&gt;Java Underground&lt;/a&gt; prowadzone przez Grzegorza Dudę. Minusem było pomieszczenie w piwnicy. Trochę za duszno było przy tylu zainteresowanych.&lt;br /&gt;Zainteresował mnie temat &lt;a href="http://www.jboss.org/envers/"&gt;wersjonowania encji&lt;/a&gt; więc w najbliższym czasie&lt;br&gt;postaram się więcej przyglądnąć temu tematowi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-3275303843483450583?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/3275303843483450583/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=3275303843483450583' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3275303843483450583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/3275303843483450583'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/10/java-developers-day-2008-za-nami.html' title='Java Developers Day 2008 za nami'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-4276202659816051622</id><published>2008-07-15T13:59:00.003+02:00</published><updated>2008-07-15T14:06:00.510+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Nauka JEE - projekt LinuxAdvices</title><content type='html'>Niedawno, w ramach &lt;a href="http://www.java.pl"&gt;PJUGu&lt;/a&gt;, został powołany do życia projekt mający na celu naukę Javy (w szczególności J2EE).&lt;br /&gt;Więcej informacji na temat projektu na blogu &lt;a href="http://blog.darekzon.com/2008/07/linuxadvices-otwarty-projekt-pjug.html"&gt;Darka&lt;/a&gt;, na stronie &lt;a href="http://code.google.com/p/linuxadvices/"&gt;projektu&lt;/a&gt; oraz na &lt;a href="http://groups.google.pl/group/linuxadvices"&gt;grupie dyskusyjnej&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-4276202659816051622?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/4276202659816051622/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=4276202659816051622' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4276202659816051622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4276202659816051622'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/07/nauka-jee-projekt-linuxadvices.html' title='Nauka JEE - projekt LinuxAdvices'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-2228387609742241394</id><published>2008-06-29T17:12:00.019+02:00</published><updated>2008-10-21T10:17:09.770+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ecplise'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans + Ecplise = ...</title><content type='html'>W sobotę (28.08.2008) miałem okazję uczestniczyć w &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Krakow"&gt;Ecplise DemoCamps&lt;/a&gt; w Krakowie. Spotkanie zaliczam do udanych. W drodze powrotnej przypomniał mi się niedawny wpis na blogu &lt;a href="http://blogs.sun.com/geertjan/entry/running_netbeans_from_eclipse"&gt;Geertjan Wielengi&lt;/a&gt; opisujący jak uruchomić aplikację napisaną z wykorzystaniem &lt;a href="http://platform.netbeans.org/"&gt;NetBeans Platform&lt;/a&gt; z &lt;a href="http://www.eclipse.org/"&gt;Eclipsa&lt;/a&gt;.&lt;br /&gt;Jako, że ostatnio miałem trochę do czynienia z bardzo fajną biblioteką &lt;a href="http://graph.netbeans.org/"&gt;Visual Library&lt;/a&gt;, która wchodzi w skład platformy NetBeans, pomyślałem, że może by spróbować napisać prosty programik w Eclipsie wykorzystujący tą bibliotekę.&lt;br /&gt;Ściągnąłem &lt;a href="http://graph.netbeans.org/files/documents/188/1357/Visual-Library-2.0-pre3.zip"&gt;Visual Library&lt;/a&gt;, odpaliłem Eclipsa i zabrałem się do pracy. Okazało się, że tej pracy nie było dużo (wręcz prawie w ogóle).&lt;br /&gt;Po pierwsze stworzyłem panel, na którym miał wylądować edytor graficzny.&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;package pl.marekklis.graph;&lt;br /&gt;&lt;br /&gt;import java.awt.BorderLayout;&lt;br /&gt;import java.awt.Dimension;&lt;br /&gt;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JScrollPane;&lt;br /&gt;&lt;br /&gt;import org.netbeans.api.visual.graph.GraphScene;&lt;br /&gt;&lt;br /&gt;public class GraphTest extends JPanel{&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  JFrame frame = new JFrame("Graph test");&lt;br /&gt;  frame.setMinimumSize(new Dimension(400,300));&lt;br /&gt;  frame.setSize(400, 300);&lt;br /&gt;  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;  frame.setContentPane(new GraphTest());&lt;br /&gt;  frame.pack();&lt;br /&gt;  frame.setVisible(true);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public GraphTest() {&lt;br /&gt;  initComponents();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; private void initComponents(){&lt;br /&gt;  setLayout(new BorderLayout());&lt;br /&gt;  JScrollPane scrollPane = new JScrollPane();&lt;br /&gt;  add(scrollPane,BorderLayout.CENTER);&lt;br /&gt;  GraphScene scene = new GraphSceneImpl();&lt;br /&gt;  scrollPane.setViewportView(scene.createView());&lt;br /&gt;  add(scene.createSatelliteView(),BorderLayout.WEST);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Po drugie stworzyłem implementacje &lt;a href="http://bits.netbeans.org/6.1/javadoc/org-netbeans-api-visual/org/netbeans/api/visual/graph/GraphScene.html"&gt;GraphScene&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;package pl.marekklis.graph;&lt;br /&gt;&lt;br /&gt;import java.awt.Point;&lt;br /&gt;&lt;br /&gt;import org.netbeans.api.visual.action.ActionFactory;&lt;br /&gt;import org.netbeans.api.visual.action.ConnectProvider;&lt;br /&gt;import org.netbeans.api.visual.action.ConnectorState;&lt;br /&gt;import org.netbeans.api.visual.anchor.AnchorFactory;&lt;br /&gt;import org.netbeans.api.visual.anchor.AnchorShape;&lt;br /&gt;import org.netbeans.api.visual.graph.GraphScene;&lt;br /&gt;import org.netbeans.api.visual.widget.ConnectionWidget;&lt;br /&gt;import org.netbeans.api.visual.widget.LayerWidget;&lt;br /&gt;import org.netbeans.api.visual.widget.Scene;&lt;br /&gt;import org.netbeans.api.visual.widget.Widget;&lt;br /&gt;import org.netbeans.api.visual.widget.general.IconNodeWidget;&lt;br /&gt;import org.openide.util.Utilities;&lt;br /&gt;&lt;br /&gt;public class GraphSceneImpl extends GraphScene&lt;String, String&gt; {&lt;br /&gt; &lt;br /&gt;    private LayerWidget mainLayer;&lt;br /&gt;    private LayerWidget connectionLayer;&lt;br /&gt;    private LayerWidget interactionLayer;&lt;br /&gt;&lt;br /&gt;    public GraphSceneImpl() {&lt;br /&gt;        mainLayer = new LayerWidget(this);&lt;br /&gt;        connectionLayer = new LayerWidget(this);&lt;br /&gt;        interactionLayer = new LayerWidget(this);&lt;br /&gt;        addChild(mainLayer);&lt;br /&gt;        addChild(connectionLayer);&lt;br /&gt;        addChild(interactionLayer);&lt;br /&gt;        Widget w1 = addNode("1. węzeł");&lt;br /&gt;        w1.setPreferredLocation(new Point(10, 100));&lt;br /&gt;        Widget w2 = addNode("2. węzeł");&lt;br /&gt;        w2.setPreferredLocation(new Point(100, 250));&lt;br /&gt;        Widget w3 = addNode("Jakiś kolejny węzeł");&lt;br /&gt;        w3.setPreferredLocation(new Point(250, 250));&lt;br /&gt;        Widget w4 = addNode("Jakiś kolejny węzeł");&lt;br /&gt;        w4.setPreferredLocation(new Point(250, 350));&lt;br /&gt;        getActions().addAction(ActionFactory.createZoomAction());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected Widget attachNodeWidget(String arg0) {&lt;br /&gt;        IconNodeWidget widget = new IconNodeWidget(this);&lt;br /&gt;        if (arg0.startsWith("1")) {&lt;br /&gt;            widget.setImage(Utilities.loadImage("pl/marekklis/graph/&lt;br /&gt;                  resources/gr01.png"));&lt;br /&gt;        } else if (arg0.startsWith("2")) {&lt;br /&gt;            widget.setImage(Utilities.loadImage("pl/marekklis/graph/&lt;br /&gt;                  resources/gr02.png"));&lt;br /&gt;        } else {&lt;br /&gt;            widget.setImage(Utilities.loadImage("pl/marekklis/graph/&lt;br /&gt;                  resources/gr03.png"));&lt;br /&gt;        } &lt;br /&gt;        widget.getActions().addAction(&lt;br /&gt;               ActionFactory.createExtendedConnectAction(&lt;br /&gt;               connectionLayer,new MyConnectProvider()));&lt;br /&gt;        widget.getActions().addAction(&lt;br /&gt;               ActionFactory.createAlignWithMoveAction(&lt;br /&gt;               mainLayer, interactionLayer,            &lt;br /&gt;               ActionFactory.createDefaultAlignWithMoveDecorator()));&lt;br /&gt;        widget.setLabel(arg0);&lt;br /&gt;        mainLayer.addChild(widget);&lt;br /&gt;        return widget;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected Widget attachEdgeWidget(String arg0) {&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected void attachEdgeSourceAnchor(&lt;br /&gt;        String arg0, String arg1, String arg2) {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected void attachEdgeTargetAnchor(&lt;br /&gt;        String arg0, String arg1, String arg2) {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private class MyConnectProvider implements ConnectProvider {&lt;br /&gt;&lt;br /&gt;        public boolean isSourceWidget(Widget source) {&lt;br /&gt;            return source instanceof IconNodeWidget &amp;&amp; source != null &lt;br /&gt;                  ? true : false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public ConnectorState isTargetWidget(Widget src, Widget trg) {&lt;br /&gt;            return src != trg &amp;&amp; trg instanceof IconNodeWidget ? &lt;br /&gt;                ConnectorState.ACCEPT : ConnectorState.REJECT;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public boolean hasCustomTargetWidgetResolver(Scene arg0) {&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public Widget resolveTargetWidget(Scene arg0, Point arg1) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void createConnection(Widget source, Widget target) {&lt;br /&gt;            ConnectionWidget conn = new ConnectionWidget(&lt;br /&gt;                  GraphSceneImpl.this);&lt;br /&gt;            conn.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED);&lt;br /&gt;            conn.setTargetAnchor(AnchorFactory.&lt;br /&gt;                  createRectangularAnchor(target));&lt;br /&gt;            conn.setSourceAnchor(AnchorFactory.&lt;br /&gt;                  createRectangularAnchor(source));&lt;br /&gt;            connectionLayer.addChild(conn);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I oto efekt:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SGexL4KlkHI/AAAAAAAAAO8/ZFV8K6lmk5s/s1600-h/GraphInEclipse.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SGexL4KlkHI/AAAAAAAAAO8/ZFV8K6lmk5s/s320/GraphInEclipse.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5217333510945476722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W naszym okienku mamy działający przykład wykorzystujący Visual Library.&lt;br /&gt;&lt;br /&gt;PS. Biblioteki Visual Library nie musimy ściągać gdyż jest ona częścią Netbeansa i znajduje się w katalog_Netbeansa/platform8/modules/.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-2228387609742241394?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/2228387609742241394/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=2228387609742241394' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/2228387609742241394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/2228387609742241394'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/06/netbeans-ecplise.html' title='NetBeans + Ecplise = ...'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dqSd_vS7ivk/SGexL4KlkHI/AAAAAAAAAO8/ZFV8K6lmk5s/s72-c/GraphInEclipse.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-7564724126942641737</id><published>2008-05-19T20:30:00.017+02:00</published><updated>2008-05-19T22:21:09.964+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Mechanizm aktualizacji w NetBeans Platform</title><content type='html'>Przyjrzyjmy się dzisiaj w jaki sposób możemy wykorzystać &lt;span style="font-style:italic;"&gt;Auto Update Service&lt;/span&gt; do rozprowadzania aktualizacji modułów w aplikacji opartej o &lt;a href="http://platform.netbeans.org"&gt;platformę NetBeans&lt;/a&gt;.&lt;br /&gt;W tym celu załóżmy nowy projekt typu &lt;span style="font-style:italic;"&gt;NetBeans Platform Application&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHT6AYXRjI/AAAAAAAAAM4/KA_GUcaWgvA/s1600-h/update01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHT6AYXRjI/AAAAAAAAAM4/KA_GUcaWgvA/s320/update01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202172038077695538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;oraz projekt modułu o nazwie np &lt;span style="font-style:italic;"&gt;UpdateModule&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHUNgYXRkI/AAAAAAAAANA/FnFGZMXA_3Y/s1600-h/update03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHUNgYXRkI/AAAAAAAAANA/FnFGZMXA_3Y/s320/update03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202172373085144642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po założeniu modułu okno projektów wygląda u mnie następująco:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SDHUlwYXRlI/AAAAAAAAANg/nePdH0vF7Gk/s1600-h/update06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SDHUlwYXRlI/AAAAAAAAANg/nePdH0vF7Gk/s320/update06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202172789696972370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dodajmy do naszego modułu jakiś element, który zmieniając będzie wymagał utworzenie nowej wersji. Niech będzie to okno na którym umieścimy komponent tekstowy, którego tekst będzie się zmieniał w zależności od wersji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHXkAYXRmI/AAAAAAAAANo/4_GP0e2NM34/s1600-h/update07.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHXkAYXRmI/AAAAAAAAANo/4_GP0e2NM34/s320/update07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202176058167084642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHX2gYXRnI/AAAAAAAAANw/EN94DfPvb08/s1600-h/update10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHX2gYXRnI/AAAAAAAAANw/EN94DfPvb08/s320/update10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202176375994664562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Następnym krokiem jest dodanie do naszego modułu pliku typu &lt;span style="font-style:italic;"&gt;Update Center&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHYMgYXRoI/AAAAAAAAAN4/vCoegtaoGYs/s1600-h/update11.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHYMgYXRoI/AAAAAAAAAN4/vCoegtaoGYs/s320/update11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202176753951786626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHYbAYXRpI/AAAAAAAAAOA/0dM6XO5HiU8/s1600-h/update12.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHYbAYXRpI/AAAAAAAAAOA/0dM6XO5HiU8/s320/update12.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202177003059889810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W tym przykładzie jako serwer przechowujący uaktualnienia wybrałem &lt;span style="font-style:italic;"&gt;localhost&lt;/span&gt;. Dokładny adres serwera z aktualizacjami (a konkretnie do pliku updates.xml opisującego aktualne moduły) znajduje się w pliku &lt;span style="font-style:italic;"&gt;Bundle.properties&lt;/span&gt; w pakiecie, do którego dodaliśmy &lt;span style="font-style:italic;"&gt;Update Center&lt;/span&gt;.&lt;br /&gt;Ponieważ szablon projektu &lt;span style="font-style:italic;"&gt;NetBeans Platform Application&lt;/span&gt; nie posiada zaznaczonych bibliotek &lt;span style="font-style:italic;"&gt;Auto Update&lt;/span&gt; musimy to zrobić ręcznie.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHbQAYXRqI/AAAAAAAAAOI/I3x_5eiYmc4/s1600-h/update13.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHbQAYXRqI/AAAAAAAAAOI/I3x_5eiYmc4/s320/update13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202180112616212130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Teraz możemy już opublikować naszą "aplikację" (&lt;span style="font-style:italic;"&gt;Build ZIP Distibution&lt;/span&gt;). Rozpakujmy gdzieś archiwum i uruchommy aplikację. W menu &lt;span style="font-style:italic;"&gt;Help&lt;/span&gt; powinna być pozycja &lt;span style="font-style:italic;"&gt;Check for updates&lt;/span&gt;. Po wybraniu dostaniemy komunikat, że nasza aplikacja jest aktualna.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHcFgYXRrI/AAAAAAAAAOQ/DQB5S7FJRNI/s1600-h/update15.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHcFgYXRrI/AAAAAAAAAOQ/DQB5S7FJRNI/s320/update15.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202181031739213490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Zmieńmy więc tekst w oknie aplikacji (np z "1.0.0" na "1.0.1") i "wypuśćmy" aktualizację. W tym celu zmieniamy we właściwościach modułu &lt;span style="font-style:italic;"&gt;Specification version&lt;/span&gt; na wyższy numer.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHcjQYXRsI/AAAAAAAAAOY/yo9dSU6SSzc/s1600-h/update17.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHcjQYXRsI/AAAAAAAAAOY/yo9dSU6SSzc/s320/update17.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202181542840321730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Budujemy moduły poprzez &lt;span style="font-style:italic;"&gt;Create NBMs&lt;/span&gt;. Moduły (w naszym przypadku będzie to tylko jeden moduł) zostaną utworzone w podkatalogu projektu (&lt;span style="font-style:italic;"&gt;build/updates&lt;/span&gt;). Wystarczy zawartość tego katalogu przekopiować do katalogu, który jest głównym katalogiem naszego serwera www. Ja wykorzystałem serwer Apache.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHd7gYXRtI/AAAAAAAAAOg/75hH2Q0wbVk/s1600-h/update19.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SDHd7gYXRtI/AAAAAAAAAOg/75hH2Q0wbVk/s320/update19.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202183058963777234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jeśli uruchomimy ponownie aplikację (nie ze środowiska IDE ale wersję z wcześniej utworzonego archiwum ZIP) naszym oczom powinien po chwili ukazać się komunikat o dostępności aktualizacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHerQYXRuI/AAAAAAAAAOo/zV74fSkVTic/s1600-h/update20.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHerQYXRuI/AAAAAAAAAOo/zV74fSkVTic/s320/update20.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202183879302530786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po zakończeniu procesu aktualizacji mamy już świeżą wersję aplikacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHfsQYXRvI/AAAAAAAAAOw/Mws_qL3QGz0/s1600-h/update24.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/SDHfsQYXRvI/AAAAAAAAAOw/Mws_qL3QGz0/s320/update24.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202184995994027762" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-7564724126942641737?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/7564724126942641737/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=7564724126942641737' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7564724126942641737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7564724126942641737'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/05/mechanizm-aktualizacji-w-netbeans.html' title='Mechanizm aktualizacji w NetBeans Platform'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dqSd_vS7ivk/SDHT6AYXRjI/AAAAAAAAAM4/KA_GUcaWgvA/s72-c/update01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-4400555598633073883</id><published>2008-05-18T19:26:00.002+02:00</published><updated>2008-05-18T19:31:45.773+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prelekcje'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Materiały z prelekcji</title><content type='html'>Jeśli ktoś jest zainteresowany, to materiały z mojej prelekcji nt NetBeans Platform są dostępne na stronie &lt;a href="http://www.java.pl/?page_id=10"&gt;PJUGu&lt;/a&gt;. Na stronie tej znajdują się również materiały z poprzednich spotkań.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-4400555598633073883?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/4400555598633073883/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=4400555598633073883' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4400555598633073883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4400555598633073883'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/05/materiay-z-prelekcji.html' title='Materiały z prelekcji'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-7725727315439789700</id><published>2008-05-11T17:55:00.002+02:00</published><updated>2008-05-11T18:05:04.000+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prelekcje'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>PJUG - prelekcja nt. NetBeans Platform</title><content type='html'>W najbliższy czwartek (15 maja 2008) o godzinie 19:00 będę miał zaszczyt poprowadzić prelekcję na temat &lt;a href="http://platform.netbeans.org"&gt;platformy NetBeans&lt;/a&gt; w ramach czwartkowych spotkań &lt;a href="http://www.java.pl"&gt;PJUGu&lt;/a&gt;.&lt;br /&gt;Podczas prelekcji powstanie od podstaw prosta aplikacja, która będzie mogła działać samodzielnie bądź jako rozszerzenie NetBeans IDE.&lt;br /&gt;Jeśli czas i słuchacze pozwolą ;) to postaram się zaprezentować także bibliotekę &lt;a href="http://graph.netbeans.org"&gt;Visual Library&lt;/a&gt;, która jest częścią platformy.&lt;br /&gt;Istnieje możliwość wcześniejszej &lt;a href="http://www.jugevents.org/jugevents/event/show.html?id=3779"&gt;rejestracji&lt;/a&gt; na to spotkanie.&lt;br /&gt;&lt;br /&gt;Serdecznie zapraszam.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-7725727315439789700?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/7725727315439789700/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=7725727315439789700' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7725727315439789700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/7725727315439789700'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/05/pjug-prelekcja-nt-netbeans-platform.html' title='PJUG - prelekcja nt. NetBeans Platform'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-4096532494778116771</id><published>2008-04-28T19:46:00.004+02:00</published><updated>2008-04-28T20:04:54.380+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans 6.1 oficjalnie już jest</title><content type='html'>Dzisiaj ukazała się nowa, świeża wersja środowiska &lt;a href="http://www.netbeans.org"&gt;NetBeans&lt;/a&gt; oznaczona numerkiem 6.1.&lt;br /&gt;&lt;br /&gt;Jeśli chodzi o platformę to nowością (to chyba zbyt szumne słowo) jest nowy szablon projektu &lt;span style="font-style:italic;"&gt;NetBeans Platform Application&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SBYP9bd_ZpI/AAAAAAAAAMQ/E3ikxRz9CJ0/s1600-h/NetBeansPlatformApplication.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SBYP9bd_ZpI/AAAAAAAAAMQ/E3ikxRz9CJ0/s320/NetBeansPlatformApplication.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5194356768238429842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Szablon ten posiada już zaznaczone najpopularniejsze moduły wykorzystywane przy tworzeniu typowej aplikacji opartej o platformę.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/SBYQerd_ZqI/AAAAAAAAAMY/15wlYfRTl10/s1600-h/libraries.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/SBYQerd_ZqI/AAAAAAAAAMY/15wlYfRTl10/s320/libraries.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5194357339469080226" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-4096532494778116771?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/4096532494778116771/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=4096532494778116771' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4096532494778116771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/4096532494778116771'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/04/netbeans-61-oficjalnie-ju-jest.html' title='NetBeans 6.1 oficjalnie już jest'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/SBYP9bd_ZpI/AAAAAAAAAMQ/E3ikxRz9CJ0/s72-c/NetBeansPlatformApplication.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-6231307800865773477</id><published>2008-04-14T20:33:00.004+02:00</published><updated>2008-04-14T21:15:06.179+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Netbeans Platform - materiały z prelekcji</title><content type='html'>Jeśli ktoś ma ochotę to można się zapoznać z przykładowym &lt;a href="http://marek.klis.googlepages.com/NetBeansDaySuite.zip"&gt;projektem aplikacji&lt;/a&gt; zbudowanej na &lt;a href="http://platform.netbeans.org"&gt;platformie NetBeans&lt;/a&gt;, który przedstawiałem w ramach &lt;a href="http://www.netbeansday.pl"&gt;NetBeans Day&lt;/a&gt; w Krakowie i Wrocławiu. Dostępna jest także &lt;a href="http://marek.klis.googlepages.com/NetBeansDay.pdf"&gt;prezentacja&lt;/a&gt;.&lt;br /&gt;Przykładowy program został troszkę zmieniony - zdjęcia prelegentów zostały zamienione gdyż używałem ich bez zgody prowadzących.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-6231307800865773477?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/6231307800865773477/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=6231307800865773477' title='Komentarze (9)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/6231307800865773477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/6231307800865773477'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/04/netbeans-platform-materiay-z-prelekcji.html' title='Netbeans Platform - materiały z prelekcji'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-1670460623209394321</id><published>2008-04-13T21:03:00.004+02:00</published><updated>2008-04-13T21:23:48.313+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans RoadShow to już historia</title><content type='html'>Dzisiaj zakończyła się &lt;a href="http://www.netbeansday.pl"&gt;polska edycja NetBeans World Tour 2007-2008&lt;/a&gt;. Czy impreza była udana? Wg mnie tak. Choćby dlatego, że zdobyłem  szlify jako prelegent ;) A czy mój wykład na temat &lt;a href="http://platform.netbeans.org"&gt;platformy NetBeans&lt;/a&gt; można zaliczyć do udanych to już nie mnie oceniać. Sądząc po ilości ziewających to jeszcze dużo przede mną do nauki - ale jak to powiedział &lt;a href="http://jaceklaskowski.pl"&gt;Jacek Laskowski&lt;/a&gt; "ziewający słuchacze to wina poprzednich prelegentów, którzy ich wynudzili" ;)&lt;br /&gt;Chciałbym jeszcze zauważyć, że niedawno ukazała sie kolejna odsłona NetBeans - &lt;a href="http://download.netbeans.org/netbeans/6.1/rc/"&gt;6.1 Release Candidate&lt;/a&gt;. Moja prelekcja we Wrocławiu zawierała już przykład stworzony właśnie na tym wydaniu. Z ciekawostek jakie zauważyłem to choćby nowy szablon projektu aplikacji opartej na platformie.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/SAJc_czP6cI/AAAAAAAAAMI/ZfIVAR_gxC8/s1600-h/NBPlatformApplication.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/SAJc_czP6cI/AAAAAAAAAMI/ZfIVAR_gxC8/s320/NBPlatformApplication.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5188811965816891842" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-1670460623209394321?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/1670460623209394321/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=1670460623209394321' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/1670460623209394321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/1670460623209394321'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/04/netbeans-roadshow-to-ju-historia.html' title='NetBeans RoadShow to już historia'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/SAJc_czP6cI/AAAAAAAAAMI/ZfIVAR_gxC8/s72-c/NBPlatformApplication.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-6900899898610425577</id><published>2008-03-30T20:11:00.009+02:00</published><updated>2008-04-12T13:46:52.043+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Prelekcje'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>NetBeans RoadShow</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-_YpS9HywI/AAAAAAAAAL0/fO_vb0OHdwM/s1600-h/logo_0708_tour_320x180.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-_YpS9HywI/AAAAAAAAAL0/fO_vb0OHdwM/s320/logo_0708_tour_320x180.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5183599900101167874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W dniach 11-13 kwietnia 2008 w Krakowie, Warszawie oraz Wrocławiu odbędzie się &lt;a href="http://netbeansday.pl"&gt;NetBeans RoadShow&lt;/a&gt;, ogólnopolskie tournee będące częścią NetBeans WorldTour 2008 promującego środowisko developerskie &lt;a href="http://www.netbeans.org"&gt;NetBeans&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Każdego dnia, podczas wykładów prowadzonych przez specjalistów z Sun Microsystems oraz rodzimych developerów, przedstawiane zostaną nowinki techniczne oraz możliwości tego wspaniałego narzędzia.&lt;br /&gt;&lt;br /&gt;I ja tam będę ;). 11 kwietnia w Krakowie i 13 kwietnia we Wrocławiu będę chciał przedstawić zalety &lt;a href="http://platform.netbeans.org"&gt;NetBeans Platform&lt;/a&gt;, wyjaśnić podstawowe pojęcia związane z platformą oraz zaprezentować kilka prostych przykładów aplikacji tworzonych przy jej użyciu.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Serdecznie zapraszam&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-6900899898610425577?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/6900899898610425577/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=6900899898610425577' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/6900899898610425577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/6900899898610425577'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/03/netbeans-roadshow.html' title='NetBeans RoadShow'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dqSd_vS7ivk/R-_YpS9HywI/AAAAAAAAAL0/fO_vb0OHdwM/s72-c/logo_0708_tour_320x180.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-194992221806596117</id><published>2008-03-29T15:27:00.009+01:00</published><updated>2008-04-12T13:47:03.376+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Własna zakładka w oknie opcji</title><content type='html'>Dzisiaj będzie o tym jak do okna opcji dodać własną zakładkę.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R-5TtS9HypI/AAAAAAAAAK8/3xo9om-hWUk/s1600-h/options_01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R-5TtS9HypI/AAAAAAAAAK8/3xo9om-hWUk/s320/options_01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5183172258797439634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Możemy założyć nowy projekt albo skorzystać już z jakiegoś istniejącego. Ja założyłem nowy projekt OptionsModule z pakietem org.myorg.option. Dodajemy do pakietu nowy plik typu Options Panel z kategorii Module Development.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-5Tti9HyqI/AAAAAAAAALE/eAvz2zIE8Kw/s1600-h/options_02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-5Tti9HyqI/AAAAAAAAALE/eAvz2zIE8Kw/s320/options_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5183172263092406946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W następnym oknie kreatora wybieramy typ panelu z opcjami jako główny, podajmy nazwy oraz ikonkę.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-5Tti9HyrI/AAAAAAAAALM/lvhrBt9TMTI/s1600-h/options_03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-5Tti9HyrI/AAAAAAAAALM/lvhrBt9TMTI/s320/options_03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5183172263092406962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jako ikonkę podałem &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-5Uoi9HyvI/AAAAAAAAALs/zSTI_vPF_zM/s1600-h/mytypeicon32.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-5Uoi9HyvI/AAAAAAAAALs/zSTI_vPF_zM/s320/mytypeicon32.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5183173276704688882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Następnie kreator prosi nas o podanie prefiksu i pakietu dla nowo tworzonych plików.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/R-5Tty9HysI/AAAAAAAAALU/qvWf71QhZkw/s1600-h/options_04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/R-5Tty9HysI/AAAAAAAAALU/qvWf71QhZkw/s320/options_04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5183172267387374274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po zakończeniu kreatora przejdźmy do edycji pliku OptionPanel.java. Panel będzie formatką, na której użytkownik będzie mógł edytować stworzone przez nas opcje. Dodajmy więc do panelu JCheckBox, JTextField oraz JSlider. Będą to przykłady zmiennych odpowiednio typów boolean, String i int.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R-5TuS9HytI/AAAAAAAAALc/0XdSxNxg5tY/s1600-h/options_05.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R-5TuS9HytI/AAAAAAAAALc/0XdSxNxg5tY/s320/options_05.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5183172275977308882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Przejdźmy teraz do edycji kodu OptionPanel.java. Interesować nas będą dwie metody load() i store(). Pierwsza z nich jest odpowiedzialna za odczytanie zapisanych opcji przy otwarciu panelu a druga za zapisanie opcji przy zamknięciu. Standardowo kreator w tych metodach podpowiada nam w komentarzu jak możemy zapisać czy odczytać nasze zmienne.&lt;br /&gt;&lt;font face="Courier New, monospace"&gt;&lt;font  size="2"&gt;void load(){&lt;br /&gt;&amp;nbsp  jCheckBox1.setSelected(NbPreferences.forModule(OptionPanel.class).&lt;br /&gt;&amp;nbsp&amp;nbsp getBoolean("jCheckBox1", false));&lt;br /&gt;&amp;nbsp  jTextField1.setText(NbPreferences.forModule(OptionPanel.class).&lt;br /&gt;&amp;nbsp&amp;nbsp get("jTextField1", "tekst"));&lt;br /&gt;&amp;nbsp  jSlider1.setValue(NbPreferences.forModule(OptionPanel.class).&lt;br /&gt;&amp;nbsp&amp;nbsp getInt("jSlider1", 50));&lt;br /&gt;}&lt;br /&gt;void store() {&lt;br /&gt;&amp;nbsp  NbPreferences.forModule(OptionPanel.class).&lt;br /&gt;&amp;nbsp&amp;nbsp putBoolean("jCheckBox1", jCheckBox1.isSelected());&lt;br /&gt;&amp;nbsp  NbPreferences.forModule(OptionPanel.class).&lt;br /&gt;&amp;nbsp&amp;nbsp put("jTextField1", jTextField1.getText());&lt;br /&gt;&amp;nbsp  NbPreferences.forModule(OptionPanel.class).&lt;br /&gt;&amp;nbsp&amp;nbsp putInt("jSlider1", jSlider1.getValue());&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;Do zapamiętywania wartości użyłem klasy NbPreferences. Klasa ta tworzy plik o rozszerzeniu properties dla każdego modułu, dla którego zostanie wywołana. W naszym przypadku będzie to plik option.properies w katalogu config\Preferences\org\myorg w katalogu roboczym dla aplikacji. Przykładowo dla NetBeans IDE jest to $HOME\.netbeans\6.1beta. Metody put, putBoolean, putInt zapisują odpowiednio wartość typu String, boolean, int. Pierwszy argument to klucz a drugi to wartość dla tego klucza. Jak łatwo się domyśleć metody get, getBoolean i getInt służą do odczytywania wartości. Pierwszy argument to klucz a drugi to wartość na wypadek gdyby klucz nie został znaleziony lub wartość jest innego typu. Uruchommy więc nasz przykład (Install\Reload in Target Platform). Wybieramy z menu Tools -&amp;gt; Options.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/R-5UbC9HyuI/AAAAAAAAALk/q0l4Tbi6dqQ/s1600-h/options_06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/R-5UbC9HyuI/AAAAAAAAALk/q0l4Tbi6dqQ/s320/options_06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5183173044776454882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po ustawieniu jakiś wartości w polach i zamknięciu (za pomocą przycisku OK) i ponownym otwarciu wartości w polach powinny być ustawione tak jak w momencie zamykania okna. Jeśli teraz gdziekolwiek w naszym programie chcemy skorzystać z jakiejś opcji wystarczy pobrać ją w ten sam sposób jak to było wyżej pokazane w metodzie load().&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-194992221806596117?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/194992221806596117/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=194992221806596117' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/194992221806596117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/194992221806596117'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/03/wasna-zakadka-w-oknie-opcji.html' title='Własna zakładka w oknie opcji'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/R-5TtS9HypI/AAAAAAAAAK8/3xo9om-hWUk/s72-c/options_01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-6185365464607687329</id><published>2008-03-28T18:20:00.012+01:00</published><updated>2008-04-12T13:47:15.011+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Nowy typ plików w Netbeans</title><content type='html'>Opiszę dzisiaj w jaki sposób dodać obsługę własnego typu plików. Załóżmy ze mamy jakiś plik z rozszerzeniem *.mtyp i chcemy aby pliki tego typu były w jakiś sposób wyróżnione.&lt;br /&gt;Stwórzmy w tym celu nowy moduł o nazwie &lt;span style="font-style:italic;"&gt;MyTypeModule&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R-0tXi9HyhI/AAAAAAAAAJ8/3ipqrAwDogU/s1600-h/NewFileType_01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R-0tXi9HyhI/AAAAAAAAAJ8/3ipqrAwDogU/s320/NewFileType_01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5182848628716718610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W nowym module wybieramy z kreatora nowy plik typu File Type.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-0tXy9HyiI/AAAAAAAAAKE/rzhpAgHZw9g/s1600-h/NewFileType_02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-0tXy9HyiI/AAAAAAAAAKE/rzhpAgHZw9g/s320/NewFileType_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5182848633011685922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W następnym oknie kreatora podajemy nowy typ MIME i rozszerzenia dla naszego pliku.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/R-0tYC9HyjI/AAAAAAAAAKM/YRRSDCx4Z4o/s1600-h/NewFileType_03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/R-0tYC9HyjI/AAAAAAAAAKM/YRRSDCx4Z4o/s320/NewFileType_03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5182848637306653234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W następnym oknie podajemy prefiks dla plików tworzonych przez kreatora dla obsługi naszego pliku oraz ikonę jaką będą miały pliki *.mtyp.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/R-0tYC9HykI/AAAAAAAAAKU/Tfdgnxy6-a4/s1600-h/NewFileType_04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/R-0tYC9HykI/AAAAAAAAAKU/Tfdgnxy6-a4/s320/NewFileType_04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5182848637306653250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jako ikonkę podałem ten oto plik &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-0uQy9HyoI/AAAAAAAAAK0/soXqOOE9bQ4/s1600-h/mytypeicon16.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/R-0uQy9HyoI/AAAAAAAAAK0/soXqOOE9bQ4/s320/mytypeicon16.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5182849612264229506" /&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Po zakończeniu kreatora otrzymujemy kilka nowych plików. W zasadzie po tych kilku kliknięciach myszką mamy już gotowy moduł wyróżniający pliki z rozszerzeniem mtyp.&lt;br /&gt;Plik &lt;span style="font-style:italic;"&gt;MyTypeTemplate.mtyp&lt;/span&gt; jest szablonem dla nowo tworzonych plików, w nim możemy wpisać co mają zawierać nowo tworzone pliki. W pliku &lt;span style="font-style:italic;"&gt;Bundles.properties&lt;/span&gt; w pakiecie, w którym znajdują się pliki &lt;span style="font-style:italic;"&gt;MyType*&lt;/span&gt; możemy zmienić linijkę &lt;span style="font-style:italic;"&gt;Templates/Other/MyTypeTemplate.mtyp=Nowy plik mojego typu (mtyp)&lt;/span&gt; co spowoduje wyświetlanie nowej nazwy w kreatorze dodawania nowego pliku. Jeśli wszystkie zmiany już gotowe pora wypróbować nasz moduł. Możemy go zainstalować np. w środowisku IDE lub stworzyć plik modułu nbm i zainstalować.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/R-0tYS9HylI/AAAAAAAAAKc/5NqP9f8XnlA/s1600-h/NewFileType_05.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/R-0tYS9HylI/AAAAAAAAAKc/5NqP9f8XnlA/s320/NewFileType_05.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5182848641601620562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Po wybraniu &lt;span style="font-style:italic;"&gt;Install/Reload in Target Platform&lt;/span&gt; uruchomi się nam Netbeans jeszcze raz. W nowo uruchomionym środowisku utwórzmy jakiś projekt (np. &lt;span style="font-style:italic;"&gt;JavaApplication1&lt;/span&gt;) a następnie spróbujmy dodać do niego nowy plik.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/R-0uBC9HymI/AAAAAAAAAKk/5a2NkH47igA/s1600-h/NewFileType_06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/R-0uBC9HymI/AAAAAAAAAKk/5a2NkH47igA/s320/NewFileType_06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5182849341681289826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Jak widzimy w kategorii &lt;span style="font-style:italic;"&gt;Other&lt;/span&gt; pojawiła się nowa pozycja. Po wybraniu nazwy w drzewku projektu pojawił się nowo utworzonym plik z treścią, która zdefiniowaliśmy w pliku &lt;span style="font-style:italic;"&gt;Bundles.properties&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/R-0uBS9HynI/AAAAAAAAAKs/gv-P7B1zOPA/s1600-h/NewFileType_07.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/R-0uBS9HynI/AAAAAAAAAKs/gv-P7B1zOPA/s320/NewFileType_07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5182849345976257138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W najbliższym czasie spróbuje opisać jak do edytora plików mtyp dodać własne kolorowanie składni oraz podpowiedzi.r&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-6185365464607687329?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/6185365464607687329/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=6185365464607687329' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/6185365464607687329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/6185365464607687329'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/03/nowy-typ-plikw-w-netbeans.html' title='Nowy typ plików w Netbeans'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/R-0tXi9HyhI/AAAAAAAAAJ8/3ipqrAwDogU/s72-c/NewFileType_01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-989374410401320930</id><published>2008-03-06T20:05:00.047+01:00</published><updated>2008-04-12T13:47:26.166+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Tworzenie aplikacji z wykorzystaniem NetBeans Platform</title><content type='html'>Na prostym przykładzie spróbuję pokazać jak można wykorzystać Netbeans Platform do tworzenia aplikacji desktopowej.&lt;br /&gt;A więc zaczynamy. Będzie nam potrzebny Netbeans (6.0) ;)&lt;br /&gt;Zaczynamy od utworzenia nowego projektu (typu NetBeans Module Suite).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R90xZ9sqLaI/AAAAAAAAAHE/z6szCvU9UyU/s1600-h/photo_01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R90xZ9sqLaI/AAAAAAAAAHE/z6szCvU9UyU/s320/photo_01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178349468674305442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nazywamy nasz projekt &lt;span style="font-style:italic;"&gt;SampleSuite &lt;/span&gt;i zapisujemy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/R904zdsqLpI/AAAAAAAAAI8/1z1ayxUPu5U/s1600-h/photo_02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/R904zdsqLpI/AAAAAAAAAI8/1z1ayxUPu5U/s320/photo_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178357603342364306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;W ustawieniach dla nowo utworzonego projektu z sekcji &lt;span style="font-style:italic;"&gt;Libraries &lt;/span&gt;wybieramy tylko moduły z klastra Platform7 (inne nie będą nam potrzebne). W sekcji &lt;span style="font-style:italic;"&gt;Build &lt;/span&gt;wybieramy &lt;span style="font-style:italic;"&gt;Create standalone application&lt;/span&gt;. Możemy wybrać jaki tytuł będzie nosiła nasza aplikacja, jaką będzie miała ikonę  oraz jakim obrazkiem się z nami przywita (sekcja &lt;span style="font-style:italic;"&gt;Splash Screen&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/R90xwtsqLbI/AAAAAAAAAHM/1bWWdtnuYJM/s1600-h/photo_03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/R90xwtsqLbI/AAAAAAAAAHM/1bWWdtnuYJM/s320/photo_03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178349859516329394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W tym momencie mamy już gotowy szkielet aplikacji, który można uruchomić.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R90x_9sqLcI/AAAAAAAAAHU/LUMRH68ys2w/s1600-h/photo_04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R90x_9sqLcI/AAAAAAAAAHU/LUMRH68ys2w/s320/photo_04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178350121509334466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Utworzymy teraz nowy moduł, który dodamy do aplikacji. W skład modułu wejdzie drzewko. Po zaznaczeniu jakiegoś liścia w drzewie, po prawej stronie w oknie &lt;span style="font-style:italic;"&gt;Properites&lt;/span&gt; pojawią się parametry zaznaczonego obiektu.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R90yV9sqLdI/AAAAAAAAAHc/bY1Gx1JvlXk/s1600-h/photo_05.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R90yV9sqLdI/AAAAAAAAAHc/bY1Gx1JvlXk/s320/photo_05.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178350499466456530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wprowadzamy nazwę projektu i nazwę pakietu głównego i dodajemy go do projektu aplikacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/R90yjdsqLeI/AAAAAAAAAHk/OHD3gWWThz4/s1600-h/photo_06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/R90yjdsqLeI/AAAAAAAAAHk/OHD3gWWThz4/s320/photo_06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178350731394690530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R90yu9sqLfI/AAAAAAAAAHs/FVyAAn5psDA/s1600-h/photo_07.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R90yu9sqLfI/AAAAAAAAAHs/FVyAAn5psDA/s320/photo_07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178350928963186162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wszystkie nowe klasy będziemy tworzyć w nowo utworzonym projekcie modułu. Utworzymy teraz okno z drzewkiem nawigatora.  Aby nasze drzewko miało co pokazywać utwórzmy klasę &lt;span style="font-style:italic;"&gt;MyDataObject&lt;/span&gt;, która będzie reprezentowała jakieś dane. W praktyce klasa ta może reprezentować np. dane z pliku (dla plików mamy gotową klasę &lt;a href="http://bits.netbeans.org/6.0/javadoc/org-openide-filesystems/org/openide/filesystems/FileObject.html"&gt;FileObject&lt;/a&gt;) lub z bazy danych.&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;&lt;br /&gt;public class MyDataObject {&lt;br /&gt;    private static int count = 0;&lt;br /&gt;    private final int index;&lt;br /&gt;    private final String name;&lt;br /&gt;    &lt;br /&gt;    public MyDataObject(){&lt;br /&gt;        index = count++;&lt;br /&gt;        name = "Nasz " + index + ". obiekt";&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public String getName(){&lt;br /&gt;        return name;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public int getIndex(){&lt;br /&gt;        return index;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Każda nowo powołana instancja obiektu &lt;span style="font-style:italic;"&gt;MyDataObject &lt;/span&gt;będzie posiadała kolejny numer.&lt;br /&gt;Aby można było zbudować drzewo na podstawie &lt;span style="font-style:italic;"&gt;MyDataObject &lt;/span&gt;potrzebujemy jeszcze klasy typu &lt;a href="http://bits.netbeans.org/6.0/javadoc/org-openide-nodes/org/openide/nodes/Node.html"&gt;Node&lt;/a&gt;. Node jest warstwą prezentacji dla danych (&lt;span style="font-style:italic;"&gt;MyDataObject&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;public class MyDataNode extends AbstractNode{&lt;br /&gt;    public MyDataNode(DataObject obj) {&lt;br /&gt;        super(Children.LEAF, Lookups.singleton(obj));&lt;br /&gt;        setDisplayName(obj.getName());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public MyDataNode() {&lt;br /&gt;        super(Children.create(new MyDataChildFactory(), true));&lt;br /&gt;        setDisplayName("Korzeń");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Jak widzimy klasa &lt;span style="font-style:italic;"&gt;MyDataNode &lt;/span&gt;rozszerza klasę &lt;span style="font-style:italic;"&gt;AbstractNode&lt;/span&gt;. Po wklejeniu (lub wpisaniu) powyższego kodu klasy NetBeans najprawdopodobniej nie rozpozna klasy &lt;span style="font-style:italic;"&gt;AbstractNode&lt;/span&gt;. Musimy do naszego projektu modułu dodać odpowiednie zależności. W tym celu we właściwościach projektu, w kategorii &lt;span style="font-style:italic;"&gt;Libraries &lt;/span&gt;wybieramy &lt;span style="font-style:italic;"&gt;Add dependencies &lt;/span&gt;i szukamy modułu zawierającego klasę &lt;span style="font-style:italic;"&gt;AbstractNode&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/R90zjtsqLhI/AAAAAAAAAH8/-FweNOsPoTw/s1600-h/photo_08.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/R90zjtsqLhI/AAAAAAAAAH8/-FweNOsPoTw/s320/photo_08.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178351835201285650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dodajmy od razu wszystkie moduły, które będą nam później potrzebne&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dqSd_vS7ivk/R90zPdsqLgI/AAAAAAAAAH0/i81dwF-Yx50/s1600-h/photo_15.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_dqSd_vS7ivk/R90zPdsqLgI/AAAAAAAAAH0/i81dwF-Yx50/s320/photo_15.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178351487308934658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dalej nierozpoznana pozostaje klasa MyDataChildFactory. Jest to fabryka liści-potomków, którą właśnie utworzymy.&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;public class MyDataChildFactory extends ChildFactory&lt;MyDataObject&gt;{&lt;br /&gt;    @Override&lt;br /&gt;    protected boolean createKeys(List&lt;MyDataObject&gt; list) {&lt;br /&gt;        for (int i = 0; i &lt; 10; i++) {&lt;br /&gt;            list.add(new MyDataObject());&lt;br /&gt;        }&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    protected Node createNodeForKey(MyDataObject obj) {&lt;br /&gt;        return new MyDataNode(obj);&lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Klasa &lt;span style="font-style:italic;"&gt;MyDataNode &lt;/span&gt;posiada dwa konstruktory. Domyślny konstruktor tworzy korzeń drzewka z &lt;span style="font-style:italic;"&gt;MyDataChildFactory &lt;/span&gt;jako fabryką dzieci dla niego. Drugi konstruktor tworzy obiekt &lt;span style="font-style:italic;"&gt;MyDataNode &lt;/span&gt;jako liść bez dzieci (&lt;span style="font-style:italic;"&gt;Children.LEAF&lt;/span&gt;). Mechanizm &lt;span style="font-style:italic;"&gt;Lookup&lt;/span&gt; jest tematem na osobny wykład. W wielkim skrócie można powiedzieć, że &lt;span style="font-style:italic;"&gt;Lookup&lt;/span&gt; jest mapą gdzie kluczem jest typ obiektu a wartością instancje obiektów tego typu. &lt;span style="font-style:italic;"&gt;Lookups.singleton(obj)&lt;/span&gt; "dba" aby w mapie była tylko jedna instancja obiektu.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;MyDataChildFactory&lt;/span&gt; posiada dwie metody:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;createKeys&lt;/span&gt; tworzy listę kluczy (obiektów &lt;span style="font-style:italic;"&gt;MyDataObject&lt;/span&gt;), dla których będą utworzone nody (&lt;span style="font-style:italic;"&gt;węzły&lt;/span&gt;) reprezentujące je w strukturze drzewa&lt;br /&gt; &lt;span style="font-style:italic;"&gt;createNodeForKey&lt;/span&gt; jest wywoływana dla każdego stworzonego klucza w pierwszej metodzie.&lt;br /&gt;&lt;br /&gt;Mając już wszystkie potrzebne klasy możemy przejść do stworzenia drzewka.&lt;br /&gt;Tworzymy nowy plik typu &lt;span style="font-style:italic;"&gt;Window Component&lt;/span&gt; z kategorii &lt;span style="font-style:italic;"&gt;Module development&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/R90z2tsqLiI/AAAAAAAAAIE/YwCr3sHpN_I/s1600-h/photo_09.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/R90z2tsqLiI/AAAAAAAAAIE/YwCr3sHpN_I/s320/photo_09.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178352161618800162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Window position&lt;/span&gt; ustawiamy jako explorer i zaznaczymy otwieranie przy starcie aplikacji.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R900A9sqLjI/AAAAAAAAAIM/eSVGJYVatyw/s1600-h/photo_10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R900A9sqLjI/AAAAAAAAAIM/eSVGJYVatyw/s320/photo_10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178352337712459314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W następnym oknie kreatora podajemy &lt;span style="font-style:italic;"&gt;Class name prefix&lt;/span&gt; (dla naszej aplikacji będzie to &lt;span style="font-style:italic;"&gt;Tree&lt;/span&gt;). Po tym kreator utworzy dla nas 4 pliki &lt;span style="font-style:italic;"&gt;TreeAction.java&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;TreeTopComponent.java&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;TreeTopComponentSettings.xml&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;TreeTopComponentWstcref.xml&lt;/span&gt;. Pliki xml są plikami konfiguracyjnymi. &lt;span style="font-style:italic;"&gt;TreeTopComponent&lt;/span&gt; to obiekt klasy &lt;span style="font-style:italic;"&gt;TopComponent&lt;/span&gt; (póki co możemy przyjąć, że jest to panel, na którym możemy poukładać różne kontrolki Swing), &lt;span style="font-style:italic;"&gt;TreeAction &lt;/span&gt;to klasa akcji pozwalająca otwierać ten panel jako nowe okno w naszej aplikacji. Jeśli uruchomimy aplikację zobaczymy, że pojawiło się nowe okno ("Tree Window") oraz nowa pozycja w menu Windows (Windows -&gt; Tree). Nazwy dla naszego okna i akcji możemy zmienić w pliku &lt;span style="font-style:italic;"&gt;Bundle.properties&lt;/span&gt; w pakiecie, w którym te klasy się znajdują (w naszym przypadku &lt;span style="font-style:italic;"&gt;org.myorg.samplemodule.tree.Bundle.properties&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Przejdźmy do edycji pliku &lt;span style="font-style:italic;"&gt;TreeTopComponent.java&lt;/span&gt;. W trybie Design ustawiamy &lt;span style="font-style:italic;"&gt;BorderLayout&lt;/span&gt; jako layout głównego komponentu (&lt;span style="font-style:italic;"&gt;TopComponent &lt;/span&gt;w oknie inspektora). W „środek” tego layouta wstawiamy z palety komponentów &lt;span style="font-style:italic;"&gt;JScrollPane&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dqSd_vS7ivk/R900ztsqLkI/AAAAAAAAAIU/y-69hhXQU9Q/s1600-h/photo_11.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dqSd_vS7ivk/R900ztsqLkI/AAAAAAAAAIU/y-69hhXQU9Q/s320/photo_11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178353209590820418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We właściwościach &lt;span style="font-style:italic;"&gt;jScrollPane1 &lt;/span&gt;w sekcji &lt;span style="font-style:italic;"&gt;Code&lt;/span&gt; ustawiamy &lt;span style="font-style:italic;"&gt;Custom Creation Code&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R901Y9sqLmI/AAAAAAAAAIk/9nMtEaqOh8o/s1600-h/photo_13.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R901Y9sqLmI/AAAAAAAAAIk/9nMtEaqOh8o/s320/photo_13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178353849540947554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Klasa &lt;span style="font-style:italic;"&gt;BeanTreeView &lt;/span&gt;jest rozszerzeniem klasy &lt;span style="font-style:italic;"&gt;JScrollPane&lt;/span&gt;. Wyświetla ona węzły (Node) w postaci drzewka. Musimy jeszcze uzupełnić import dla klasy &lt;span style="font-style:italic;"&gt;BeanTreeView&lt;/span&gt;. Przechodzimy do trybu edycji Source i dodajemy brakujący import.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dqSd_vS7ivk/R901wNsqLnI/AAAAAAAAAIs/0qFedrjQFpU/s1600-h/photo_14.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dqSd_vS7ivk/R901wNsqLnI/AAAAAAAAAIs/0qFedrjQFpU/s320/photo_14.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178354248972906098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Musimy jeszcze do naszego drzewa dodać obsługę zdarzeń użytkownika (zaznaczanie liścia, itp). W tym celu dodajemy interfejs &lt;span style="font-style:italic;"&gt;ExplorerManager.Provider&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;final class TreeTopComponent extends TopComponent implements ExplorerManager.Provider{&lt;br /&gt;    private ExplorerManager manager = new ExplorerManager();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;który wprowadza tylko jedną metodę:&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;public ExplorerManager getExplorerManager() {&lt;br /&gt;  return manager;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;W konstruktorze okna wskazujemy menadżerowi, jaki obiekt ma być pokazany w drzewie.&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;private TreeTopComponent() {&lt;br /&gt;    ...&lt;br /&gt;    manager.setRootContext(new MyDataNode());&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Po uruchomieniu naszej aplikacji, pokaże się nam już drzewko, jednak aplikacja nie będzie na razie w żaden sposób reagowała na zaznaczenie obiektu. Ponieważ chcemy, aby po zaznaczeniu liścia w drzewie, w oknie Properties pokazały się parametry zaznaczonego obiektu, musimy do definicji naszego węzła dodać obsługę properties.&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;@Override&lt;br /&gt;protected Sheet createSheet() {&lt;br /&gt;    Sheet sheet = Sheet.createDefault();&lt;br /&gt;    Sheet.Set set = Sheet.createPropertiesSet();&lt;br /&gt;    MyDataObject data = getLookup().lookup(MyDataObject.class);&lt;br /&gt;&lt;br /&gt;    try {&lt;br /&gt;        Property indexProp = new PropertySupport.Reflection(data, Integer.class, "getIndex", null);&lt;br /&gt;        Property nameProp = new PropertySupport.Reflection(data, String.class, "getName", null);&lt;br /&gt;        indexProp.setName("Index");&lt;br /&gt;        nameProp.setName("Name");&lt;br /&gt;        set.put(indexProp);&lt;br /&gt;        set.put(nameProp);&lt;br /&gt;    } catch (NoSuchMethodException ex) {&lt;br /&gt;        Exceptions.printStackTrace(ex);&lt;br /&gt;    }&lt;br /&gt;    sheet.put(set);&lt;br /&gt;    return sheet;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Musimy nadpisać metodę &lt;span style="font-style:italic;"&gt;createSheet()&lt;/span&gt; w &lt;span style="font-style:italic;"&gt;MyDataNode&lt;/span&gt;. Aby okno properties wiedziało, że zmieniono zaznaczenie musimy jeszcze dodać do konstruktora TreeTopComponent linijkę:&lt;br /&gt;&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;&lt;br /&gt;associateLookup(ExplorerUtils.createLookup(manager, getActionMap()));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Uruchamiamy aplikację:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dqSd_vS7ivk/R903E9sqLoI/AAAAAAAAAI0/YXEIAAenviM/s1600-h/photo_16.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_dqSd_vS7ivk/R903E9sqLoI/AAAAAAAAAI0/YXEIAAenviM/s320/photo_16.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5178355704966819458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aby drzewko wyglądało tak jak na powyższym rysunku (wiele poziomów) wystarczy w konstruktorze &lt;span style="font-style:italic;"&gt;MyDataNode(MyDataObject object)&lt;/span&gt;&lt;br /&gt;zmienić dzieci liścia z &lt;span style="font-style:italic;"&gt;Children.LEAF&lt;/span&gt; na &lt;span style="font-style:italic;"&gt;Children.create(new MyChildFactory(), true)&lt;/span&gt; tak jak w domyślnym konstruktorze.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-989374410401320930?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/989374410401320930/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=989374410401320930' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/989374410401320930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/989374410401320930'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2008/03/tworzenie-aplikacji-z-wykorzystaniem.html' title='Tworzenie aplikacji z wykorzystaniem NetBeans Platform'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dqSd_vS7ivk/R90xZ9sqLaI/AAAAAAAAAHE/z6szCvU9UyU/s72-c/photo_01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-62160705063034256.post-6629825120660365694</id><published>2007-11-23T13:54:00.000+01:00</published><updated>2007-12-04T08:18:35.391+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='komunikacja'/><title type='text'>Java: Obsługa portu szeregowego (Windows)</title><content type='html'>Do obsługi komunikacja przez port szeregowy użyję biblioteki &lt;a href="http://www.rxtx.org/"&gt;RXTXComm&lt;/a&gt;. Potrzebne są dwa pliki: jeden to plik RXTXComm.jar, który dołączamy do projektu, drugi to rxtxSerial.dll (biblioteka ta jest tylko dla systemu Windows, ale można wykorzystać dołączoną do rxtxcomm ibrxtxSerial.so), który należy umieścić np. w katalogu głównym aplikacji, która będzie korzystać z biblioteki. Więcej na ten temat można znaleźć na stronie domowej projektu.&lt;br /&gt;Klasa SerialComm jest singletonem odpowiedzialnym za inicjację połączenia. Jeśli uda się otworzyć wybrany port, SerialComm inicjuje dwa strumienie &lt;i&gt;inputStream&lt;/i&gt; i &lt;i&gt;outputStream&lt;/i&gt; - pierwszy to strumień danych przychodzących z portu, a drugi służy do wysyłania danych poprzez otwarty port. Strumień wejściowy przekazuję do obiektu klasy &lt;i&gt;CommunicationReader&lt;/i&gt;, który odczytuje dane wejściowe.&lt;br /&gt;Metoda &lt;i&gt;sendMessage(String msg)&lt;/i&gt; wykorzystuje &lt;i&gt;outputStream&lt;/i&gt; do wysyłania danych poprzez otwarty port.&lt;br /&gt;&lt;pre class="moz-signature" cols="72"&gt;public class SerialComm {    &lt;br /&gt;private static SerialComm instance = null;&lt;br /&gt;private Enumeration portList;&lt;br /&gt;private CommPortIdentifier portId;&lt;br /&gt;private SerialPort serialPort = null;&lt;br /&gt;private OutputStream outputStream;&lt;br /&gt;private InputStream inputStream;&lt;br /&gt;private Thread readThread;&lt;br /&gt;private CommunicationReader reader;&lt;br /&gt;&lt;br /&gt;private SerialComm() {}&lt;br /&gt;&lt;br /&gt;public static synchronized SerialComm getInstance() {&lt;br /&gt;  if (instance == null) {&lt;br /&gt;    instance = new SerialComm();&lt;br /&gt;  }&lt;br /&gt;  return instance;&lt;br /&gt;}    &lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Inicjalizacja portu komunikacyjnego&lt;br /&gt;* Mozliwe zwracane wartosci:&lt;br /&gt;* 0 - podlaczono do portu&lt;br /&gt;* &gt;0 wystapil wyjatek&lt;br /&gt;* @return status polaczenia&lt;br /&gt;*/&lt;br /&gt;private int connect(String portName, int baudrate, int dataBits, int stopBits, int parity) {&lt;br /&gt;portList = CommPortIdentifier.getPortIdentifiers();&lt;br /&gt;while (portList.hasMoreElements()) {&lt;br /&gt;  portId = (CommPortIdentifier) portList.nextElement();&lt;br /&gt;  if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {             &lt;br /&gt;    if (portId.getName().equals(portName)) {&lt;br /&gt;      try {&lt;br /&gt;        serialPort = (SerialPort) portId.open("App", 2000);&lt;br /&gt;        outputStream = serialPort.getOutputStream();                      &lt;br /&gt;        inputStream = serialPort.getInputStream();             &lt;br /&gt;        serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);&lt;br /&gt;      } catch (UnsupportedCommOperationException e) {                      &lt;br /&gt;        serialPort = null;&lt;br /&gt;        return 10;&lt;br /&gt;      } catch (PortInUseException e) {&lt;br /&gt;        serialPort = null;&lt;br /&gt;        return 20;&lt;br /&gt;      } catch (IOException e) {&lt;br /&gt;        serialPort = null;&lt;br /&gt;        return 30;&lt;br /&gt;      }&lt;br /&gt;      reader = new CommunicationReader(inputStream);                  &lt;br /&gt;      readThread = new Thread(reader, "SerialComm read");                  &lt;br /&gt;      readThread.start();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public boolean sendMessage(String msg) {&lt;br /&gt;if (portId.getName().length() &gt; 0) {&lt;br /&gt;  try {&lt;br /&gt;    outputStream.write(msg.getBytes("ISO-8859-1"));&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;    return false;&lt;br /&gt;  }&lt;br /&gt;}else{&lt;br /&gt;  return false;&lt;br /&gt;}&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/62160705063034256-6629825120660365694?l=marekklis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://marekklis.blogspot.com/feeds/6629825120660365694/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=62160705063034256&amp;postID=6629825120660365694' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/6629825120660365694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/62160705063034256/posts/default/6629825120660365694'/><link rel='alternate' type='text/html' href='http://marekklis.blogspot.com/2007/11/java-obsuga-portu-szeregowego-windows.html' title='Java: Obsługa portu szeregowego (Windows)'/><author><name>Marek Kliś</name><uri>http://www.blogger.com/profile/14954353505428736100</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_dqSd_vS7ivk/R-_dOi9HyyI/AAAAAAAAAMA/-wDpcy2kzbc/S220/marek.jpg'/></author><thr:total>0</thr:total></entry></feed>
