Sun Certified Netbeans Specialist

Tak, to nie pomyłka! Naprawdę istnieje egzamin sprawdzający sprawność w użyciu NetBeansa. Do tego ja już go zdałem 🙂 Ale opowiedzmy historię od początku.

Dawno, dawno temu, w odległej galaktyce, znaczy się w lipcu ubiegłego roku, wynalazłem gdzieś link do jakiejś ankiety, która zadawała pytanie: “o co warto pytać w przypadku sprawdzania znajomości IDE”. Z poczuciem zabicia kawałka letniej nudy wypełniłem i zapomniałem :-). 
W październiku dowiedziedziałem się, że naprawdę ktoś robi egzamin z NetBeansa. Byłem delikatnie mówiąc, nastawiony niezwykle sceptycznie wobec całego przedsięwzięcia. Po przejrzeniu zakresu egzaminu doszedlem do wniosku, że może ktoś się postarał, ale musiałbym to zobaczyć na żywo. Zawartość zgadzała się mniej więcej z opinią, którą wyraziłem we wspomnianej wcześniej ankiecie. 
W listopadzie zapisałem się na betę. Czy to z ciekawości, czy z wrodzonego sceptycyzmu, ciężko powiedzieć.
W dzień egzaminu z gorejącym czołem (bo akurat miałem wątpliwą przyjemność być chorym) usiadłem przed komputerem i zacząłem rozwiązywać. Pytań było mnóstwo (rzeczywisty egzamin to 61 pytań, beta miała ponad 150) i ponad 3h czasu do dyspozycji (75 minut w finalej wersji). Wyszedłem po mniej więcej 1.5h. Opiekun pytał czy “na pewno?” i sugerował, że “może jeszcze coś chcę przemyśleć”, ale po pierwsze byłem pewien swego, a po drugie, skończyły mi się pastylki na kaszel, który stał się dla mnie nie do zniesienia. Później zdążyłem o całej sprawie spokojnie zapomnieć, aż tuż przed świętami (23 grudnia) dostałem potwierdzenie, że zdałem. 
Summa sumarum stało się, zostalem Sun Certified Netbeans Specialist. Tyle historii, teraz coś o samym egzaminie.

Zakresem i jakość egzaminu zaskoczyły mnie pozytywnie. Pytania uważam za w miarę łatwe dla logicznie myślącego człowieka, choć zdarzyło mi się nie być pewnym odpowiedzi, a przy kilku otworzyłem oczy szeroko ze zdumienia – “to coś takiego w ogóle JEST?!”. Bardzo duży nacisk położono na: 
  • tworzenie różnych kombinacji bibliotek, jre 
  • wpinanie się w sposób kompilacji stosowany przez NB (czyli Anta)
  • tworzenie projektu w NB
  • JEE
  • konfigurację NB
  • działanie edytora
Czyli w zasadzie coś, co dobrze znać w IDE z którego się korzysta. I tu chyba dotarłem do sedna całej sprawy: NB nie cieszy się z tego co wiem jakąś specjalną popularnością – sam do pracy wykorzystuję IntelliJ IDEA (i szczerze go polecam!). Fakt, IDEA kosztuje dość dużo, ale jest wg mnie dużo lepsza. Ale dość świętej wojny, pytanie kto będzie zdawał ten egzamin? Widzę w nim korzyść jedynie dla osób, które NB znałyby jako-tako i podczas przygotowań mogłyby poznać swoje IDE lepiej i poznać obszary, których na codzień nie używają.

COOLuary

W sobotę 24 stycznia odbyła się pierwsza w Polsce Javova UnKonferencja – COOLuary. Esencja: to, na co w trakcie ‘normalnych’ konferencji brakuje zawsze czasu – czyli swobodne rozmowy o tematyce około Javowej.


Każdy uczestnik został odbarowywany gadżetem, można było dostać książkę, koszulkę, smycz, pendrive (i pewnie z tuzin innych rzeczy), trzeba tylko było mieć trochę szczęścia przy losowaniu ;). Zaczęło się od wprowadzenia organizatora, Grześka Dudy, na temat idei i zasad (nie?)konferencji, sponsorów i nagród jakie czekały na uczestników. Potem błyskawicznie na tablicy zmaterializowała się agenda (przy użyciu nieśmiertelnych żółtych karteczek) i ruszyło..


