CA Blogs - Polish

W przygotowywaniu się do certyfikatu SCJP jestem już na etapie serializacji, więc dzisiejszy kawałek kodu będzie o serializowaniu obiektów:

01. import java.io.*;
02. class Main {
03.    public static void main(String[] args) {
04.        Dog d1 = new Dog(10, "Irasiad");
05.        Dog d2 = new Dog(20, "Ira");
06.        try {
07.            FileOutputStream fs = new FileOutputStream("irasiad.scjp");
08.            ObjectOutputStream os = new ObjectOutputStream(fs);
09.            os.writeObject(d1);
10.            os.close();
11.        } catch (Exception e) {
12.            e.printStackTrace();
13.        }
14.        try {
15.            FileInputStream fis = new FileInputStream("irasiad.scjp");
16.            ObjectInputStream ois = new ObjectInputStream(fis);
17.            d2 = (Dog) ois.readObject();
18.            ois.close();
19.        } catch (Exception e) {
20.        }
21.        System.out.println(d2.name + " " + d2.weight + " " + d2.mammal);
22.    }
23. }
24. class Dog extends Animal implements Serializable {
25.    String name;
26.
27.    Dog(int w, String n) {
28.        super(true);
29.        weight = w;
30.        name = n;
31.    }
32. }
33. class Animal {
34.    int weight = 42;
35.    boolean mammal;
36.
37.    Animal(boolean mammal) {
38.        this.weight = 100;
39.        this.mammal = mammal;
40.    }
41. }

No i pytanie: co się wyświetli na ekranie?

A. Irasiad 10 true
B.
Ira 20 true
C.
Irasiad 42 true
D. Irasiad 42 false
E. Irasiad 100 true

Prawidłowa odpowiedź to B. A dlaczego nie Irasiad? Otóż Dog dziedziczy po Animal, a klasa Animal nie implementuje interfejsu Serializable. Co to oznacza? Oznacza to, że pola należące do klasy Dog są serializowane, a do Animal już nie. Przy deserializacji wywoływany jest bezargumentowy kontruktor klasy rodzica, więc gdyby klasa Animal miała bezargumentowy konstruktor, zostałby on wywołany i pola klasy Animal zostałyby zainicjowane przez konstruktor lub pozostawione z wartościami domyślnymi. Klasa Animal nie ma jednak bezargumentowego konstruktora (nie tworzy się on domyślnie, bo stworzyliśmy własny konstruktor), stąd przy deserializacji zostanie rzucony wyjątek. Gdyby linię 20. zastąpić takim fragmentem kodu:

20.            e.printStackTrace();}

na ekranie wyświetliłoby się mniej więcej coś takiego:

 java.io.InvalidClassException: Dog; Dog; no valid constructor
    at java.io.ObjectStreamClass.checkDeserialize(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at Main.main(Main.java:18)
Caused by: java.io.InvalidClassException: Dog; no valid constructor
    at java.io.ObjectStreamClass.<init>(Unknown Source)
    at java.io.ObjectStreamClass.lookup(Unknown Source)
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at Main.main(Main.java:10)
Ira 20 true

Stąd zserializowany obiekt d1 nie zostaje zdeserializowany, więc referencja d2 ciągle wskazuje na psa o imieniu Ira :]

A co by było, gdybyśmy linię 36 zastąpili takim fragmentem kodu:

36.     Animal(){}

Wtedy prawidłową odpowiedzią byłaby

D. Irasiad 42 false

Pola Irasiada z klasy Dog zostałyby zserializowane, a przy deserializacji pola z klasy Animal przyjęłyby wartość domyślną.

Tym razem coś z pozoru prostego (zresztą jak zawsze :P)

01. public class Main {
02.    public static void main(String[] args) {
03.        double k = Math.sqrt(-1);
04.        if (k == Double.NaN)
05.            System.out.print(k);
06.        System.out.print(k);
07.    }
08. }

No i pytanie, jaki będzie efekt skompilowania i uruchomienia tego kawałka kodu? - tylko jedna odpowiedź jest poprawna.

A. Zostanie rzucony wyjątek ArithmeticException w linii 3
B.
Zostanie rzucony wyjątek IllegalArgumentException w linii 3
C.
Na ekranie pojawi się NaNNaN
D.
Na ekranie pojawi się NaN
E. Kod się nie skompiluje

