tag:blogger.com,1999:blog-621607050630342562024-02-20T03:14:22.244+01:00Marek Kliś - różności okołojavowe i nie tylkoMarek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-62160705063034256.post-53340706454319105832009-10-21T20:14:00.003+02:002009-10-21T20:24:23.540+02:00JDD 2009W ostatni piątek (tj. 16.10.09) miała w Krakowie miejsce czwarta odsłona konferencji Java Developers' Day.<br /><br />Konferencja zaczęła się od wykładu jednego ze sponsorów czyli Red Hat. Tom Baeyens i Joram Barrez opowiedzieli o jBPM.<br /><br />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 ;)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqqEVTXsSY9749jxhIhSxRDAhA2lRJmFrqcaB79e8tuQOcndbAvITmqlFMAlb2tvjBDW_nc_Dh_x6p8uHU3PT21gMX4R2YQ-8vFz1IDIDUWdWEyi97T_fsh-Pl-lmXhrvi1UJcli0vzfw/s1600-h/jdd2009.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 269px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqqEVTXsSY9749jxhIhSxRDAhA2lRJmFrqcaB79e8tuQOcndbAvITmqlFMAlb2tvjBDW_nc_Dh_x6p8uHU3PT21gMX4R2YQ-8vFz1IDIDUWdWEyi97T_fsh-Pl-lmXhrvi1UJcli0vzfw/s320/jdd2009.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5395120492758125186" /></a><br /><br />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.<br /><br />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.<br /><br />Ostatni wykład poprowadził Scott Davis opowiadając o REST i pokazując klika przykładów z wykorzystaniem Groovy i Grails.<br /><br />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.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-3140017388134269932009-07-05T20:49:00.003+02:002009-07-05T21:39:39.334+02:00Javarsovia 2009 już za namiW tym roku po raz pierwszy wybrałem się do Warszawy na <a href="http://javarsovia.pl/">Javarsovie</a>. 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 <a href="http://ordinarythoughts.org/">Marek Goldmann</a>. 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.<br />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ąć. <br />Pierwszy wykład, na który się udałem to <a href="http://warski.org/">Adam Warski</a> i <span style="font-style:italic;"><a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&task=view&id=112&Itemid=#Typesafe">Co jeszcze mogą nam dać anotacje - weryfikacja statyczna</a></span>.<br />Jako drugi wybrałem wykład Kuby Kubryńskiego na temat <a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&task=view&id=112&Itemid=#CI">Ciągłej Integracja w procesie wytwarzania oprogramowania</a>.<br />Trzeci wykład to <a href="http://paulszulc.wordpress.com/">Paweł Szulc</a> i Apache Wicket.<br />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.<br />Po przerwie obiadowej przyszła kolej na warsztaty <a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&task=view&id=112&Itemid=#Warsztaty_coding">Coding by example</a> pod patronatem Bartosza Bańkowskiego, Igora Czechowskiego i Szczepana Fabera. Ponieważ byłem wcześniej (na <a href="http://08.jdd.org.pl/">JDD</a> oraz <a href="http://www.geecon.org/">GeeCONie</a>) 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. <br />Warsztaty były naprawdę na wysokim poziomie - i to nie tylko dlatego, że dostaliśmy po kubku jako pierwsi, którzy skończą ćwiczenie.<br />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 <a href="http://jaceklaskowski.pl/">Jacka Laskowskiego</a>.<br />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 <a href="http://javarsovia.pl/">Javarsovii</a>, których wcześniej nie znałem.<br />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.<br />Nie mam porównania z poprzednimi edycjami <a href="http://javarsovia.pl/">Javarsovii</a> ale tę oceniam wysoko i bardzo dziękuję <a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&task=view&id=98&Itemid=">kapitule konferencji</a> za ich wkład w to, że <a href="http://javarsovia.pl/">Javarsovia</a> wypadła tam znakomicie.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-25034089571644409492009-05-08T21:26:00.003+02:002009-05-08T21:31:23.502+02:00I po GeeCONieDzisiaj zakończyła się pierwsza (i mam nadzieję, że nie ostatnia) edycja konferencji <a href="http://www.geecon.org">GeeCON</a>. 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.<br/>Przygotowanie oceniam bardzo wysoko. Mojego zdania nie zmienia nawet kilka "sprzętowych" wpadek.<br/>Pozostaje mi tylko podziękować chłopakom z <a href="http://www.geecon.org/main/organizers">GeeCON Team</a> za fantastyczną robotę, którą odwalili i życzyć wytrwałości, sponsorów, oraz pomocników, żeby <a href="http://www.geecon.org">GeeCON</a> zagościł na stałe w kalendarzu imprez javowych.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-18022783658850315682009-03-29T19:14:00.010+02:002009-03-29T19:51:08.394+02:00NetBeans 6.7M2 i instalator platformowych aplikacjiOd jakiegoś czasu jest dostępna wersja <a href="http://bits.netbeans.org/download/6.7/m2/">M2 NetBeans 6.7</a> - wydanie stabilnej wersji jest <a href="http://www.netbeans.org/community/releases/roadmap.html">planowane</a> na czerwiec. Postanowiłem się bliżej przyjrzeć co nowa wersja będzie oferować.<br />Pierwsze co zwróciło moją uwagę to plugin instalatora dla aplikacji tworzonych z wykorzystaniem platformy NetBeans.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxaUVTwUmB5HVXEl7xeZp9dRj_EwcJhWGR8sGbvNapBhvvwRXEgXOwhzxo0-Gz5z1PkjRhrS9_-yqiQZcTfbkb6JRkIlyG3v2KsdW4Hf27CNLDe8f_Kpiv_Lcb7g4Iz9tlWuAnWEFRrWw/s1600-h/NBInstaller01.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxaUVTwUmB5HVXEl7xeZp9dRj_EwcJhWGR8sGbvNapBhvvwRXEgXOwhzxo0-Gz5z1PkjRhrS9_-yqiQZcTfbkb6JRkIlyG3v2KsdW4Hf27CNLDe8f_Kpiv_Lcb7g4Iz9tlWuAnWEFRrWw/s320/NBInstaller01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318661637807384002" /></a><br /><br />Po jego zainstalowaniu pojawia się nam nowa opcja dla projektów typu <span style="font-style:italic;">Module Suite</span> czyli <span style="font-style:italic;">Generate Suite Installer</span>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbp0XXAZMcTkv8hb4ZEuHE64as63JIokLoNjLQmjJNPEXjtQAnwNcs2cmXK3ymBQQAqXcJNbgSmsnZk49WOJuy4bivKJ-j4m0gDmyjF-VhrNQVQMogsfD28aplBe6OeMHUBZ_QBf6skQA/s1600-h/NBInstaller02.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 279px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbp0XXAZMcTkv8hb4ZEuHE64as63JIokLoNjLQmjJNPEXjtQAnwNcs2cmXK3ymBQQAqXcJNbgSmsnZk49WOJuy4bivKJ-j4m0gDmyjF-VhrNQVQMogsfD28aplBe6OeMHUBZ_QBf6skQA/s320/NBInstaller02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318661998109576818" /></a><br /><br />Wybranie tej opcji uruchamia prostego kreatora.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtiDHRf-kvPfbE-0kQEcPIe1rH3_-CSx_CSk_GR4CqQhzykglF4mPaQNJQRntt5JR__IRh0c7oB86cPbItjyFq9UnV3VOPrF9wzI5lfnKiLIxUNIQLVyRDaXJLFmDwbSeLwYQduy46hOk/s1600-h/NBInstaller03.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtiDHRf-kvPfbE-0kQEcPIe1rH3_-CSx_CSk_GR4CqQhzykglF4mPaQNJQRntt5JR__IRh0c7oB86cPbItjyFq9UnV3VOPrF9wzI5lfnKiLIxUNIQLVyRDaXJLFmDwbSeLwYQduy46hOk/s320/NBInstaller03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318662543626034962" /></a><br /><br />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.<br />Drugi krok to podanie treści (lub pliku) licencji, która musi być zaakceptowana podczas instalacji.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJGtd6k0usucGxz1-yH43j6rAPr6-q4XpWV9Fu9e4u3sbUe92oBJvPmIcb0Bhk7bQYY2TtegJLRwiVMKuKHxoPT_6uP35A_cbNTOPHZNbtWULVX10KAOQR9K71U3gXleuXVFNwrO7ayLQ/s1600-h/NBInstaller04.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJGtd6k0usucGxz1-yH43j6rAPr6-q4XpWV9Fu9e4u3sbUe92oBJvPmIcb0Bhk7bQYY2TtegJLRwiVMKuKHxoPT_6uP35A_cbNTOPHZNbtWULVX10KAOQR9K71U3gXleuXVFNwrO7ayLQ/s320/NBInstaller04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318662557620070642" /></a><br /><br />I to tyle. Po chwili instalator jest gotowy.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH-R2r6230roDqcOEa8lTw-yskQF6Omfw7BXFkEBIXsPQRlJ8tSMt_OxfYG1U0oBgxIaeTFRZGfJDbM-tiIN0cErVavYaV7gt_vrJQK-cOsWAE2BzbaA9rrkt_OwcwYiLCsXnphPnc5Vw/s1600-h/NBInstaller06.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 280px; height: 119px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH-R2r6230roDqcOEa8lTw-yskQF6Omfw7BXFkEBIXsPQRlJ8tSMt_OxfYG1U0oBgxIaeTFRZGfJDbM-tiIN0cErVavYaV7gt_vrJQK-cOsWAE2BzbaA9rrkt_OwcwYiLCsXnphPnc5Vw/s320/NBInstaller06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318663451941276962" /></a><br /><br />W katalogu <span style="font-style:italic;">dist</span> naszej aplikacji czeka na nas archiwum zip "*-installer-image.zip". Wystarczy je przesłać do klienta, który sobie je rozpakuje i uruchomi plik <span style="font-style:italic;">installerLuncher</span> (sh lub vbs w zależności od systemu). Instalator przeprowadzi użytkownika ukazując mu kolejne okna.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE1WxE43D2J1heI2Tl11eAtKaCYBN5uGGrXuApfsWLEbK_GhercRKngQD2Fmo36NbeHSPXhnhi6NMwU7tEua3YdBLWwHC_6NrmxLhD83jbbfMdOUAqoYY-kfOxVyNhBbRytWP8zVejvPQ/s1600-h/NBInstaller07.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 71px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE1WxE43D2J1heI2Tl11eAtKaCYBN5uGGrXuApfsWLEbK_GhercRKngQD2Fmo36NbeHSPXhnhi6NMwU7tEua3YdBLWwHC_6NrmxLhD83jbbfMdOUAqoYY-kfOxVyNhBbRytWP8zVejvPQ/s320/NBInstaller07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664864055048498" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6_7f_-X1nqEam5_bc_eIDpmVjRnQ_DCznQl53C7GqMQ7zTReSNybQOrSKLUh8zJD51xj39nYzpKhyphenhyphenEYLy2PjzyR6xVjdvPiJqEXdNAoFk_Bbow_eq4KUJJWthakRcFwI16n6zanQ6-6o/s1600-h/NBInstaller08.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6_7f_-X1nqEam5_bc_eIDpmVjRnQ_DCznQl53C7GqMQ7zTReSNybQOrSKLUh8zJD51xj39nYzpKhyphenhyphenEYLy2PjzyR6xVjdvPiJqEXdNAoFk_Bbow_eq4KUJJWthakRcFwI16n6zanQ6-6o/s320/NBInstaller08.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664869823377346" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpwy0rx-v6alXZV5hXlW1izvededBz5W8cRYLjxWgFDVbYNKPmtmH7TU568-yIFudFV8jYuVgItNqa-3b190HyOKzTzHh9rXXd00oBIUQHjskF5Ddbe9Ikw2WIkUNRj3t9T0n_gN1yLag/s1600-h/NBInstaller09.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpwy0rx-v6alXZV5hXlW1izvededBz5W8cRYLjxWgFDVbYNKPmtmH7TU568-yIFudFV8jYuVgItNqa-3b190HyOKzTzHh9rXXd00oBIUQHjskF5Ddbe9Ikw2WIkUNRj3t9T0n_gN1yLag/s320/NBInstaller09.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664874487907426" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioBdeA0vnFebBnsBVjckGnwKR7PLwxFAe5OXbqQl24MvJTCTm-kvpbNNjp76tqS44q3P0wXh0sbF1acLDCEbsAJyktStuk1DFZtFVfGWFxsk-x-ttn-wYySfJ0kWJSq-erNYxwbRgEyDs/s1600-h/NBInstaller10.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioBdeA0vnFebBnsBVjckGnwKR7PLwxFAe5OXbqQl24MvJTCTm-kvpbNNjp76tqS44q3P0wXh0sbF1acLDCEbsAJyktStuk1DFZtFVfGWFxsk-x-ttn-wYySfJ0kWJSq-erNYxwbRgEyDs/s320/NBInstaller10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664878015332338" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4SusICPvScas0lYFJDucf6A-bV-erdheJ5ypLsjdLF5fJ0FuPSY19BgxLglu-IS7Zz4k5KennJSKvhyphenhyphenKkVFivbiz1HTCqk_gQ8olINhdXobmdjJjk1cRRL1KPkbHQeAs4wVtyJGA1qUE/s1600-h/NBInstaller11.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4SusICPvScas0lYFJDucf6A-bV-erdheJ5ypLsjdLF5fJ0FuPSY19BgxLglu-IS7Zz4k5KennJSKvhyphenhyphenKkVFivbiz1HTCqk_gQ8olINhdXobmdjJjk1cRRL1KPkbHQeAs4wVtyJGA1qUE/s320/NBInstaller11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318664878589321186" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzFL_gh3sJGCz7Qba7BRw6gb3t1P0rXfyL7R8o1AGD2aRLgt0kMacUl4Lxz9wi8UDyNhjMLKxRIvah0FhF6cPWwBLLm5HlONpXOmnV3iKtKAz_zWViQL070yOMyJOv3zsmoW6XDwCcOmA/s1600-h/NBInstaller12.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzFL_gh3sJGCz7Qba7BRw6gb3t1P0rXfyL7R8o1AGD2aRLgt0kMacUl4Lxz9wi8UDyNhjMLKxRIvah0FhF6cPWwBLLm5HlONpXOmnV3iKtKAz_zWViQL070yOMyJOv3zsmoW6XDwCcOmA/s320/NBInstaller12.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318665382012930514" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6JhVuV1u3MBPjAav-dOOp-kAup4TpB95_YqWHh5Z35HFVDareuCT6dbG5QF_W1jZgB9WKmtizQsb1zn7tMVWTw3rdf4hoFpZc1hCnEtSwsacGQArn1A2yfJX-iwBg1WeMYu5RdduMYeA/s1600-h/NBInstaller13.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6JhVuV1u3MBPjAav-dOOp-kAup4TpB95_YqWHh5Z35HFVDareuCT6dbG5QF_W1jZgB9WKmtizQsb1zn7tMVWTw3rdf4hoFpZc1hCnEtSwsacGQArn1A2yfJX-iwBg1WeMYu5RdduMYeA/s320/NBInstaller13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318665557858152498" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQkJ1Lr3N1UaEczH_AlKDmX-ctOpoWaqWtfrOczQDkMnqUlutXRdLw2A7JDLg0e7uJgmb3QsjO8hZgXe3dbdo037EYZ4LjmJg6xEejglpyMilKxt61XXf1XMmLf9IhXRlJlTL6UbcNmA4/s1600-h/NBInstaller14.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQkJ1Lr3N1UaEczH_AlKDmX-ctOpoWaqWtfrOczQDkMnqUlutXRdLw2A7JDLg0e7uJgmb3QsjO8hZgXe3dbdo037EYZ4LjmJg6xEejglpyMilKxt61XXf1XMmLf9IhXRlJlTL6UbcNmA4/s320/NBInstaller14.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5318665568998543074" /></a><br /><br />Po przejściu tych kilku kroków aplikacja jest zainstalowana. <br /><br />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 <a href="http://blogs.kiyut.com/tonny/2008/01/02/deploy-netbeans-platform-based-application-using-izpack-installer/">IzPack'a</a>). 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.<br />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.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com1tag:blogger.com,1999:blog-62160705063034256.post-79344140852886246132009-03-07T20:58:00.004+01:002009-03-08T10:46:10.705+01:004DevelopersNo i po <a href="http://4developers.org.pl/">4Developers</a>.<br />Na pierwszy ogień poszedł wykład <span style="font-style:italic;">EJB 3.1 - Killing The Top Eleven Myths, Tales and Biases</span>, który wygłosił <a href="http://www.adam-bien.com/">Adam Bien</a>. 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.<br />Drugi wykład prowadził <a href="http://www.nealford.com/">Neal Ford</a> na temat <span style="font-style:italic;">The Productive Programmer: Mechanics</span>. 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ść.<br />Trzeci wykład to Corneliu Vasile Creanga i <span style="font-style:italic;">Flex and Java integration</span>. 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.<br />Przed przerwą obiadową Paweł Bachara pokazał nam możliwości Java w urządzeniach embedded na przykładzie SUN SPOT'a.<br /><br />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ł ;)<br /><br />Po przerwie <span style="font-style:italic;">Java Underground</span> prowadzona przez <a href="http://dworld.pl/">Grzegorza Dudę</a>. 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 (<a href="http://art-of-software.blogspot.com/">Sławek Sobótka</a>).<br /><br />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 <span style="font-style:italic;">Wielojęzykowość w aplikacjach J2EE</span> 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.<br /><br />Jedynym wykładem, dla którego opuściłem ścieżkę javową był <span style="font-style:italic;">Busy Java Developer’s Guide to Scala: Introduction</span> <a href="http://www.tedneward.com">Ted'a Neward'a</a> na ścieżce języków specjalizowanych.<br /><br />Wykład Teda troszkę się przeciągnął przez co spóźniłem się na wykład <a href="http://jaceklaskowski.pl/">Jacka Laskowskiego</a> pod tytułem <span style="font-style:italic;">Zwinne i lekkie aplikacje webowe w Javie z Groovy, Grails i Project Zero</span>. 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 <a href="http://javarsovia.pl/">javarsovi</a> w czerwcu ;)<br /><br />Ogólnie konferencję uważam za bardzo udaną. Nie mam się do czego przyczepić ;)<br /><br />A już niedługo kolejna konferencja - <a href="http://www.geecon.org/">GeeCON</a>. Ja już się zarejestrowałem.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com2tag:blogger.com,1999:blog-62160705063034256.post-32964429986944370912009-03-02T17:53:00.008+01:002009-03-02T18:44:24.016+01:00NetBeans Platform Certified Training - dzień 2.Drugi dzień szkolenia przebiegał pod znakiem "wyglądu" aplikacji napisanych na platformie.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7iFsZZ94cQXL0EdMhronB3m7TNbgPnGBiClqB0_YyZkJvV0UF_KvfvanhiCvnLGh0o6OTV1E7yTz1U9w91t1pBAHUnwKBRpMH1LgRFCcvVNf_ApqDbzkNPrwMMzl6BFNQHvlWsnQQaKg/s1600-h/NBP17.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7iFsZZ94cQXL0EdMhronB3m7TNbgPnGBiClqB0_YyZkJvV0UF_KvfvanhiCvnLGh0o6OTV1E7yTz1U9w91t1pBAHUnwKBRpMH1LgRFCcvVNf_ApqDbzkNPrwMMzl6BFNQHvlWsnQQaKg/s320/NBP17.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637302835670242" /></a><br /><br />Pierwszy wykład należał do <a href="http://blogs.sun.com/geertjan/">Geertjana</a>, który opowiedział nam o systemie okien czyli <a href="http://bits.netbeans.org/6.5/javadoc/org-openide-windows/overview-summary.html">Windows System API</a>. Drugi wykład to <a href="http://bits.netbeans.org/6.5/javadoc/org-openide-filesystems/overview-summary.html">System File System API</a>, o którym opowiadał Karol. <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB0z0S4ivKFVGfJL_fBx3HPz3NIUutvYNWCM4L2r6GgZV7VlpXSVFZGYBf2M5iAhpxlaBZwqR_47CFVZSx7bC-CDGpONkKgjGID1TlqBpO-E4-Aho9a3Elxt2JPNHUPfNBTjOJk8Ja5lA/s1600-h/NBP11.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB0z0S4ivKFVGfJL_fBx3HPz3NIUutvYNWCM4L2r6GgZV7VlpXSVFZGYBf2M5iAhpxlaBZwqR_47CFVZSx7bC-CDGpONkKgjGID1TlqBpO-E4-Aho9a3Elxt2JPNHUPfNBTjOJk8Ja5lA/s320/NBP11.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637624333570994" /></a><br /><br />Wykład Karola był przeplatany przykładami prezentowanymi przez <a href="http://blogs.sun.com/geertjan/">Geertjana</a>. W oczekiwaniu na pizzę oraz w ramach relaksu poruszone były tematy nie związane bezpośrednio z platformą czyli Groovy i Wicket.<br />Jak widać na zdjęciach zrobionych podczas przerwy uczestnicy czuli nie tylko głód wiedzy ;)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKfb_AJNRzGoe0nAU7XBkNhOpcRwYQNhDUwoWVly1gvg07kitXeHYB_HquWAT-cDTiKyyuaRD77CMi6BpAJqHg83flv-QUYTzSAhAQS_s828I9GpXdB5a_tHlj8VerCCXBZ0JTomBAuMg/s1600-h/NBP12.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKfb_AJNRzGoe0nAU7XBkNhOpcRwYQNhDUwoWVly1gvg07kitXeHYB_HquWAT-cDTiKyyuaRD77CMi6BpAJqHg83flv-QUYTzSAhAQS_s828I9GpXdB5a_tHlj8VerCCXBZ0JTomBAuMg/s320/NBP12.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637628561118962" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx0kkN2buga4MPLS7IN5RyVyQ7EzPcaGjnFN7PTHX6j7lPmFrZtrHkFBgdECEKqbToi7wLM4RtLgvNU6-T-IcnKntVPDkDjktZMOskn76iUJQG3JVzOthE6yNmSIAPRZieoWjXBjO1L7U/s1600-h/NBP15.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx0kkN2buga4MPLS7IN5RyVyQ7EzPcaGjnFN7PTHX6j7lPmFrZtrHkFBgdECEKqbToi7wLM4RtLgvNU6-T-IcnKntVPDkDjktZMOskn76iUJQG3JVzOthE6yNmSIAPRZieoWjXBjO1L7U/s320/NBP15.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637633335668226" /></a><br /><br />Po przerwie przyszedł czas na omówienie jednej z ciekawszych i efektowniejszych bibliotek platformy czyli <a href="http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-visual/overview-summary.html">Visual Library</a>. <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUkRUe-NB6kKNvlI2xz8vIVW0CQYzVDk6RdE4pU6YF_NES5Owca9b2EMAjMwGjSU1tRB4ty3iuXJXM5yFU3EnzhRp_KF_XWDktsfcfYTUnZ86I6jBi1C4djZgS3DTAcJ9WTKYgPXWPIcE/s1600-h/NBP16.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUkRUe-NB6kKNvlI2xz8vIVW0CQYzVDk6RdE4pU6YF_NES5Owca9b2EMAjMwGjSU1tRB4ty3iuXJXM5yFU3EnzhRp_KF_XWDktsfcfYTUnZ86I6jBi1C4djZgS3DTAcJ9WTKYgPXWPIcE/s320/NBP16.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5308637638669413602" /></a><br /><br />Następnie <a href="http://blogs.sun.com/kharezlak/">Karol</a> opowiedział nam jak wygląda jego praca w SUNie, czyli głównie poprawianie błędów zgłoszonych przez użytkowników w <a href="http://www.netbeans.org/issues/query.cgi">Issuezilli</a>. 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 ;)<br />Na koniec kilka pomysłów na moduły lub aplikacje, które pozwolą uczestnikom uzyskać certyfikat NetBeans Certified Engineer.<br />Drugi dzień szkolenia zakończył się wcześniej niż pierwszy bo ok godziny 16.<br />Uwagi uczestników szkolenia można przeczytać na grupie <a href="http://groups.google.com/group/silesia-jug/browse_thread/thread/4df9f9e0f0464bda">Silesia JUG</a>.<br />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 <a href="http://edu.netbeans.org/courses/nbplatform-certified-training/">szkolenia</a>.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-43903222313885386572009-02-28T21:11:00.007+01:002009-02-28T21:30:05.337+01:00NetBeans Platform Certified Training - dzień 1.Pierwszy dzień szkolenia z platformy NetBeans właśnie za nami. Plan pierwszego dnia przedstawiał się następująco:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6d1SDad-m1NRpe8pA_LTG_60bA_JUeNHclotvU9-TuXhfDynxEX8JPz8HF3WlevsQPfNGzxoloJ-yKYKgDIX3yruo_rYiRuv8Sx_f0UC4UY8KSDc-x6UnFilCLtsnp3S6TqB072qbEkc/s1600-h/NBP_plan1.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6d1SDad-m1NRpe8pA_LTG_60bA_JUeNHclotvU9-TuXhfDynxEX8JPz8HF3WlevsQPfNGzxoloJ-yKYKgDIX3yruo_rYiRuv8Sx_f0UC4UY8KSDc-x6UnFilCLtsnp3S6TqB072qbEkc/s320/NBP_plan1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307944306249982178" /></a><br /><br />Szkolenie zaczęło się od krótkiego wstępu <a href="http://blogs.sun.com/geertjan/">Geertjana</a>. Następnie miejsce na "mównicy" zajął <a href="http://blogs.sun.com/kharezlak/">Karol</a> i opowiedział o korzyściach wynikających z używania platformy. Jego wystąpienie było przerywane przykładami pokazywanymi przez <a href="http://blogs.sun.com/geertjan/">Geertjana</a>. 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 ;)<br />Po przerwie Piotr Tabor opowiedział o swoim <a href="http://code.google.com/p/protobuf-netbeans-plugin/">projekcie</a> edytora.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg2pgN6dyLOOd1LfJmhaP0QeRwdDmFoyVdAMMeG4sv-prKasFzP7tUHh0k98bqIXfuW3tNtDMXPqVmXvN6vwPYsWEAIKpNFv3bQDgIJfNmgeVA_Si2OcucOWnNxCaObrU0yU-CMV_zPb4/s1600-h/NBP02.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg2pgN6dyLOOd1LfJmhaP0QeRwdDmFoyVdAMMeG4sv-prKasFzP7tUHh0k98bqIXfuW3tNtDMXPqVmXvN6vwPYsWEAIKpNFv3bQDgIJfNmgeVA_Si2OcucOWnNxCaObrU0yU-CMV_zPb4/s320/NBP02.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307945061042529378" /></a><br /><br />Jak widać momentami nawet prowadzący byli zaciekawieni ;)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-6jZm8MXFkpSPp74RqvK3TJo-tL5iw4ETJaoaVlLN5GPuF-MSRk4XmgWy5t1V4de4tYz6KI_kh_5PqN8gmHdmtuKc8C0Ro_zmFUJvpJ0MU5phoiLJ5jpQtDVnlAGu8YaCk4XFPyy28VU/s1600-h/NBP03.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 239px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-6jZm8MXFkpSPp74RqvK3TJo-tL5iw4ETJaoaVlLN5GPuF-MSRk4XmgWy5t1V4de4tYz6KI_kh_5PqN8gmHdmtuKc8C0Ro_zmFUJvpJ0MU5phoiLJ5jpQtDVnlAGu8YaCk4XFPyy28VU/s320/NBP03.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307945067272612162" /></a><br /><br />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ć.<br />Przedostatnim punktem było moje króciutkie i nieoficjalne wystąpienie pokazujące pewne komercyjne zastosowanie platformy.<br />Na ostatnim wykładzie Geertjan opowiadał jak wygląda w platformie "model danych" czyli Nodes API oraz Explorer & Properties API oraz pokazywał to na praktycznym przykładzie.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxhs3EPuN2FxAK4Xf76o8RP0PJWaFIZE0Nly2yWjnKRvnjB1ZQsHae2GvXsE87o4nBW5mRObUXI8uAkXo0sGyyujjy77djMNpg0kM1HwhVXk1SrP1uvYeeDWRBReqUgZd_kyooWcRh3TE/s1600-h/NBP05.JPG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxhs3EPuN2FxAK4Xf76o8RP0PJWaFIZE0Nly2yWjnKRvnjB1ZQsHae2GvXsE87o4nBW5mRObUXI8uAkXo0sGyyujjy77djMNpg0kM1HwhVXk1SrP1uvYeeDWRBReqUgZd_kyooWcRh3TE/s320/NBP05.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5307945425526765186" /></a><br /><br />Kilka słów na temat pierwszego dnia możecie także przeczytać na blogu <a href="http://blogs.sun.com/geertjan/entry/gliwice_on_the_netbeans_platform">Geertjana</a>.<br /><br />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 ;)<br /><br />PS. Na SUNowskiej stronie <a href="http://community.java.net/jugs/">JUGów</a> jest ciekawa ankieta. Pytanie: <span style="font-style:italic;">Przez kogo wg Ciebie powinna być reprezentowana społeczność JUG na JavaOne</span>. Jedna z osób wydaje mi znajoma ;)Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-73329138403045704232009-01-30T19:23:00.006+01:002009-01-30T20:17:46.022+01:00Dlaczego warto się udzielać w JUGach?Ostatnio pojawiły się w końcu <a href="http://picasaweb.google.pl/PROIDEAconferences/JavaDevelopersDay2008JDD08#">zdjęcia</a> z ubiegłorocznej konferencji <a href="http://08.jdd.org.pl/">Java Developer Day</a>. Podczas ich przeglądania przypomniała mi się wypowiedź <a href="http://jaceklaskowski.pl/">Jacka Laskowskiego</a> 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. <br />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?<br />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ę".<br />Poniżej krótkie zestawienie.<br />Prelekcja nt <a href="http://platform.netbeans.org/">NetBeans Platform</a> na <a href="http://www.java.pl/">PJUG</a> w Krakowie - licencja <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a> 7 (wtedy licencja kosztował chyba około <span style="font-weight:bold;">179$</span>)<br />Artykuł do <a href="http://dworld.pl/java-express/">JavaExpress</a> - wylosowałem wejściówkę na <a href="http://08.jdd.org.pl/">JDD08</a> (<span style="font-weight:bold;">380pln</span>).<br />Prelekcja nt <a href="http://platform.netbeans.org/">NetBeans Platform</a> na <a href="http://groups.google.com/group/silesia-jug">SJUG</a> w Katowicach - licencja <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a> 8 (<span style="font-weight:bold;">225$</span>)<br />Preferencyjna cena dla aktywnych członków JUG na <a href="http://4developers.org.pl/">COOLuary</a> (20pln).<br />Na <a href="http://4developers.org.pl/">COOLuarach</a> wylosowałem wejściówkę na 4Developers (<span style="font-weight:bold;">229pln</span>).<br />Książek, USB flashy, długopisów nie liczę ;). Choć taka <br /><a href="http://helion.pl/ksiazki/sprifr.htm">Spring Framework. Profesjonalne tworzenie oprogramowania w Javie</a> to kolejne <span style="font-weight:bold;">89pln</span> - a ja wylosowałem taką na spotkaniu z Alefem Arendsenem (więc książka jest z jego autografem).<br />Poznani nowi, wspaniali ludzie - <span style="font-weight:bold;">bezcenne</span> ;)<br />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.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com5tag:blogger.com,1999:blog-62160705063034256.post-79296061145655128632009-01-24T21:33:00.003+01:002009-01-24T22:06:39.719+01:00Co tam słychać w COOLuarach...Właśnie wróciłem z pierwszej w Polsce UnConference poświęconej Javie czyli z <a href="http://dworld.pl/cooluary/">COOLuarów</a>. Jeśli ktoś nie by to niech żałuje. Naprawdę jest czego.<br />Dzień został podzielony na pięć godzinnych sesji, w każdej sesji było dostępnych pięć stolików. Po krótkim wstępie <a href="http://dworld.pl/">Grzegorza</a> 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.<br />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 ;)<br />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.<br />Po przerwie obiadowej przysiadłem się do stolika Scali. Tutaj jednak mogłem uczestniczyć tylko biernie gdyż temat ten nie był mi znany.<br />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 <a href="http://blog.mocna-kawa.com/">Wiktora</a> 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ą ;)<br />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 ;)<br />Wielkie podziękowania należą się <a href="http://dworld.pl/">Grześkowi</a> gdyż odwalił kawał dobrej roboty przygotowując <a href="http://dworld.pl/cooluary/">COOLuary</a>. Mam nadzieję, że konferencja ta zagości na stałe w kalendarzu wydarzeń javowych.<br />Na koniec nie wypada mi się nie pochwalić, że udało mi się wylosować wejściówkę na konferencję 4Developers ;)Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com4tag:blogger.com,1999:blog-62160705063034256.post-34836600817218622852008-12-20T19:00:00.009+01:002008-12-20T20:01:35.968+01:00Własny komponent na pasku statusu w NetBeansW jaki sposób dodać coś własnego do paska statusu aplikacji napisanej przy pomocy <a href="http://platform.netbeans.org">platformy NetBeans</a> (czyli np do <a href="http://www.netbeans.org">NetBeans IDE</a>)?<br />W tym celu musimy stworzyć klasę implementującą interfejs <a href="http://bits.netbeans.org/6.5/javadoc/org-openide-awt/org/openide/awt/StatusLineElementProvider.html">StatusLineElementProvider</a>. Interfejs ten definiuje tylko jedną metodę <span style="font-style:italic;">Component getStatusLineElement()</span>. Metoda zwraca komponent, który ma być umieszczony na pasku statusu.<br />Stwórzmy więc jakiś przykładowy projekt modułu z komponentem dla paska statusu.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ-enecrX4w3HdudtkUSwUTEsdnSkOwKswpe2jS4yCJgZE5xNtTRJx7oyCjFPQu6yI-1xg9U3Z6rveskAJdY_7gMpFxz0XDM-gsjq-V6ReSDQOmI9GF-A5PY2q9QfpkuilF_v1j7W2dfM/s1600-h/project.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ-enecrX4w3HdudtkUSwUTEsdnSkOwKswpe2jS4yCJgZE5xNtTRJx7oyCjFPQu6yI-1xg9U3Z6rveskAJdY_7gMpFxz0XDM-gsjq-V6ReSDQOmI9GF-A5PY2q9QfpkuilF_v1j7W2dfM/s320/project.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5281946366730123362" /></a><br /><br />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 <span style="font-style:italic;">MyStatusLine</span>.<br /><br />W tym przypadku komponentem jest zwykły JPanel z JLabelem (label z jakimś tekstem i ikoną). Po przejściu do źródła klasy <span style="font-style:italic;">StatusLineElement</span> musimy dopisać implementację interfejsu <span style="font-style:italic;">StatusLineElementProvider</span>.<br /><br /><pre name="code" class="java"><br />package org.myorg.status;<br /><br />import java.awt.Component;<br />import org.openide.awt.StatusLineElementProvider;<br /><br />public class StatusLineElement extends javax.swing.JPanel implements StatusLineElementProvider {<br /><br /> public StatusLineElement() {<br /> initComponents();<br /> }<br /><br /> public Component getStatusLineElement() {<br /> return this;<br /> }<br /><br /> ...<br /><br />}<br /></pre><br /><br />Aby nasza aplikacja "dowiedziała" się o nowym komponencie musimy ją o tym poinformować tworząc w katalogu <span style="font-style:italic;">META-INF/services</span> plik o nazwie takiej jak implementowany przez nas interfejs czyli <span style="font-style:italic;">org.openide.awt.StatusLineElementProvider</span>. Treścią tego pliku będzie pełna nazwa klasy implementującej ten interfejs czyli <span style="font-style:italic;">org.myorg.status.StatusLineElement</span>.<br /><br />Po uruchomieniu aplikacji na pasku powinien znajdować się nasz komponent.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6HDoKXA0Gzh323NL-PYhK-kimtH9Ks-VbxUCLkLAMilwqjkaadCR3kbL7CFHWSBEnfdqr5wX6vxUbjT29dNzZNFNEE9cyisb-70eBpJYUVqyCGdzdHo0VABFLsKb1oe5K1b4p7e35YLA/s1600-h/sampleapp.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 186px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6HDoKXA0Gzh323NL-PYhK-kimtH9Ks-VbxUCLkLAMilwqjkaadCR3kbL7CFHWSBEnfdqr5wX6vxUbjT29dNzZNFNEE9cyisb-70eBpJYUVqyCGdzdHo0VABFLsKb1oe5K1b4p7e35YLA/s320/sampleapp.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5281945186957608770" /></a>Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-41629566351764948502008-12-13T21:47:00.004+01:002008-12-13T22:10:32.548+01:00Progress APIProgress API jest malutką ale użyteczną biblioteką wchodzącą w skład platformy <a href="http://www.netbeans.org">NetBeans</a> i oferującą programiście dostęp do paska postępu przydatnego przy długich zadaniach wykonywanych w tle.<br />To co nas będzie interesowało to <a href='http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-progress/org/netbeans/api/progress/ProgressHandleFactory.html'>ProgressHandleFactory</a> oraz <a href='http://bits.netbeans.org/6.5/javadoc/org-netbeans-api-progress/org/netbeans/api/progress/ProgressHandle.html'>ProgressHandle</a>.<br /><pre name="code" class="java"><br />public void startMyTask() {<br /> Runnable runnable = new Runnable() {<br /> public void run() {<br /> ProgressHandle handle = ProgressHandleFactory.createHandle(<br /> "Moje długie zadanie");<br /> int count = 57;<br /> handle.start(count);<br /> for(int i = 0; i < count; i++){<br /> handle.progress(i);<br /> if(i > (count/2)){<br /> handle.progress("Połowa zadania już za nami");<br /> }<br /> try {<br /> Thread.sleep(200);<br /> } catch (InterruptedException ex) {<br /> Exceptions.printStackTrace(ex);<br /> }<br /> }<br /> handle.finish();<br /> }<br /> };<br /> (new Thread(runnable)).start();<br />}<br /></pre><br />Uruchomienie powyższej metody spowoduje pokazanie się paska postępu w prawym dolnym rogu aplikacji.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfnAo7Q6uO85mfY964MMTNQwDaR6uVaQDfWlh_-1cMB-kReAWuHNGC_xVqcVdk6YLyBG5H1mdp5RdUBTVOYFYvXt7w4YdGnKZHjswatqvIWbEb3cEcF3iCGcFVM2jlRY0nwrxWTlQEBl4/s1600-h/pgbar02.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 198px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfnAo7Q6uO85mfY964MMTNQwDaR6uVaQDfWlh_-1cMB-kReAWuHNGC_xVqcVdk6YLyBG5H1mdp5RdUBTVOYFYvXt7w4YdGnKZHjswatqvIWbEb3cEcF3iCGcFVM2jlRY0nwrxWTlQEBl4/s320/pgbar02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5279383289313633186" /></a><br /><br />Po kliknięciu na pasek postępu możemy zobaczyć także informacje szczegółowe na temat wykonywanego zadania.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQtcPF9ZT1zNcQnUtI0-pfrL5tyg8te8mAEb7O_mdfH-eMS4WBar-CAXcsTLVPKUlczL-gP9UHuvremddt9gUEw0F8i8JbnH8fk2hsKRrdVqSOm_2Y54xj8t_mPQZ-RU9MG8tsbQ4NAvo/s1600-h/pgbar01.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 74px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQtcPF9ZT1zNcQnUtI0-pfrL5tyg8te8mAEb7O_mdfH-eMS4WBar-CAXcsTLVPKUlczL-gP9UHuvremddt9gUEw0F8i8JbnH8fk2hsKRrdVqSOm_2Y54xj8t_mPQZ-RU9MG8tsbQ4NAvo/s320/pgbar01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5279383290201054562" /></a><br /><br /><span style="font-style:italic;">handle.start(count)</span> uruchamia pasek postępu informując go z ilu kroków będzie się składać zadanie. <span style="font-style:italic;">handle.progress(i)</span> informuje ile kroków już mamy za sobą, <span style="font-style:italic;">handle.progress("Połowa zadania już za nami")</span> dodaje opis do widoku szczegółowego zadania, <span style="font-style:italic;">handle.finish()</span> kończy i ukrywa pasek.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com2tag:blogger.com,1999:blog-62160705063034256.post-5494848473136267192008-12-04T08:10:00.001+01:002008-12-04T08:17:15.552+01:00Styczniowe COOLuaryWłaśnie zauważyłem na <a href="http://dworld.pl">Developers World</a> wpis na temat przyszłorocznej konferencji pod dość ciekawą nazwą <a href="http://dworld.pl/cooluary/">COOLuary</a>. 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 "<span style="font-style:italic;">aktywny członek</span>" ;)<br />Ja się zapisuję.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-26873606171447538642008-12-03T19:47:00.005+01:002008-12-03T20:47:42.622+01:00NetBeans na skróty w edytorzeChciałbym dzisiaj przybliżyć kilka pomocnych (według mnie) skrótów klawiszowych w edytorze NetBeans.<br /><br />1. <span style="font-weight:bold;">Ctrl+/</span> dodawanie/usuwanie komentarza z linijek wchodzących w skład zaznaczonego obszaru.<br /><br />2. <span style="font-weight:bold;">Ctrl+E</span> usuwanie linii kodu wchodzących w skład zaznaczonego obszaru. Bez zaznaczenia usunięcie tylko jednej linii.<br /><br />3. <span style="font-weight:bold;">Alt+Shift+Up/Down</span> przesunięcie linii (lub zaznaczonego fragmentu) w górę/dół.<br /><br />4. <span style="font-weight:bold;">Ctrl+Shift+Up/Down</span> skopiowanie linii (lub zaznaczonego fragmentu) powyżej/poniżej.<br /><br />5. <span style="font-weight:bold;">Alt+Insert</span> Generator kodu.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNp_TzFIka7wgkPXLTbMn-JQDz2pJyAspyBcbv4QGhj7r4lGqdq0wD-txqgpwGxbxmIRNA52v9imsj1nokwRDgXqfsDwcP0wuh4az7y3NeGPhuwwYPLEoPlB2ZPQArh_yq0kt1_Lc2ZRM/s1600-h/pkt_05.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 121px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNp_TzFIka7wgkPXLTbMn-JQDz2pJyAspyBcbv4QGhj7r4lGqdq0wD-txqgpwGxbxmIRNA52v9imsj1nokwRDgXqfsDwcP0wuh4az7y3NeGPhuwwYPLEoPlB2ZPQArh_yq0kt1_Lc2ZRM/s320/pkt_05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649053359351842" /></a><br /><br />6. <span style="font-weight:bold;">Ctrl+R</span> Zmiana nazwy.<br /><br />7. <span style="font-weight:bold;">Ctrl+F3</span> Szukanie wystąpień słowa.<br />7a. <span style="font-weight:bold;">F3/Shift+F3</span> Następne/poprzednie wystąpienie szukanego słowa.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK_PoGqZDV21KsyblAwQu_UagZDjTetgl5LHhXAJ9wh-Nm6CWGnCXS_u2EXCXb1yCyQuLfKNwPC1izLNilIynLjWCte25lLwIBkcyK5vbLbUNXPM08AQPs1evN1b0Gzr8QHqtK8GBfcFg/s1600-h/pkt_07.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 125px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK_PoGqZDV21KsyblAwQu_UagZDjTetgl5LHhXAJ9wh-Nm6CWGnCXS_u2EXCXb1yCyQuLfKNwPC1izLNilIynLjWCte25lLwIBkcyK5vbLbUNXPM08AQPs1evN1b0Gzr8QHqtK8GBfcFg/s320/pkt_07.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649056211148834" /></a><br /><br />8. <span style="font-weight:bold;">Alt+F7</span> Wyszukiwanie użycia metody/zmiennej.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5EMEubwUVmYq_VPWtFt4AKLdDbNxYP3yDlRdu2vT1fFMU0qFgtNIMNSiADQPPzy6euCCxlnM73HwsMbIpp51HfYvc1ypqy0Xg382883wDRU_h5e-ItPY4LnhcheSobeXtA2UoMrpP4BY/s1600-h/pkt_08.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 184px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5EMEubwUVmYq_VPWtFt4AKLdDbNxYP3yDlRdu2vT1fFMU0qFgtNIMNSiADQPPzy6euCCxlnM73HwsMbIpp51HfYvc1ypqy0Xg382883wDRU_h5e-ItPY4LnhcheSobeXtA2UoMrpP4BY/s320/pkt_08.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649057212090626" /></a><br /><br />9. <span style="font-weight:bold;">Alt+Shift+F</span> Formatowanie kodu.<br /><br />10. <span style="font-weight:bold;">Ctrl+Tab</span> Przełączanie pomiędzy otwartymi edytorami.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9phZlpnWDmmDh2El1Qfyh7PpEj6YDudI-CPoXPL9EBi8FLhWQJLd-AuhWRC4rnH_BJX2mWVSWlyHft3TeeNOsNvLjxEXyFQCB9XnHIfqqlEH6NA7G-gEIYGxz11C1pLdA14PRSMzZSmA/s1600-h/pkt_10.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9phZlpnWDmmDh2El1Qfyh7PpEj6YDudI-CPoXPL9EBi8FLhWQJLd-AuhWRC4rnH_BJX2mWVSWlyHft3TeeNOsNvLjxEXyFQCB9XnHIfqqlEH6NA7G-gEIYGxz11C1pLdA14PRSMzZSmA/s320/pkt_10.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649060578453858" /></a><br /><br />11. <span style="font-weight:bold;">Shift+Esc</span> Przełączenie aktualnego okna pomiędzy dużym a małym rozmiarem.<br /><br />12. <span style="font-weight:bold;">Ctrl+O</span> Wyszukiwanie klasy do edycji.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjitMEAlgzMVa9P6wkV5icGfcsWUfYA4yGcv3lnbLwwd0LMwltyUeH2mZkJ9lk3y5FatOSw_juDOg_jMymYgcwbhlbqO0ahaX1s4L4CF6DKWU1bBCXrLPWXelTAmvLgX03okrti12QC6k0/s1600-h/pkt_12.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjitMEAlgzMVa9P6wkV5icGfcsWUfYA4yGcv3lnbLwwd0LMwltyUeH2mZkJ9lk3y5FatOSw_juDOg_jMymYgcwbhlbqO0ahaX1s4L4CF6DKWU1bBCXrLPWXelTAmvLgX03okrti12QC6k0/s320/pkt_12.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649060685392546" /></a><br /><br />13. <span style="font-weight:bold;">Ctrl+Q</span> Powrót do ostatnio edytowanego miejsca.<br /><br />14. <span style="font-weight:bold;">Ctrl+Shift+I</span> Dodanie brakujących importów.<br />14a. <span style="font-weight:bold;">Alt+Enter</span> Rozwinięcie menu dla podpowiedzi np dla "<span style="font-style:italic;">żaróweczki</span>".<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRawQ8DGCPGwn8h9wwHYKy10fxO-3hPtr4GK7JZOfg_LQsV2U6-ISmlIZ1y84cHAt6IkYAbWJAu7DDyAaIVXuj6hgaT8Zvrl7fXdA9mYFaqjRfRAbfLcunjYfFvUt5UHbd1SJoTFsocIk/s1600-h/pkt_14.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRawQ8DGCPGwn8h9wwHYKy10fxO-3hPtr4GK7JZOfg_LQsV2U6-ISmlIZ1y84cHAt6IkYAbWJAu7DDyAaIVXuj6hgaT8Zvrl7fXdA9mYFaqjRfRAbfLcunjYfFvUt5UHbd1SJoTFsocIk/s320/pkt_14.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649641446846850" /></a><br /><br />15. <span style="font-weight:bold;">Ctrl+I</span> Wyszukiwanie. Z pola wyszukiwanie mamy możliwość uruchomienia różnych akcji.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbCurxb6Y8OzPUixO7EgLS_K37liQw5l6EXaygVIJ-pGUbgwFuKuLmZaDycj7L3Umd0ALebz0ntWIvmqX3q8CW4TB4yZoRLmfG6Vp4P4H4g5uND77Lvi6VInSBq1fnCLAcue4YBy6-lI/s1600-h/pkt_15.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 143px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVbCurxb6Y8OzPUixO7EgLS_K37liQw5l6EXaygVIJ-pGUbgwFuKuLmZaDycj7L3Umd0ALebz0ntWIvmqX3q8CW4TB4yZoRLmfG6Vp4P4H4g5uND77Lvi6VInSBq1fnCLAcue4YBy6-lI/s320/pkt_15.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275652792330849634" /></a><br /><br />16. <span style="font-weight:bold;">Ctrl+;</span> Dodanie ";" na końcu linii. Szkoda tylko, że nie sprawdza czy linia jest już zakończona ";".<br />16a. <span style="font-weight:bold;">Ctrl+Shift+;</span> Dodanie ";" na końcu linii, wstawienie nowej linii i przejście na jej początek.<br /><br />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.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVKlbLQoTEgRHMStAYLbllrZbA3iOdlzdv2xGE17UVbg_XbP5Yc7PnNc6ZUDFvTN3oxvMqwixj7swtNA1J96NahtgO_DwzkqZQdWZF-t1Byx3gs82rYIbYOmszsvMe6emTI5FyxG5sx0/s1600-h/pkt_17.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 141px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVKlbLQoTEgRHMStAYLbllrZbA3iOdlzdv2xGE17UVbg_XbP5Yc7PnNc6ZUDFvTN3oxvMqwixj7swtNA1J96NahtgO_DwzkqZQdWZF-t1Byx3gs82rYIbYOmszsvMe6emTI5FyxG5sx0/s320/pkt_17.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5275649652162655570" /></a><br /><br />A według Ciebie jakie skróty powinny się jeszcze znaleźć w tym krótkim zestawieniu?Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com5tag:blogger.com,1999:blog-62160705063034256.post-34225065240513729452008-11-29T00:15:00.006+01:002008-11-29T15:29:05.929+01:00Polska platforma NetBeans jeszcze raz czyli problemy z lokalizacjąWe <a href='http://marekklis.blogspot.com/2008/11/netbeans-release-candidate-2-sprawa.html'>wpisie</a> 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 (<i>Build ZIP Distribution</i>). Po rozpakowaniu zipa i uruchomieniu aplikacji okazało się, że polskie menu gdzieś zniknęło. Jak się okazało jest za to odpowiedzialny <a href='http://www.netbeans.org/issues/show_bug.cgi?id=138056'>błąd</a> znany już we wcześniejszej wersji <a href='http://www.netbeans.org'>NetBeans'a</a>. Błąd ten dotyczy wszystkich tłumaczeń platformy.<br/>Pozostały mi więc dwie możliwości: albo przy każdym budowaniu aplikacji kopiować pliki z potrzebnymi tłumaczeniami albo napisać zadanie <a href='http://ant.apache.org/'>anta</a> 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 <i>build.xml</i> odpowiedzialnego za zadania anta związane z naszym projektem dodałem zadanie "<i>build-localized-zip</i>". Zadanie to dodaje do pliku archiwum (stworzonego w zadaniu <i>build-zip</i> - opis tego zadania znajduje się w pliku <i>harness/suite.xml</i> w katalogu platformy, na której budujemy aplikację) pliki z polskimi tłumaczeniami. Minusem tego rozwiązania jest to, że zostaną dodane wszystkie "<i>polskie</i>" 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.<br /><br /><pre cols='80' class='moz-signature'><br /><project name="TestPlatform" basedir="."><br /><br /> <description>Builds the module suite TestPlatform.</description><br /> <import file="nbproject/build-impl.xml"/><b><br /> <target name="build-localized-zip" depends="clean,build-zip"<br /> description="Zbudowanie polskiej dystrybucji"><br /> <zip destfile="${dist.dir}/${app.name}.zip" update="true"><br /> <zipfileset dir="${netbeans.dest.dir}" prefix="${app.name}"><br /> <include name="**/locale/*_pl.jar"/><br /> </zipfileset><br /> </zip><br /> </target></b><br /></project><br /></pre><br/><br />Teraz wystarczy uruchomić nasze nowe zadanie i nowa dystrybucja naszej aplikacji będzie już "uzbrojona" w polskie menu.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOA1F91OYfx5LqIpTSgDO3lj8HEpOgYC86C6vK8323rKVHZbGHpvcf-UkzHgw1MzwSBkt9iZbpbJzFu-LzBJc_Eftyj1chdbMfsYTabkjeYf2qf-FNP8q0rQkExmickQCzNX5hLDGV8GY/s1600-h/Screenshot-TestPlatform+-+NetBeans+IDE+6.5.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOA1F91OYfx5LqIpTSgDO3lj8HEpOgYC86C6vK8323rKVHZbGHpvcf-UkzHgw1MzwSBkt9iZbpbJzFu-LzBJc_Eftyj1chdbMfsYTabkjeYf2qf-FNP8q0rQkExmickQCzNX5hLDGV8GY/s320/Screenshot-TestPlatform+-+NetBeans+IDE+6.5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5273851373107069858" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEishS4kKXhH3KU82xbDNd5bv_f_YqgBV2CnbhwX9LL94Mpl2eXEy-hPIYqDPgG3uT8sdYYg3LhINObzE7RigfL4r9MYzo_Y9DB5XZFdId4V5KotlIL0qEHOB7JpTVLbTJ-IKozNLaLGMGQ/s1600-h/Screenshot-TestPlatform+200811100614.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 206px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEishS4kKXhH3KU82xbDNd5bv_f_YqgBV2CnbhwX9LL94Mpl2eXEy-hPIYqDPgG3uT8sdYYg3LhINObzE7RigfL4r9MYzo_Y9DB5XZFdId4V5KotlIL0qEHOB7JpTVLbTJ-IKozNLaLGMGQ/s320/Screenshot-TestPlatform+200811100614.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5273852911635083410" /></a>Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-23616741009480874432008-11-20T18:19:00.002+01:002008-11-21T15:36:28.966+01:00Silesia JUG 19.11.2008 - materiały z prelekcji<div xmlns='http://www.w3.org/1999/xhtml'>No i po prelekcji. <a href='http://javavsme.wordpress.com/2008/11/20/2-spotkanie-silesia-jug-zakonczone-3-przed-nami/'>Marek Goldmann</a> oraz <a href="http://k-adamczyk.blogspot.com/2008/11/netbeans-platform-wraenia-po-2_20.html">Krzysztof Adamczyk</a> napisali kilka słów na temat tego spotkania.<br />Jeśli ktoś jest zainteresowany to udostępniam <a href='http://marek.klis.googlepages.com/NetBeansPlatform.pdf'>slajdy</a>. Przykładowy projekt postaram się udostępnić w najbliższym czasie tylko muszę go odpowiednio przygotować.<br />Pozwoliłem sobie również udostępnić <a href='http://marek.klis.googlepages.com/document.pdf'>slajdy</a> <a href='http://lukaszlipka.blogspot.com/'>Łukasza Lipki</a> wprowadzające i kończące 2. spotkanie śląskiej grupy użytkowników Javy.<br />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 <a href='http://www.coig.pl/index.php?t=200&id=210'>budynku COIGu</a> w Katowicach. Tematem będzie <a href='http://mule.mulesource.org/'>ESB Mule</a> a zaprezentuje go <a href='http://lukaszlipka.blogspot.com/'>Łukasz</a>.<br /></div>Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-37676692167562874442008-11-19T11:57:00.005+01:002008-11-19T12:06:33.475+01:00NetBeans w samo południeWg oficjalnych informacji <a href="http://www.netbeans.org/community/releases/roadmap.html">premiera</a> wersji 6.5 <a href="http://www.netbeans.org">NetBeans'a</a> ma mieć miejsce jutro tj. 20 listopada. Więc mogę powiedzieć, że zdziwiłem się trochę po wejściu na stronę <a href="http://www.netbeans.org/downloads/">Download IDE</a> 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.<br />Więc ściągam czym prędzej żeby na dzisiejszej <a href="http://marekklis.blogspot.com/2008/11/silesia-java-user-group-netbeans.html">prezentacji</a> pokazać już oficjalną wersję 6.5.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-58294522613480595222008-11-17T21:54:00.001+01:002008-11-17T21:54:17.172+01:00Silesia Java User Group - NetBeans Platform<div xmlns='http://www.w3.org/1999/xhtml'>W najbliższą środę tj. 19.11.2008 będę miał zaszczyt poprowadzić drugie już spotkanie <a href='http://silesia.jug.pl'>śląskiego JUGu</a>. Tematem będzie oczywiście <a href='http://platform.netbeans.org/'>platforma NetBeans</a>. Będę chciał przedstawić główne zalety używanie platformy tworząc podczas prelekcji od podstaw prostą aplikację.<br/>Może uda się też powiedzieć coś o nowościach w wersji 6.5 NetBeansa, która na dniach ma ujrzeć światło dzienne.<br/>Dla uczestników są przewidziane nagrody. Oprócz licencji <a href='http://www.jetbrains.com/idea/'>IntelliJ IDEA</a> 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 <a href='http://www.coig.pl/index.php?t=200&id=210'>COIGu</a> o godzinie 18:30.</div>Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com3tag:blogger.com,1999:blog-62160705063034256.post-41277999394055238072008-11-10T19:03:00.002+01:002008-11-10T19:12:10.221+01:00NetBeans Release Candidate 2 a sprawa polskaKilka ,a może kilkanaście dni temu (build jest z 2008.10.27) pojawiła się kolejna wersja <a href='http://www.netbeans.org'>NetBeans'a</a> 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 <a href='http://wiki.netbeans.org/PolishTranslation'>zespołowi tłumaczącemu</a>.<br />Chcąc zobaczyć jak to wygląda ściągnąłem polską wersję instalacyjną.<br />Pierwsze wrażenia: <br /><ul><li>niby polska wersja językowa ale cała instalacja przebiega po angielsku.</li><li>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)</li><li>na dzień dzisiejszy procent spolszczenia pozostawia jeszcze dużo do życzenia (wiem, wiem... łatwiej narzekać zamiast pomóc w tłumaczeniu;) )<br /></li></ul><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFvSCAoNqcFqcazR0d8sRXhbBeNAO7G_q3esgtHWs2x8ZDzeM7va0WtZVnM_AZ1K-TPi-Q4878pFt8F2vKw005qd68mxWsI0JNpOEoQtqLOhue-R7FUhYFzH3Ougi42E9bsQDi0hEKr5k/s1600-h/nb65pl_01.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFvSCAoNqcFqcazR0d8sRXhbBeNAO7G_q3esgtHWs2x8ZDzeM7va0WtZVnM_AZ1K-TPi-Q4878pFt8F2vKw005qd68mxWsI0JNpOEoQtqLOhue-R7FUhYFzH3Ougi42E9bsQDi0hEKr5k/s320/nb65pl_01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5267091895140395250" /></a><br /><br />Ale ponoć platforma jest w całości przetłumaczona. Więc czym prędzej założyłem nowy projekt <i>NetBeans Platform Applications</i>. Muszę przyznać, że po uruchomieniu projektu poczułem się mile zaskoczony.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZOnjpVjb6qKPxOuo0x6Q0DZcV-RXQFyx1g91ezGK445ej2L0sHI07DfgxyFjqeKSMA_XSJiHwnydVOsJkfbQcoU2OhdNMh2LZAIwslq3aca2bp8_TLvbt8A9qtTFuYVA8OUHyth-jc9I/s1600-h/nb65pl_02.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 204px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZOnjpVjb6qKPxOuo0x6Q0DZcV-RXQFyx1g91ezGK445ej2L0sHI07DfgxyFjqeKSMA_XSJiHwnydVOsJkfbQcoU2OhdNMh2LZAIwslq3aca2bp8_TLvbt8A9qtTFuYVA8OUHyth-jc9I/s320/nb65pl_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5267091901000463970" /></a><br /><br />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 <i>Tools</i> -> <i>NetBeans Platforms</i> dodałem (<i>Add Platform</i>) jako kolejną platformę polską i we właściwościach projektu wskazałem, że ma z niej korzystać podczas uruchamiania.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifQd_RrU8pBengAa_Ih901ALNQYCW7CoLjbPOOffmIe13Sa7t5iBWFCDhX8jwsM-J8Oxqr4MJdnrycpIQiSTF0_e7YfF04zLAy5G13ZO5zJpjzeC8N_AK6Wfe8Sm5LuYtAe920r2ptt8c/s1600-h/nb65pl_03.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 186px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifQd_RrU8pBengAa_Ih901ALNQYCW7CoLjbPOOffmIe13Sa7t5iBWFCDhX8jwsM-J8Oxqr4MJdnrycpIQiSTF0_e7YfF04zLAy5G13ZO5zJpjzeC8N_AK6Wfe8Sm5LuYtAe920r2ptt8c/s320/nb65pl_03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5267091899226688290" /></a><br /><br />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.<br /><br />Więc nie pozostaje mi nic innego jak podziękować im za ich pracę.<br /><br />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.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com1tag:blogger.com,1999:blog-62160705063034256.post-32753038434834505832008-10-17T12:18:00.005+02:002008-10-17T12:30:32.023+02:00Java Developers Day 2008 za namiKonferencję 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).<br />Sam brałem udział oprócz ogólnych spotkań w sesji 1. czyli <a href="http://mockito.org/">Mockito</a> (Szczepan Faber), <a href="http://www.jboss.org/envers/">Envers</a> (Adam Warski) oraz CEP czyli Complex Event Processing w wykonaniu Waldka Kota. <br />Nie mogę nie wspomnieć o ostatnim wykładzie w wykonaniu <a href="http://www.jaceklaskowski.pl">Jacka Laskowskiego</a>, 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 ;)<br />Fajną sprawą było też <a href="http://dworld.pl/2008/10/15/agenda-java-underground/">Java Underground</a> prowadzone przez Grzegorza Dudę. Minusem było pomieszczenie w piwnicy. Trochę za duszno było przy tylu zainteresowanych.<br />Zainteresował mnie temat <a href="http://www.jboss.org/envers/">wersjonowania encji</a> więc w najbliższym czasie<br>postaram się więcej przyglądnąć temu tematowi.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com2tag:blogger.com,1999:blog-62160705063034256.post-42762026598160516222008-07-15T13:59:00.003+02:002008-07-15T14:06:00.510+02:00Nauka JEE - projekt LinuxAdvicesNiedawno, w ramach <a href="http://www.java.pl">PJUGu</a>, został powołany do życia projekt mający na celu naukę Javy (w szczególności J2EE).<br />Więcej informacji na temat projektu na blogu <a href="http://blog.darekzon.com/2008/07/linuxadvices-otwarty-projekt-pjug.html">Darka</a>, na stronie <a href="http://code.google.com/p/linuxadvices/">projektu</a> oraz na <a href="http://groups.google.pl/group/linuxadvices">grupie dyskusyjnej</a>.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-22283876097422413942008-06-29T17:12:00.019+02:002008-10-21T10:17:09.770+02:00NetBeans + Ecplise = ...W sobotę (28.08.2008) miałem okazję uczestniczyć w <a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Krakow">Ecplise DemoCamps</a> w Krakowie. Spotkanie zaliczam do udanych. W drodze powrotnej przypomniał mi się niedawny wpis na blogu <a href="http://blogs.sun.com/geertjan/entry/running_netbeans_from_eclipse">Geertjan Wielengi</a> opisujący jak uruchomić aplikację napisaną z wykorzystaniem <a href="http://platform.netbeans.org/">NetBeans Platform</a> z <a href="http://www.eclipse.org/">Eclipsa</a>.<br />Jako, że ostatnio miałem trochę do czynienia z bardzo fajną biblioteką <a href="http://graph.netbeans.org/">Visual Library</a>, 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ę.<br />Ściągnąłem <a href="http://graph.netbeans.org/files/documents/188/1357/Visual-Library-2.0-pre3.zip">Visual Library</a>, 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).<br />Po pierwsze stworzyłem panel, na którym miał wylądować edytor graficzny.<br /><br /><pre class="moz-signature" cols="72"><br />package pl.marekklis.graph;<br /><br />import java.awt.BorderLayout;<br />import java.awt.Dimension;<br /><br />import javax.swing.JFrame;<br />import javax.swing.JPanel;<br />import javax.swing.JScrollPane;<br /><br />import org.netbeans.api.visual.graph.GraphScene;<br /><br />public class GraphTest extends JPanel{<br /><br /> public static void main(String[] args) {<br /> JFrame frame = new JFrame("Graph test");<br /> frame.setMinimumSize(new Dimension(400,300));<br /> frame.setSize(400, 300);<br /> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br /> frame.setContentPane(new GraphTest());<br /> frame.pack();<br /> frame.setVisible(true);<br /> }<br /> <br /> public GraphTest() {<br /> initComponents();<br /> }<br /> <br /> private void initComponents(){<br /> setLayout(new BorderLayout());<br /> JScrollPane scrollPane = new JScrollPane();<br /> add(scrollPane,BorderLayout.CENTER);<br /> GraphScene scene = new GraphSceneImpl();<br /> scrollPane.setViewportView(scene.createView());<br /> add(scene.createSatelliteView(),BorderLayout.WEST);<br /> }<br /><br />}<br /></pre><br /><br />Po drugie stworzyłem implementacje <a href="http://bits.netbeans.org/6.1/javadoc/org-netbeans-api-visual/org/netbeans/api/visual/graph/GraphScene.html">GraphScene</a>.<br /><br /><pre class="moz-signature" cols="72"><br />package pl.marekklis.graph;<br /><br />import java.awt.Point;<br /><br />import org.netbeans.api.visual.action.ActionFactory;<br />import org.netbeans.api.visual.action.ConnectProvider;<br />import org.netbeans.api.visual.action.ConnectorState;<br />import org.netbeans.api.visual.anchor.AnchorFactory;<br />import org.netbeans.api.visual.anchor.AnchorShape;<br />import org.netbeans.api.visual.graph.GraphScene;<br />import org.netbeans.api.visual.widget.ConnectionWidget;<br />import org.netbeans.api.visual.widget.LayerWidget;<br />import org.netbeans.api.visual.widget.Scene;<br />import org.netbeans.api.visual.widget.Widget;<br />import org.netbeans.api.visual.widget.general.IconNodeWidget;<br />import org.openide.util.Utilities;<br /><br />public class GraphSceneImpl extends GraphScene<String, String> {<br /> <br /> private LayerWidget mainLayer;<br /> private LayerWidget connectionLayer;<br /> private LayerWidget interactionLayer;<br /><br /> public GraphSceneImpl() {<br /> mainLayer = new LayerWidget(this);<br /> connectionLayer = new LayerWidget(this);<br /> interactionLayer = new LayerWidget(this);<br /> addChild(mainLayer);<br /> addChild(connectionLayer);<br /> addChild(interactionLayer);<br /> Widget w1 = addNode("1. węzeł");<br /> w1.setPreferredLocation(new Point(10, 100));<br /> Widget w2 = addNode("2. węzeł");<br /> w2.setPreferredLocation(new Point(100, 250));<br /> Widget w3 = addNode("Jakiś kolejny węzeł");<br /> w3.setPreferredLocation(new Point(250, 250));<br /> Widget w4 = addNode("Jakiś kolejny węzeł");<br /> w4.setPreferredLocation(new Point(250, 350));<br /> getActions().addAction(ActionFactory.createZoomAction());<br /> }<br /><br /> @Override<br /> protected Widget attachNodeWidget(String arg0) {<br /> IconNodeWidget widget = new IconNodeWidget(this);<br /> if (arg0.startsWith("1")) {<br /> widget.setImage(Utilities.loadImage("pl/marekklis/graph/<br /> resources/gr01.png"));<br /> } else if (arg0.startsWith("2")) {<br /> widget.setImage(Utilities.loadImage("pl/marekklis/graph/<br /> resources/gr02.png"));<br /> } else {<br /> widget.setImage(Utilities.loadImage("pl/marekklis/graph/<br /> resources/gr03.png"));<br /> } <br /> widget.getActions().addAction(<br /> ActionFactory.createExtendedConnectAction(<br /> connectionLayer,new MyConnectProvider()));<br /> widget.getActions().addAction(<br /> ActionFactory.createAlignWithMoveAction(<br /> mainLayer, interactionLayer, <br /> ActionFactory.createDefaultAlignWithMoveDecorator()));<br /> widget.setLabel(arg0);<br /> mainLayer.addChild(widget);<br /> return widget;<br /> }<br /><br /> @Override<br /> protected Widget attachEdgeWidget(String arg0) {<br /> return null;<br /> }<br /><br /> @Override<br /> protected void attachEdgeSourceAnchor(<br /> String arg0, String arg1, String arg2) {<br /> }<br /><br /> @Override<br /> protected void attachEdgeTargetAnchor(<br /> String arg0, String arg1, String arg2) {<br /> }<br /><br /> private class MyConnectProvider implements ConnectProvider {<br /><br /> public boolean isSourceWidget(Widget source) {<br /> return source instanceof IconNodeWidget && source != null <br /> ? true : false;<br /> }<br /><br /> public ConnectorState isTargetWidget(Widget src, Widget trg) {<br /> return src != trg && trg instanceof IconNodeWidget ? <br /> ConnectorState.ACCEPT : ConnectorState.REJECT;<br /> }<br /><br /> public boolean hasCustomTargetWidgetResolver(Scene arg0) {<br /> return false;<br /> }<br /><br /> public Widget resolveTargetWidget(Scene arg0, Point arg1) {<br /> return null;<br /> }<br /><br /> public void createConnection(Widget source, Widget target) {<br /> ConnectionWidget conn = new ConnectionWidget(<br /> GraphSceneImpl.this);<br /> conn.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED);<br /> conn.setTargetAnchor(AnchorFactory.<br /> createRectangularAnchor(target));<br /> conn.setSourceAnchor(AnchorFactory.<br /> createRectangularAnchor(source));<br /> connectionLayer.addChild(conn);<br /> }<br /> }<br />}<br /></pre><br /><br />I oto efekt:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUXa7kGc14qlCvmBO9x4FB5YuoMQHZBudT9hZiR2nlZnQqnJ4EjFuf2xzHpUGelMftAMdt7HCeylhauUX9YzNYs7NP1900v02-QFQvAxIFvNpIxQJCB-tKVisXPcFVFnEtwdRcD2PxJeU/s1600-h/GraphInEclipse.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUXa7kGc14qlCvmBO9x4FB5YuoMQHZBudT9hZiR2nlZnQqnJ4EjFuf2xzHpUGelMftAMdt7HCeylhauUX9YzNYs7NP1900v02-QFQvAxIFvNpIxQJCB-tKVisXPcFVFnEtwdRcD2PxJeU/s320/GraphInEclipse.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5217333510945476722" /></a><br /><br />W naszym okienku mamy działający przykład wykorzystujący Visual Library.<br /><br />PS. Biblioteki Visual Library nie musimy ściągać gdyż jest ona częścią Netbeansa i znajduje się w katalog_Netbeansa/platform8/modules/.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com4tag:blogger.com,1999:blog-62160705063034256.post-75647241269426417372008-05-19T20:30:00.017+02:002008-05-19T22:21:09.964+02:00Mechanizm aktualizacji w NetBeans PlatformPrzyjrzyjmy się dzisiaj w jaki sposób możemy wykorzystać <span style="font-style:italic;">Auto Update Service</span> do rozprowadzania aktualizacji modułów w aplikacji opartej o <a href="http://platform.netbeans.org">platformę NetBeans</a>.<br />W tym celu załóżmy nowy projekt typu <span style="font-style:italic;">NetBeans Platform Application</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYUGRQZwOy55j7zt2gIyGTd1FaeC-UBNsnacvRy-COKdelX_Mq3eoJ990m1_HyW4izLbom9yqYpuiNwGwqUPANfYAY9mtKnTtuJ59mnaXpzMEB0yXRMH9xWLblXyOmBSPveUv99tWZKk/s1600-h/update01.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYUGRQZwOy55j7zt2gIyGTd1FaeC-UBNsnacvRy-COKdelX_Mq3eoJ990m1_HyW4izLbom9yqYpuiNwGwqUPANfYAY9mtKnTtuJ59mnaXpzMEB0yXRMH9xWLblXyOmBSPveUv99tWZKk/s320/update01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202172038077695538" /></a><br /><br />oraz projekt modułu o nazwie np <span style="font-style:italic;">UpdateModule</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUqWvTpI3qWWFfdXWKcsaPrFFn6qsh3dk5akKBrIuxn-J-juY6egt5oo7wk6WUTNWPJaVeAL6tiSHfbRogW1MjNCnBNJZ-KF7U4DfC37ExoWT6Sajik7z4Q8TOsRrli-Ha5Ni-sQQNecs/s1600-h/update03.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUqWvTpI3qWWFfdXWKcsaPrFFn6qsh3dk5akKBrIuxn-J-juY6egt5oo7wk6WUTNWPJaVeAL6tiSHfbRogW1MjNCnBNJZ-KF7U4DfC37ExoWT6Sajik7z4Q8TOsRrli-Ha5Ni-sQQNecs/s320/update03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202172373085144642" /></a><br /><br />Po założeniu modułu okno projektów wygląda u mnie następująco:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqdgfGPNnvYYbdJ-BDkkAh4R1_NzSacMiIaSj1KkVSrBVwRxxebv39ZKM_GDrKzbH6xB2L11wvYzhvXmkvUr-eDIlxMVRT_2L28Qe-TFnWfVrRUuIfwaziq9MnXUeTkzsqmYBH9emRyvk/s1600-h/update06.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqdgfGPNnvYYbdJ-BDkkAh4R1_NzSacMiIaSj1KkVSrBVwRxxebv39ZKM_GDrKzbH6xB2L11wvYzhvXmkvUr-eDIlxMVRT_2L28Qe-TFnWfVrRUuIfwaziq9MnXUeTkzsqmYBH9emRyvk/s320/update06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202172789696972370" /></a><br /><br />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.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivzc9nSlsm-jgEgBuSLu88GwynJPM6rCXsVgqFG_tfurUbwcOebVXv1K2GMNXyyvsf2R4z3R8jsPgCwdk1c77H8tD1qlzTGV6k5t-tIYqIDJuCynDp5IIpyM92JmJAewnxFgVB_DtMfjE/s1600-h/update07.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivzc9nSlsm-jgEgBuSLu88GwynJPM6rCXsVgqFG_tfurUbwcOebVXv1K2GMNXyyvsf2R4z3R8jsPgCwdk1c77H8tD1qlzTGV6k5t-tIYqIDJuCynDp5IIpyM92JmJAewnxFgVB_DtMfjE/s320/update07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202176058167084642" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirssMXgGJftR8vXSMPErUK6zIbAERsia8CLBU7DFwbsdPKLfq4r4JMEwH5n408d5AJjOmy54T4J4UGMsUR0OPI4gqkZkFVuUY25UJ4yqTVn9lQ4SzdnF-O0K_kxBPnia_a3wX37mChxg8/s1600-h/update10.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirssMXgGJftR8vXSMPErUK6zIbAERsia8CLBU7DFwbsdPKLfq4r4JMEwH5n408d5AJjOmy54T4J4UGMsUR0OPI4gqkZkFVuUY25UJ4yqTVn9lQ4SzdnF-O0K_kxBPnia_a3wX37mChxg8/s320/update10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202176375994664562" /></a><br /><br />Następnym krokiem jest dodanie do naszego modułu pliku typu <span style="font-style:italic;">Update Center</span>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy9x9DwYx4OiVuX6pi09W_FrijI0i0BMImgewW9eHwr_GSMOem6IhF3NV4LMOlGLi5xMVzJSHj8hKMVoF0aTy_-f9dkFw7_tspMhNgcEEFxc9HQIpu8K397JTs-aCldvHA62KPN3gGeG0/s1600-h/update11.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy9x9DwYx4OiVuX6pi09W_FrijI0i0BMImgewW9eHwr_GSMOem6IhF3NV4LMOlGLi5xMVzJSHj8hKMVoF0aTy_-f9dkFw7_tspMhNgcEEFxc9HQIpu8K397JTs-aCldvHA62KPN3gGeG0/s320/update11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202176753951786626" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwYoYWKa6Ujcpw8b2WXJ5YZduFLd3yJv0L-uUxKppqO_EeZxp5U5vzhlgOHo3f7U90Q95q7O6S_3pMPG2Xbu3rXh_kOf_93jMvMt7_4rAiQOdmhssC0EFJ_g0WXfLlxzwZORR7lPsUUD8/s1600-h/update12.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwYoYWKa6Ujcpw8b2WXJ5YZduFLd3yJv0L-uUxKppqO_EeZxp5U5vzhlgOHo3f7U90Q95q7O6S_3pMPG2Xbu3rXh_kOf_93jMvMt7_4rAiQOdmhssC0EFJ_g0WXfLlxzwZORR7lPsUUD8/s320/update12.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202177003059889810" /></a><br /><br />W tym przykładzie jako serwer przechowujący uaktualnienia wybrałem <span style="font-style:italic;">localhost</span>. Dokładny adres serwera z aktualizacjami (a konkretnie do pliku updates.xml opisującego aktualne moduły) znajduje się w pliku <span style="font-style:italic;">Bundle.properties</span> w pakiecie, do którego dodaliśmy <span style="font-style:italic;">Update Center</span>.<br />Ponieważ szablon projektu <span style="font-style:italic;">NetBeans Platform Application</span> nie posiada zaznaczonych bibliotek <span style="font-style:italic;">Auto Update</span> musimy to zrobić ręcznie.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJxAFMY9DrosCPH5Wle_CtwueMHr7OReoTdMws7tpxgBCr62CAougy6Y9P8Xi7GIZf1TXUG-6TAYwdO0C3rDs4xgyN9Q9hMkHDIppM164vsfocJ2Y9FwzjvZuUbJSzmWRNV7cGblkgh_A/s1600-h/update13.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJxAFMY9DrosCPH5Wle_CtwueMHr7OReoTdMws7tpxgBCr62CAougy6Y9P8Xi7GIZf1TXUG-6TAYwdO0C3rDs4xgyN9Q9hMkHDIppM164vsfocJ2Y9FwzjvZuUbJSzmWRNV7cGblkgh_A/s320/update13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202180112616212130" /></a><br /><br />Teraz możemy już opublikować naszą "aplikację" (<span style="font-style:italic;">Build ZIP Distibution</span>). Rozpakujmy gdzieś archiwum i uruchommy aplikację. W menu <span style="font-style:italic;">Help</span> powinna być pozycja <span style="font-style:italic;">Check for updates</span>. Po wybraniu dostaniemy komunikat, że nasza aplikacja jest aktualna.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS6glPPCEVMRjVkdrfYwCNEcgH-VxIAoVZQQzlGcJZ_zhKigc-Pws9Svgta3-3Zt-S7TCn3VEN5otDURspWW7DofZaHnHud21rAepjqX79uEBBK3AQjbGs8dgm_Xx3pVrBSyGiHgy7YXk/s1600-h/update15.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS6glPPCEVMRjVkdrfYwCNEcgH-VxIAoVZQQzlGcJZ_zhKigc-Pws9Svgta3-3Zt-S7TCn3VEN5otDURspWW7DofZaHnHud21rAepjqX79uEBBK3AQjbGs8dgm_Xx3pVrBSyGiHgy7YXk/s320/update15.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202181031739213490" /></a><br /><br />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 <span style="font-style:italic;">Specification version</span> na wyższy numer.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBwh1L7AQN5c51Q2U1xS_HbrfeJBHT0YF4lwkq492QtrX3xA0_-L18KoT_2oogqzONP4AxM8SHjCXVnPYUTbO8-yJzCUkrMB2oO_gPeZhLrEV2jhWk_HjI5PdvvI4ipRuvuDk0MBBuAh4/s1600-h/update17.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBwh1L7AQN5c51Q2U1xS_HbrfeJBHT0YF4lwkq492QtrX3xA0_-L18KoT_2oogqzONP4AxM8SHjCXVnPYUTbO8-yJzCUkrMB2oO_gPeZhLrEV2jhWk_HjI5PdvvI4ipRuvuDk0MBBuAh4/s320/update17.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202181542840321730" /></a><br /><br />Budujemy moduły poprzez <span style="font-style:italic;">Create NBMs</span>. Moduły (w naszym przypadku będzie to tylko jeden moduł) zostaną utworzone w podkatalogu projektu (<span style="font-style:italic;">build/updates</span>). Wystarczy zawartość tego katalogu przekopiować do katalogu, który jest głównym katalogiem naszego serwera www. Ja wykorzystałem serwer Apache.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnYlg4Baj6qLwrkVYYtt3hSwxsaleWQkUC9LkN1KorpogonNYgoTAEATEGiOWpmqBk7zuFY09f-pv2q5iBth3Q8afskDfUxi-mLaE_myFIi5BHU-bjnVJOEeX7zPu6rYFeDVOY0jP7uSw/s1600-h/update19.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnYlg4Baj6qLwrkVYYtt3hSwxsaleWQkUC9LkN1KorpogonNYgoTAEATEGiOWpmqBk7zuFY09f-pv2q5iBth3Q8afskDfUxi-mLaE_myFIi5BHU-bjnVJOEeX7zPu6rYFeDVOY0jP7uSw/s320/update19.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202183058963777234" /></a><br /><br />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.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRj-LL95_-pSppihxZzU8ZfH9KVK-zgXCBNA2li9Z6SoiItFoofiheGZ6y5bLhgXFnL36opNNpFUi085r57kBLFrykT_pODZiBKfoDvufBKiwQLMWPdFIpxOLxvg6mGoOJd3lrOBUA0g/s1600-h/update20.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRj-LL95_-pSppihxZzU8ZfH9KVK-zgXCBNA2li9Z6SoiItFoofiheGZ6y5bLhgXFnL36opNNpFUi085r57kBLFrykT_pODZiBKfoDvufBKiwQLMWPdFIpxOLxvg6mGoOJd3lrOBUA0g/s320/update20.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202183879302530786" /></a><br /><br />Po zakończeniu procesu aktualizacji mamy już świeżą wersję aplikacji.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDYWee8U12siiSSH5sjhM1h2U1uhkJh-h14uetpoAu6evxes-GaSBymJTrG43OKydLDt7KEzayISD7StTsoQZlwkpYqbU_5I7PR_tCwYFLWSULN0mJQ33shFPqoPci7NPg1XKzHRc-bXs/s1600-h/update24.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDYWee8U12siiSSH5sjhM1h2U1uhkJh-h14uetpoAu6evxes-GaSBymJTrG43OKydLDt7KEzayISD7StTsoQZlwkpYqbU_5I7PR_tCwYFLWSULN0mJQ33shFPqoPci7NPg1XKzHRc-bXs/s320/update24.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5202184995994027762" /></a>Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-44005555986330738832008-05-18T19:26:00.002+02:002008-05-18T19:31:45.773+02:00Materiały z prelekcjiJeśli ktoś jest zainteresowany, to materiały z mojej prelekcji nt NetBeans Platform są dostępne na stronie <a href="http://www.java.pl/?page_id=10">PJUGu</a>. Na stronie tej znajdują się również materiały z poprzednich spotkań.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-77257273154397897002008-05-11T17:55:00.002+02:002008-05-11T18:05:04.000+02:00PJUG - prelekcja nt. NetBeans PlatformW najbliższy czwartek (15 maja 2008) o godzinie 19:00 będę miał zaszczyt poprowadzić prelekcję na temat <a href="http://platform.netbeans.org">platformy NetBeans</a> w ramach czwartkowych spotkań <a href="http://www.java.pl">PJUGu</a>.<br />Podczas prelekcji powstanie od podstaw prosta aplikacja, która będzie mogła działać samodzielnie bądź jako rozszerzenie NetBeans IDE.<br />Jeśli czas i słuchacze pozwolą ;) to postaram się zaprezentować także bibliotekę <a href="http://graph.netbeans.org">Visual Library</a>, która jest częścią platformy.<br />Istnieje możliwość wcześniejszej <a href="http://www.jugevents.org/jugevents/event/show.html?id=3779">rejestracji</a> na to spotkanie.<br /><br />Serdecznie zapraszam.Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0tag:blogger.com,1999:blog-62160705063034256.post-40965324947781167712008-04-28T19:46:00.004+02:002008-04-28T20:04:54.380+02:00NetBeans 6.1 oficjalnie już jestDzisiaj ukazała się nowa, świeża wersja środowiska <a href="http://www.netbeans.org">NetBeans</a> oznaczona numerkiem 6.1.<br /><br />Jeśli chodzi o platformę to nowością (to chyba zbyt szumne słowo) jest nowy szablon projektu <span style="font-style:italic;">NetBeans Platform Application</span>. <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj26qhcFCUDxig2cjepfxEsZmG83i_TIB-pqBbhMUsrTxM068Ocua0k1RiduF9nbstN4YE4QdTcN9fTynIy4T_VhuDLYzXdXwO-IdUrEzhRGgqtD1lPtF0nxpTaRijj_U7zBN7cRoHZQQo/s1600-h/NetBeansPlatformApplication.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj26qhcFCUDxig2cjepfxEsZmG83i_TIB-pqBbhMUsrTxM068Ocua0k1RiduF9nbstN4YE4QdTcN9fTynIy4T_VhuDLYzXdXwO-IdUrEzhRGgqtD1lPtF0nxpTaRijj_U7zBN7cRoHZQQo/s320/NetBeansPlatformApplication.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5194356768238429842" /></a><br /><br />Szablon ten posiada już zaznaczone najpopularniejsze moduły wykorzystywane przy tworzeniu typowej aplikacji opartej o platformę.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4ofR4GXZ3OHHwmm6mslsUWU1jN3EZzgnlzOBO2UK_gk03lkRj2KUcbwcfsuACev9TxCP5lCKSKapf6gG8NjGqkRb_R3dcNTN-nT7_fuj1rjwoEV4V5xn3BABhSAChdBoZ75ALavJE1Mw/s1600-h/libraries.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4ofR4GXZ3OHHwmm6mslsUWU1jN3EZzgnlzOBO2UK_gk03lkRj2KUcbwcfsuACev9TxCP5lCKSKapf6gG8NjGqkRb_R3dcNTN-nT7_fuj1rjwoEV4V5xn3BABhSAChdBoZ75ALavJE1Mw/s320/libraries.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5194357339469080226" /></a>Marek Kliśhttp://www.blogger.com/profile/14954353505428736100noreply@blogger.com0