Uczestniczyłem w sesjach na temat:

  • przyszłości, nowości i kierunku rozwoju Javy 7
  • refaktoringu
  • desktopu, GUI, Flexa i JavyFX
  • Scali
  • ‘jak wprowadzić Groovy’ego do pewnej korporacji’ (napisałem pewnej, ponieważ okazało się, że przy stoliku zebrani byli pracownicy wyłącznie jednej firmy :])

Przez cały czas można było napić się kawy/herbaty/soku i przegryźć ciastkiem. Na sam koniec odbyło się losowanie darmowych wejściówek na konferencje:

  • GeeCON
  • 4developers
  • Java Developers’ Day

Całą imprezę uważam za udaną i mam nadzieję, że kolejna edycja się odbędzie 🙂

GeeCON w maju w Krakowie!



7 i 8 maja w Krakowie odbędzie się GeeCON, pierwsza w Polsce, międzynarodowa konferencja poświęcona Javie i RIA. Jest organizowana przez Polską Grupę Użytkowników Języka Java, Czeską Grupę Użytkowników Języka Java oraz Poznańską Grupę Użytkowników Języka Java.

Konferencja potrwa dwa dni, podczas których uczestnicy będą mieli możliwość spotkania światowej sławy specjalistów takich jak m.in. Guillaume Laforge, Jevgeni Kabanov oraz Adam Bien i wielu innych. Mam nadzieję, że wydarzenie to przejdzie do pamięci wszystkich sympatyków języka Java w naszym kraju.

Po więcej informacji zapraszam na oficjalną stronę konferencji.

OpenSolaris 2008.11

W końcu dostępna jest długo oczekiwana wersja 2008.11 OpenSolarisa. Pojawiło się w niej mnóstwo nowości, poprawiono liczne błędy – widać olbrzymi postęp jaki został dokonany dzięki polączeniu wysiłków inżynierów Suna i społeczności OpenSource.

Dzięki temu, że regularnie updateuję swojego OpenSolarisa, zdążyłem się już zapoznać z niektórymi nowościami wprowadzonymi w nowym wydaniu. Na pierwszy rzut oka widać, że pojawiły się nowe artworki i tapety. Podobnie instalator obdarzony został nowymi, ładniejszymi moim zdaniem, grafikami. Nowości jest oczywiście więcej i dotyczą też istotniejszych składników systemu 🙂 A więc:

  • updaty: Gnome do wersji 2.24, FireFox 3, OpenOffice 3
  • TimeSlider – killer feature OpenSolarisa. Pozwala przeglądać historię zmian zawartości katalogów – nie ma problemu, żeby pliki z przeszłości przenieść na obecną wersję pulpitu. Proste a użyteczne, i pozwala zaoszczędzić wiele nerwów. Odpowiednik Time Machine z MacOSów.
  • ulepszone wsparcie dla kart dźwiękowych HD
  • poprawione wsparcie dla notebooków Dell, Lenovo i Toshiba. Sprawdzilem, na moim Dellu wszystko ‘po prostu działa’ tak jak powinno.
  • OpenSource’owy konkurent iTunes – SongBird
  • Tracker czyli desktop search
  • Update Notifier – przez pewien czas bardzo brakowało tej ‘oczywistej’ funkcji. Na szczęście już jest.
  • Sun Studio 12 – oparta o NB6.5, olbrzymi krok naprzód w stosunku do poprzedniej wersji.
  • Nowe repozytoria, nowe pakiety

To oczywiście nie wszystkie nowości 🙂 Zachęcam do pobrania i samodzielnych zabaw: http://dlc.sun.com/osol/opensolaris/2008/11/osol-0811.iso

NetBeans 6.5!

W dniu dzisiejszym ukazała się długo oczekiwana, finalna wersja edycji 6.5 NetBeans IDE! Jak zawsze, można ją pobrać ze strony http://www.netbeans.org/downloads