Prawidłowa odpowiedź to oczywiście D. Funkcja Math.sqrt dla ujemnego argumentu zwraca wartość NaN (Not a Number). Dlaczego więc w linii 4 wyrażeniek k == Double.NaN ma wartość false? Okazuje się, że porównanie ze sobą 2 wartości NaN zwróci wartość false. Dlatego też warunek z linii 4 nie zostanie spełniony i linia 5 się nie wykona. Aby sprawdzić, czy k ma wartość NaN, należy użyć funkcji Double.isNaN(k). Dlaczego tak jest? Otóż nie chodzi tu o specyfikację języka Java, tylko o specyfikację standardu EEE 754, którego to używa Java.Więc w C# także porównanie dwóch NaN zwróci false. Zainteresowanych odsyłam do wikipedii http://en.wikipedia.org/wiki/NaN

Co ciekawe, gdyby zamienić linie 4 powyższego kodu na:

if (((Double)Double.NaN).equals(k))

Na ekranie wyświetliłaby się wartość NaNNaN, czyli operacja equals na dwóch doublach NaN zrzutowanych na obiekty typu Double zwróci wartość true.

Tym razem na tapetę wziąłem instrukcję switch-case:

01. public class Main {
02.    private static String s;
03.    public static void main(String[] args) {
04.        function(7);
05.        function(5);
06.        System.out.println(s);
07.    }
08.    public static void function(int x) {
09.        switch (x) {
10.        case 1:
11.            s += 1;
12.        case 2:
13.            s += 2;
14.        case 3:
15.            s += 3;
16.        default:
17.            s += 999;
18.        case 4:
19.            s += 4;
20.        case 5:
21.            s += 5;
22.        case 6:
23.            s += 6;
24.        }
25.    }
26. }

No i pytanie, jaki będzie efekt skompilowania i uruchomienia tego kawałka kodu? - tym razem tylko jedna odpowiedź jest poprawna.

A. Błąd kompilacji
B. 9995
C. 999999
D. 999456999456
E. null999456999456
F. 99945656
G. null99945656
H. Runtime Exception


Prawidłowa odpowiedź to G. Pole s nie zostało zainicjowane, stąd jego wartość początkowa to null, która przy konkatenacji jest przekszałcana na Stringa o wartości "null". Po pierwszym uruchomieniu funkcji do początkowego Stringa doklejane jest 999456 -  int x = 7 jest dopasowany do wartości default, gdyż nie pasuje do żadnych pozostałych wartości przy instrukcjach case. Ponieważ nie użyto instrukcji break, zostaną wywołane także instrukcje dla x = 4, 5 oraz 6. Następne uruchomienie funkcji spowoduje doklejenie wartości 56, gdyż x = 5 zostaje dopasowany do instrukcji case z wartością 5. Wart uwagi jest fakt, iż mimo, że instrukcja default znajduje się wcześniej niż instrukcja case 5, to właśnie instrukcja case 5 jest dopasowana - instrukcja default zostanie dopasowana tylko wtedy, gdy żaden inny case nie pasuje, bez względu na to, jak jest kolejność instrukcji case i default w danej instrukcji switch.

No to zaczynamy. Na początek coś łatwego:

01. public class Main implements Inter{
02.    public static void main(String[] args){
03.        int a = 3;
04.        final double d = (a>5) ? new Double(13):new Integer(7);
05.        System.out.println(new Main().method(d));
06.    }
07.    public static double method(Double fin){
08.        fin = new Double(1);
09.        return fin;
10.    }
11.    public double method(double ... x){   
12.        return x[0];
13.  }
14. }
14. interface Inter{
15.    public void method(Double d);
16. }


No i pytanie, jaki będzie efekt skompilowania i uruchomienia tego kawałka kodu? - wybierz wszystkie odpowiedzi, które są twoim zdaniem poprawne.


A. Błąd kompilacji w linii 4
B. Runtime Exception w linii 4
C. Błąd kompilacji w linii 7
D. Błąd kompilacji w linii 8
E. Runtime Exception w linii 8
F. Na ekranie wyświetli się 1.0
G. Na ekranie wyświetli się 7.0


Prawidłowa odpowiedź to C. Kompilator wyświetli błąd o treści zbliżonej do: "This static method cannot hide the instance method from Inter". Innymi słowy metoda z interfejsu, którego używamy nie może być statyczna.

Co do niepoprawności pozostałych odpowiedzi:

A. B. final double d = (a>5) ? new Double(13):new Integer(7); jest prawidłową instrukcją. Zmienną final można zainicjować tylko raz, co właśnie robimy, korzystając przy okazji z auto-boxingu dostępnego od javy 5.