Pełna lista nowych i poprawionych funkcji jest bardzo obszerna i znajduje się tu, dla mnie najistotniejsze są:

  • Prędkość! Wersja 6.0 wydawała się włączać całe wieki, 6.1 lata, 6.5 włącza się poniżej minuty! Sam edytor też wydaje się mniej ociężały, super!
  • Obsluga Groovy, Grails i JavaFX
  • dodany GlassFish v3 Prelude
  • ulepszone wsparcie dla JavaScriptu (z debuggerem!) i AJAXu
  • nowy, lepszy debugger javy znacznie ułatwiający śledzenie wielu wątków jednocześnie
  • panel ustawień z możliwością wyszukiwania
  • obsluga ścieżek UNC (np \laptop)

Ja już ściągnąłem :>

Prezentacja: WebServices z NetBeans i GlassFish

18 XI o 18 w sali 18*24 odbędzie się prezentacja WebServices z NetBeans 6.5 i GlassFish! Omówię w niej ideę i najbardziej znane pojęcia związane z WebServices i SOAP oraz pokażę, jak przy pomocy NetBeans IDE i serwera GlassFish prosto i błyskawicznie utworzyć, udostępnić i wykorzystywać SOAPowe WebServices.

Czas: 18.XI, g. 18
Miejsce: Uniwersytet Ekonomiczny, ul Rakowicka 27, paw. Biblioteki, sala 432

Zapraszam serdecznie!

Po SFD 2008


Szczęśliwie, cało i zdrowo 18go października odbył się krakowski Software Freedom Day. Przesunięcie daty w stosunku do ogólnoświatowego (20 września) o prawie miesiąc wyszło wszystkim na dobre – studenci wrócili do Krakowa, organizatorzy i prelegenci mieli więcej czasu. Było też więcej czasu na reklamę wśród znajomych przez jabbera/gg itd 🙂 W tym roku miałem przyjemność poprowadzić jeden z wykładów. Starałem się zwięźle opowiedzieć o OpenSolarisie, którym bawię się +/- od listopada zeszłego roku i który nieprzerwanie (w różnych wersjach) mieszka od tego czasu na moim >6 letnim komputerze. I działa, i to działa nadzwyczaj dobrze. Inaczej wrócilbym do Debiana.

SFD 2008 odbyło się w U2, nowej sali wykładowo-konferencyjnej AGHu. Sala przeznaczona na ponad 650 osób wywołała u mnie tremę i onieśmielenie, ale sądząc po ilości pytań które otrzymałem po wykładzie i szybkości rozchodzenia się gadżetów wykład raczej się podobał 🙂
Prezentacja jest dostępna tu: [prezentacja, odp]

Zdjęcia (gadżetów, prelegenta isali):

Pech chcial, że choć bardzo chciałem, nie było mi dane zobaczyć żadnego z pozostałych wykładów.

10 urodziny NetBeans!

NetBeans Decathlon to konkurs zorganizowany na 10. urodziny NetBeans. A skoro urodziny, to prezenty! Dlatego 300 pierwszych osób otrzyma koszulki NetBeans z limitowanej serii wydanej specjalnie na 10. urodziny.

By wziąć udział w konkursie wystarczy wykonać zadania, których łączna wartość punktowa wyniesie 50 lub więcej. Zadania są różnorodne, od napisania posta na blogu, nagrania filmu lub podcastu, przez wypełnienie ankiety aż do publikacji wiadomości lub zdjęć na grupie NetBeans w serwsie Facebook. Pełna lista zadań dostępna jest na stronie NetBeans Decathlon, podobnie jak formularz, w którym zgłaszamy się do konkursu oraz deklarujemy wykonane zadania (i podajemy linki do “dowodów rzeczowych”). Powodzenia i szybkości w reakcji, bo kto pierwszy, ten lepszy!

Ganymede – co nowego?

Pobawiłem się już chwilę najnowszą edycją Eclipse, wg mnie najważniejsze nowości to:

Po zerowe: ładniejszy splash:

Free Image Hosting at www.ImageShack.us vs Free Image Hosting at www.ImageShack.us

Po pierwsze – jest szybszy! Ładowanie projektu trwa krócej i całe środowisko daje subiektywne wrażenie szybszego działania 🙂

Po drugie – breadcrumbs, czyli rewelacyjne uproszczenie w nawigacji:

Free Image Hosting at www.ImageShack.us

Po trzecie: nie udało mi się do tej pory ani razu wywrócić nowego eclipse’a, mimo że wypchałem go już moimi ulubionymi pluginami. Super!

Po czwarte: ‘ktoś’ wreszcie wymyślił, że update’y były skopane i stworzono zupełnie nowy ekran:

Free Image Hosting at www.ImageShack.us

Java Monkey Engine with Eclipse Ganymede

25 czerwca wydana została nowa wersja Eclipse o kosmicznej nazwie Ganymede. Mimo, że na co dzień używam czegoś zupełnie innego, muszę zobaczyć co u konkurencji słychać 😀 Dodatkowo z okazji wydania Ganymede fundacja Eclipse zorganizowała Ganymede Around the World Contest. Ja z kolei od jakiegoś czasu bawię się Java Monkey Engine, wiec postanowiłem coś o nim napisać.

Na początek… co to jest JME?

To pełnoprawny (czyt. w pełni wypasiony :D) silnik do tworzenia gier, wspierający grafikę przestrzenną i dzwięk 3d. Ale jak to, w Javie? A tak! Oczywiście zgodnie z filozofią platformy, nie obeszło sie bez natywnych bibliotek, ale coś za coś, a tutaj ‘cały komplet’ cosiów jest dostarczony wraz z jme.

Zaczynamy: z repozytorium sciągamy aktualną wersję JME2, kompilujemy (ant dist-all) i dodajemy do naszego projektu biblioteki. Istnieje też repozytorium jme na java.net, ale zawiera kod w starszej (1.x) wersji.

Ponieważ będzie to pierwsza aplikacja, nie będzie robiła niczego skomplikowanego – ot, zainicjalizujemy sobie wyświetlacz i pokażemy kilka obiektów.

Glówna klasa naszego programu oparta będzie o klasę com.jme.app.SimpleGame – dzięki temu nie będziemy musieli (tym razem!) wykonywać wielu czynności ręcznie – implementacji dostarczy nam właśnie klasa SimpleGame. Pozostaje ja tylko rozszerzyć 🙂