D. E. referencja fin nie jest typu final, jest kopiąreferencji typu final, a więc możemy ją przypisać do innego obiektu - błędu kompilacji nie będzie

F. Gdyby metoda method nie była statyczna, na ekranie wyświetliłoby się 1.0

G. Nawet gdyby metoda method nie była statyczna, na ekranie nie wyświetliłoby się 7.0 - wywołując funkcję z parametrem typu double funkcja przyjmująca parametr Double zostanie uruchomiona przed funkcją z parametrem double ...

W tym dziale znajdziecie posty z javovymi "łamigłówkami" które zaprzątały mi głowę podczas przygotowanie do certyfikatu SCJP. Nazwa działu - "Sticky Code, Juicy Prediction" odnosi się do tego, jak podchwytliwy może być kod i jak trudno go przewidzieć.

Ostatnio na Politechnice Śląskiej wzrosło zainteresowanie NetBeans IDE i NetBeans Platform. 28 lutego na wydziale Automatyki Elektroniki i Informatyki odbyło się szkolenie z NetBeans Platform. Zainteresowanie było olbrzymie. Wzięło w nim udział około 40 studentów. Odbywają się również inne wydarzenia związane z NetBeans.

Szkolenie prowadzili Geertjan Wielenga oraz Karol Harezlak z Sun Microsystems. Szkolenie trwało dwa dni. Uczestnicy poznali za równo architekturę NetBeans Platform, najważnieszje elementy API jak i wzięli udział w elementach praktycznych (przykładowe aplikacje). Uczestnicy otrzymali certyfikaty NetBeans Certified Associate. Pod koniec drugiego dnia Karol bardzo ciekawie opowiedział o tym jak wygląda jego praca przy rozwoju NetBeans IDE. Nie wszyscy chętni zmieścili się w limitowanej liczbie miejsc na szkoleniu dlatego też planujemy powtórzyć to zakończone sukcesem wydarzenie.

 

 (zdjęcie z bloga Geertjana)

 