1
public class Demo extends com.jme.app.SimpleGame {<br /><br />   public static void main(String[] args) {<br />       Demo demo = new Demo();<br />       demo.start();<br /><br />       System.out.println("Done with the game");<br />   }<br /><br />   @Override<br />   protected void simpleInitGame() {<br />       // TODO Auto-generated method stub<br />   }<br />}

Z ciekawości i niecierpliwości spróbujemy uruchomić już teraz i… Niestety, nie działa.


1
<br />   Jul 16, 2008 12:35:47 AM com.jme.app.BaseGame start<br />   INFO: Application started.<br />   Jul 16, 2008 12:35:47 AM com.jme.system.PropertiesGameSettings &lt;init&gt;<br />   INFO: PropertiesGameSettings created<br />   Jul 16, 2008 12:35:47 AM com.jme.system.PropertiesGameSettings load<br />   WARNING: Could not load properties. Creating a new one.<br />   Jul 16, 2008 12:35:47 AM com.jme.app.BaseSimpleGame initSystem<br />   INFO: jME version 2.0 dev build 1<br />   Jul 16, 2008 12:35:47 AM com.jme.input.joystick.DummyJoystickInput &lt;init&gt;<br />   INFO: Joystick support is disabled<br />   Jul 16, 2008 12:35:47 AM com.jme.system.lwjgl.LWJGLDisplaySystem &lt;init&gt;<br />   INFO: LWJGL Display System created.<br />   Jul 16, 2008 12:35:47 AM class pl.ags.jme.Demo start()<br />   SEVERE: Exception in game loop<br />   java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path<br />      at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)<br />      at java.lang.Runtime.loadLibrary0(Runtime.java:823)<br />      at java.lang.System.loadLibrary(System.java:1030)<br />      at org.lwjgl.Sys$1.run(Sys.java:72)<br />      at java.security.AccessController.doPrivileged(Native Method)<br />      at org.lwjgl.Sys.doLoadLibrary(Sys.java:65)<br />      at org.lwjgl.Sys.loadLibrary(Sys.java:81)<br />      at org.lwjgl.Sys.&lt;clinit&gt;(Sys.java:98)<br />      at org.lwjgl.opengl.Display.&lt;clinit&gt;(Display.java:128)<br />      at com.jme.system.lwjgl.LWJGLDisplaySystem.getValidDisplayMode(Unknown Source)<br />      at com.jme.system.lwjgl.LWJGLDisplaySystem.selectMode(Unknown Source)<br />      at com.jme.system.lwjgl.LWJGLDisplaySystem.initDisplay(Unknown Source)<br />      at com.jme.system.lwjgl.LWJGLDisplaySystem.createWindow(Unknown Source)<br />      at com.jme.app.BaseSimpleGame.initSystem(Unknown Source)<br />      at com.jme.app.BaseGame.start(Unknown Source)<br />      at pl.ags.jme.Demo.main(Demo.java:10)<br />   Jul 16, 2008 12:35:47 AM com.jme.app.BaseSimpleGame cleanup<br />   INFO: Cleaning up resources.<br />   Jul 16, 2008 12:35:47 AM com.jme.app.BaseGame start<br />   INFO: Application ending.<br />   Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.lwjgl.opengl.Display<br />      at com.jme.system.lwjgl.LWJGLDisplaySystem.close(Unknown Source)<br />      at com.jme.app.BaseGame.quit(Unknown Source)<br />      at com.jme.app.BaseSimpleGame.quit(Unknown Source)<br />      at com.jme.app.BaseGame.start(Unknown Source)<br />      at pl.ags.jme.Demo.main(Demo.java:10)<br />

Wpadliśmy, w dodatku przez te ‘nieszczęsne’ bindingi. 🙂 Na szczęście rozwiązanie problemu jest banalnie proste, wystarczy zadeklarować w parametrze java.library.path podać lokalizację bibliotek odpowiednich dla naszego systemu.

Np: Free Image Hosting at www.ImageShack.us
-Djava.library.path=c:/workspace/ganymede/jmeDemo/lib/lwjgl/native/win32

Spróbujmy jeszcze raz: coś sie włącza, (dzwięku nie ruszaliśmy, więc nie buczy), mruga – Hurra! Great success! Ale: co się dzieje, black screen?! Chociaz nie, w prawym górnym rogu jest napisane “F4 – toggle stats”. Czyli jednak działa 🙂 Czas więc najwyższy dodać cokolwiek do naszej gry, zeby nie wyglądala jak tor dla pcheł. Zrobimy sobie bardzo biedny model jakiegoś układu słonecznego. Układ składał się będzie z planety i gwiazdy.

new Sphere(“planet”, 10, 10, 10);

tworzy nową kulę o nazwie “planet” w polożeniu (10, 10, 10). Żeby nie było statycznie (nudno), planeta będzie kręcić się wokół własnej osi, a gwiazda rosnąć 🙂 Umiesćmy więc w metodzie simpleUpdate wywołania rotateSphere() i growSphere().


1
protected void simpleUpdate() {<br />   rotateSphere(planet);<br />   growSphere(star);<br />}<br /><br />private void rotateSphere(Sphere sphere) {<br />   angle = angle + (tpf * 1);<br />   if (angle &amp;gt; 360)<br />      angle = 0;<br /><br />   rotationQuat.fromAngleAxis(angle, axis);<br />   sphere.setLocalRotation(rotationQuat);<br />}<br /><br />private void growSphere(Sphere sphere) {<br />   Vector3f scale = sphere.getLocalScale();<br />   scale = scale.mult(1.0001f);<br />   sphere.setLocalScale(scale);<br />}<br />

1) www.ImageShack.us

1
demo.setConfigShowMode(AbstractGame.ConfigShowMode.AlwaysShow);


Metoda setCofnigShowMode ustala w jakich okolicznościach wyświetlone będzie okno z ustawieniami (wybiera sie rozdzielczość, głębię kolorów, tryb pełnoekranowy, renderer). My chcemy, zeby bylo widoczne za kazdym razem.

2) metoda simpleUpdate() jest wykonywana przy każdym przebiegu glównej pętli gry.
www.ImageShack.us

A tutaj cały kod naszej klasy (nie tej).


1
public class Demo extends com.jme.app.SimpleGame {<br />   private Quaternion rotationQuat = new Quaternion();<br />   private float angle = 0;<br />   private Vector3f axis = new Vector3f(1, 1, 0);<br /><br />   private Sphere planet;<br />   private Sphere star;<br /><br />   public static void main(String[] args)<br />   {<br />      Demo demo = new Demo();<br /><br />      demo.setConfigShowMode(AbstractGame.ConfigShowMode.AlwaysShow);<br />      demo.start();<br />   }<br /><br />   protected void simpleUpdate()<br />   {<br />      rotateSphere(planet);<br />      growSphere(star);<br />   }<br /><br />   private void rotateSphere(Sphere sphere)<br />   {<br />      angle = angle + (tpf * 1);<br />      if (angle &gt; 360)<br />      {<br />         angle = 0;<br />      }<br /><br />      rotationQuat.fromAngleAxis(angle, axis);<br />      sphere.setLocalRotation(rotationQuat);<br />   }<br /><br />   private void growSphere(Sphere sphere)<br />   {<br />      Vector3f scale = sphere.getLocalScale();<br />      scale = scale.mult(1.0001f);<br />      sphere.setLocalScale(scale);<br />   }<br /><br />   @Override<br />   protected void simpleInitGame()<br />   {<br />      display.setTitle(&quot;java malpa silnik&quot;);<br /><br />      planet = createEarth();<br />      star = createSun();<br />      rootNode.attachChild(star);<br />      rootNode.attachChild(planet);<br /><br />      try<br />      {<br />         MultiFormatResourceLocator loc2 = new MultiFormatResourceLocator(<br />            new File(&quot;c:/workspace/ganymede/jmeDemo/model&quot;).toURI(),<br />            &quot;.jpg&quot;, &quot;.png&quot;, &quot;.tga&quot;);<br />         ResourceLocatorTool.addResourceLocator(<br />            ResourceLocatorTool.TYPE_TEXTURE, loc2);<br />      }<br />      catch (Exception e)<br />      {<br />         e.printStackTrace();<br />      }<br /><br />      URL grass = ResourceLocatorTool.locateResource(<br />         ResourceLocatorTool.TYPE_TEXTURE, &quot;model/grass.jpg&quot;);<br />      URL sun = ResourceLocatorTool.locateResource(<br />         ResourceLocatorTool.TYPE_TEXTURE, &quot;model/sun.jpg&quot;);<br /><br />      TextureState grassTexture = loadTexture(grass);<br />      TextureState sunTexture = loadTexture(sun);<br /><br />      planet.setRenderState(grassTexture);<br />      star.setRenderState(sunTexture);<br />   }<br /><br />   private Sphere createEarth()<br />   {<br />      Sphere s = new Sphere(&quot;Earth&quot;, 5, 10, 15);<br />      s.setLocalTranslation(new Vector3f(0, 0, -40));<br />      s.setModelBound(new BoundingSphere());<br />      s.updateModelBound();<br /><br />      return s;<br />   }<br /><br />   private Sphere createSun()<br />   {<br />      Sphere s = new Sphere(&quot;Sun&quot;, 100, 100, 100);<br />      s.setLocalTranslation(new Vector3f(0, 0, -500));<br />      s.setModelBound(new BoundingSphere());<br />      s.setLocalScale(2);<br />      s.updateModelBound();<br /><br />      return s;<br />   }<br /><br />   private TextureState loadTexture(URL u)<br />   {<br />      TextureState ts = display.getRenderer().createTextureState();<br />      ts.setEnabled(true);<br />      ts.setTexture(TextureManager.loadTexture(u,<br />                                               Texture.MinificationFilter.BilinearNearestMipMap,<br />                                               Texture.MagnificationFilter.Bilinear));<br />      return ts;<br />   }<br />}<br />