(zdjęcie z bloga Marka

 

 (zdjęcie z bloga Geertjana)

 

(zdjęcie z bloga Marka 

 Dla studentów mniej zaznajomionych z NetBeans IDE zademonstrowałem jak to IDE może ułatwić życie studenta. Stało się jasne, że jest to nie tylko narzędzie dla doświadczonych programistów ale także umożliwi w prosty i szybki sposób wyklikać aplikację zaliczeniową przez niedoświadczonego studenta. Pokażę jak wykonać prostą aplikację CRUD (create, read, update and delete) pisząc jak namniej kodu. Pokazałem także cechy edytora kodu oraz krótki przykład użycia Visual JSF.

 

 

 Należy nadmienić, że na naszej uczelni coraz wiecej pracowni jest wyposażonych w komputery z najnowszym NetBeans IDE tak więc jego znajomość przyda się nie tylko po skończeniu studiów :)

W maju odbędzie się kolejne wydarzenie związane z NetBeans. Tym, którzy nie zdołali się załapać na szkolenie oraz chcą dowiedzieć się więcej o NetBeans Platform przedstawię jej możliwości. 

 

Pierwsze w tym semestrze spotkanie PWr Java USer Group będzie poświęcone JAVIE FX. Ponadto na spotkaniu zostaną omówione sprawy organizacyjne grupy, a dla każdego uczestnika grupy zarejestrowanego na portalu OSUM, który potwierdzi swoje przyjście, przewidziany jest drobny upominek od firmy Sun Microsystems.

JAVA FX

Rejestracja na stronie: http://osum.sun.com/events/event/show?id=2181626:Event:648353

Informacje o działalności grup PWr Java User Group i PWr Open Solaris User Group wraz z terminami spotkań i prezentacjami są umieszczone na portalu OSUM pod adresem http://osum.sun.com/group/pwrosum

Ponadto tematy i terminy spotkań będą dostępne na http://blogs.sun.com/mateusz_herbut/category/Wydarzenia (jednak rejestracja na spotkania będzie się odbywała wyłącznie poprzez portal OSUM)

Portal wymaga logowania, dlatego nowi użytkownicy muszą się zarejestrować.

Rejestracja na portalu OSUM nie jest aż tak bardzo skomplikowana, ale większość nowych członków zapomina o paru ważnych krokach (które wyróżniłem pogrubioną czcionką)

Na stronie wybieramy język w jakim chcemy korzystać z portalu (najlepiej Polski) i klikamy na "Zarejestruj się"

zarejestruj

Na wyświetlonej stronie podajemy swoje dane i wybieramy "Zapisz się"

Następnie wpisujemy kolejne dane wraz z nazwą uczelni (Wrocław University of Technology) i klikamy na "Przyłącz się"

nazwa uczelni

Jesteśmy zarejestrowanie na portalu OSUM. Jednak to jeszcze nie wszystko.

Ważnym krokiem jest przyłączenie się do Wrocław University of Technology OSUM po to, aby dostawać powiadomienia o zbliżających się spotkaniach. W tym celu należy wejść na stronę http://osum.sun.com/group/pwrosum i wybrać opcję "Przyłącz się do Wrocław University of Technology OSUM"

Przyłącz się

Aby zobaczyć kalendarz spotkań, należy wybrać opcję "Zdarzenia". Aby pokazywane były tylko zdarzenia z PWr, wybieramy na górze filtr Poland, Wrocław University of Technology.

Filtr

Aby potwierdzić swój udział w zdarzeniu, należy wybrać zdarzenie i kliknąć na "Weźmie udział".

Potwierdzenie

Potwierdzenie udziału ułatwi organizatorom przygotowanie odpowiedniej ilości materiałów promocyjnych rozdawanych na spotkaniu, dlatego jeśli planujesz wziąć udział w spotkaniu, potwierdź to na portalu OSUM!



 

 Instalacja OpenSolarisa jest bardzo łatwa i można zaryzykować, że przebiega bardziej bezboleśnie niż na przykład instalacja Windows. Po zainstalowaniu systemu mamy komplet potrzebnych aplikacji gotowych do użytku (w tym NetBeans i Firefox). Niemniej jednak dla kogoś kto ma popularną w polsce klawiaturę 'polski programisty' jest pewne utrudnienie. Domyślnie wybierając język polski ustawia się layout klawiatury 'polski' co skutkuje poprzestawianymi klawiszami. Wybieranie ustawień z  Launch Menu -> System -> Preferences -> Input Methods nic nie daje. Jest to znany błąd: http://defect.opensolaris.org/bz/show_bug.cgi?id=4338

Problem rozwiązuje dopiero wpisanie na konsoli:

$/usr/X11/bin/setxkbmap pl_dev

Dodatkowo to ustawienie czasem 'gubi się'. Najlepszym miejscem, żeby je zachować dla graficznego interfejsu jest xorg.conf Jeśli mamy środowisko graficznie skonfigurowane automatycznie można stworzyć plik konfiguracyjny na podstawie takiej konfiguracji. 

dniach 28.02 - 01.03 na wydziale Wydział Automatyki, Elektroniki i Informatyki Politechniki Śląskiej (sala 622) odbędzie się szkolenie z  NetBeans Platform. Prowadzącymi będą Geertjan Wielenga i Karol Harezlak z Sun Microsystems. 

Na szkolenie obowiązują zapisy. Okazało się, że zwolniło się parę miejsc w ostatniej chwili. Jeśli ktoś jest chętny czekam na maila: Zacheusz.Siedlecki[]sun.com

Uczestnicy szkolenia dostaną certyfikaty z firmy Sun, niemniej jednak jeśli się chce wykorzystać wolne miejsca i mieć certyfikat trzeba się śpieszyć z załatwieniem tego. 

Plan szkolenia:
    • 10:00 - 10:45: Introduction to the Course
    • 11:00 - 11:45: Getting Started with the NetBeans Platform
    • 12:00 - 13:00: Workshop
    • 13:00 - 14:00: Lunch
    • 14:00 - 14:45: Dependency and Injection in Modular Systems
    • 15:00 - 15:45: Workshop
    • 16:00 - 16:45: System FileSystem
    • 17:00 - 17:45: Nodes & Explorer Views

    • 10:00 - 10:45: Component Palette
    • 11:00 - 12:00 Workshop
    • 12:00 - 12:45: Window System
    • 13:00 - 14:00: Lunch 
    • 14:00 - 14:45: Visual Library
    • 15:00 - 15.45: Workshop
    • 16:00 - 16.45: Fixing Issues in NetBeans 
    • 17:00 - 17.45: Ideas for Modules

 

Studenci mogą uzyskiwać certyfikaty Suna po znacznie niższej cenie. Umożliwia to SAI (Sun Academic Initiative). Dzisiaj została wprowadzona zmiana w sposobie wykupywania egzaminu. Można od razu wykupić wstęp na egzamin po niższej cenie zamiast (jak to było wcześniej) drukować kupon zniżkowy. Egzamin kosztuje około 250 zł. zamiast ponad 800 zł. i można za niego zapłacić przez paypal lub kartą kredytową. Zdawać można w dowolnym certyfikowanym centrum egzaminacyjnym. Dostępne egzaminy to:

    * Sun Certified Java Associate (SCJA)
    * Sun Certified Java Programmer (SCJP)
    * Sun Certified System Administrator (SCSA)
    * Sun Certified Network Administrator (SCNA)
    * Sun Certified Web Component Developer (SCWCD)
    * Sun Certified Solaris Associate (SCSAS)

Więcej informacji na: http://osum.sun.com/group/polsl 

W poniedziałek, w biurze Koła Naukowego Informatyków odbyło się pierwsze spotkanie organizacyjne OSUM na politechnice śląskiej. Przedstawiłem możliwości udostępnione przez SAI. Ustaliliśmy także kwestie organizacyjne związane z naszymi spotkaniami przygotowawczymi do SCJP. Przyszło 15 osób mających zamiar uczestniczyć w przygotowaniach do egzaminu. Wszyscy otrzymali instrukcje wraz z poufnym kodem umożliwiającym dostęp do darmowych kursów i zniżek na certyfikaty suna. Zostały rozdane także gadżety w postaci długopisów i bransoletek. Za tydzień pierwsza część przygotowania do egzaminu. Jak dobrze pójdzie to wkrótce znacznie poszerzymy grono certyfikowanych przez Sun programistów :) 

 

Od 16 lutego w siedzibie Koła Naukowego Informtyków przy Wydziale Automatyki Elektroniki i Informatyki Politechniki Śląskiej w każdy poniedziałek o godzinie 18:30 będą odbywały się spotkania przygotowujące do egzaminu na SCJP (Sun Certified Java Programmer).

Jest to bardzo przydatny certyfikat. Szacuje się, że programiści go posiadający zarabiają średnio 8% więcej. Poza tym otwiera drogę do kolejnych certyfikatów javowych z Suna. 

Spotkania będą odbywać się na takiej zasadzie, że każda osoba w nich uczestnicząca będzie przygotowywać inny temat (szukać testów, kruczków itp. a następnie przedstawiać go reszcie). Spotkania będą co tydzień. Jak dobrze pójdzie to może parę osób wyciągnie ponad 90% ;)

Tak więc podsumowując:
Termin spotkań: poniedziałki, 18:30 (od 16 lutego)
Miejsce spotkań: siedziba Koła Naukowego Informatyków 

Dokładny adres oraz zapisy na spotkania na forum OSUM dla Politechniki Śląskiej.

To mój pierwszy wpis na tym blogu. Zostałem niedawno zatrudniony przez firmę Sun Microsystems i stąd mam możliwość prowadzenia bloga w tej domenie. Będę się na nim dzielił moimi spostrzeżeniami, informacjami, przemyśleniami i różnymi innymi rzeczami, które mi przyjdą do głowy a będą związane z technologiami firmy Sun.

I tu dochodzę do drugiej rzeczy o ktorej chciałbym napisać w tym poście. Dlaczego taki tytuł ? Jestem fascynatem języka Java. Wielu programistów tego jezyka zna na pamięć pierwsze bajty każdej klasy Javy. Są to: 0xCafeBabe :) 

WitamKolejny rok mam okazje przybliżać państwu technologie firmy Sun Microsystems jako Sun Campus Ambasador na AGH.W tym roku centrum aktywności...

Od Solaris Nevada build 93 będzie dostępny nowy dostawca w DTrace. Jeden dostawca, a rozwiąze wiele problemów  :)

olimp:~% sudo dtrace -l -n ip:::
   ID   PROVIDER MODULE                 FUNCTION NAME
 1349         ip     ip         ip_wput_local_v6 receive
 1350         ip     ip               ip_rput_v6 receive
 1351         ip     ip            ip_wput_local receive
 1352         ip     ip                 ip_input receive
 1367         ip     ip           ip_inject_impl send
 1368         ip     ip                 udp_xmit send
 1369         ip     ip         tcp_lsosend_data send
 1370         ip     ip            tcp_multisend send
 1371         ip     ip            tcp_send_data send
 1372         ip     ip    ip_multicast_loopback send
 1373         ip     ip               ip_xmit_v6 send
 1374         ip     ip           ip_wput_ire_v6 send
 1375         ip     ip               ip_xmit_v4 send
 1376         ip     ip        ip_wput_ipsec_out send
 1377         ip     ip     ip_wput_ipsec_out_v6 send
 1378         ip     ip             ip_wput_frag send
 1379         ip     ip         ip_wput_frag_mdt send
 1380         ip     ip              ip_wput_ire send
 1381         ip     ip          ip_fast_forward send

Kiedyś aby uzyskać jakiekolwiek informacje związane z siecią  trzeba było korzystać z niestabilnego interfejsu dostawcy fbt. Skrypty pisane w ten sposb rozrastały sie do przerazliwych wielkosci oraz pojawiało się ryzyko, że nasz kod nie bedzie działał w kolejnych wydaniach Solaris.

Dokładny opis możliwości nowego dostawy jest tu. Jednoczesnie czekamy na innych obiecanych dostawców związanych z siecią.

Dzisiaj odbyła sie konferencja SolarisDay na Politechnice Warszawskiej. Wyklady poprowadzili zaproszeni goście z Technology Evangelist oraz lokalni prelegenci.

Zapraszam na ostatnią w tym roku akademickim prezentacje na temat technologi firmy Sun.Przedstawię bardzo ciekawy i innowacyjny...
Zapraszam na kolejny wykład poświęcony technologiom firmy Sun. Chciałbym zaprezentować nowy i bardzo ciekawy system operacyjny - Open Solaris.
Indiana ukazała się w finalnej wersji jako OpenSolaris 2008.05. Można ją pobrać tu. Jednoczeście wersja Solaris Express Developer Edition zastąpiona została przez nowe wcielenie opensolarisa.
Zapraszam to udziału w konkursie organizowanym przez Sun Microsystems: Sun Young Engineers Competition.Konkurs polega na opracowaniu innowacyjnej metody wykorzystania mikrokomputera...

Podczas TechTalk'a zaprezentowałem nowość jaką jest Sun SPOT. Przyjemność była tym wieksza, że był to jeden z niewielu Sun SPOT'ów w Polsce. Technologia ta ma duży potencjał, a czas pokaże gdzie będzie można go spotkać.

Slajdy oraz dema można zobaczyć poniżej.
Krótki opis można przeczytać tutaj.

W czasie prezentacji pokazałem następujące dema
  • AirText
  • Ectoplasmic bouncing ball
  • Neverball
Inne filmy poświęcone SUN Spot'owi:
Wirtualizacja jest w dzisiejszych czasach kluczem do rozwiązania wielu problemów. Podstawowe zaletą jest konsolidacja. Mozemy wiele maszyn zastąpic jedna z zachowaniem pełnego bezpieczeństwa. Właśnie wirtualizacji poświęcony był jeden TechTalk'a. Ta prezentacja zawiera demo, które pozwoli Ci skonfigurować samemu zone Solaris'ową. Jest ona dostępna tutaj.
Zapraszam na kolejny wykład poświęcony technologiom firmy Sun. Postaram sie na nim zaprezentować technologie JavaFX...
SunTM Small Programmable Object Technology (Sun SPOT) jest to male urzadzenie programowane w Java. Wirtualna maszyna - Squawk VM - jest bezposrenio uruchomiona na urzadzeniu. Takie podejscie pozwala na zaoszczedzenie zasobow systemowych dzieki czemu wiecej mocy zostaje dla naszych aplikacji :)

Jest to urzadzenie szerokiego zastosowania. Ilosc zastosowan jest tylko ograniczona pomyslowoscia projektanta :)

SUN Spot sklada sie z 3 czesci:

    * plyty procesorowej
    * plyty demo
    * baterii

W zestawie dostajemy 2 SUN Spot’ty + stacje bazowa. Stacja bazowa nie jest niczym innym jak plyta procesorowa. Po dodaniu czujnikow stanie sie ona pelni wartosciowym SUN Spot’em.

Plyta procesorowa

    * 180 MHz 32 bit ARM920T z 512 K RAM RAM i 4M Flash.
    * wsparcie dla sieci bezprzewodowej - 2.4 GHz IEEE 802.15.4
    * interface USB
    * 32 uA pobiera w stanie uspienia

Plyta demo

    * czujnik swiatla
    * czujnik temperatury
    * zyroskop
    * 8 trojkolorowych LED’ow
    * wejscia / wyjscia
    * ADC
    * 2 przyciski