Galileo blogs

June 16, 2009

Wojciech Smolak

Procesja BC 2009 w Tatrach Zachodnich

Opis wypawy z Włodkiem Kozłowskim w ramach Procesji Bożego Ciała (10 – 14 czerwca 2009) Więcej na http://www.wedrownicy.org/blog/?p=7

by admin at June 16, 2009 04:16 PM

May 16, 2009

Łukasz Stachowiak

Proste skalowanie aplikacji z Terracotta na Poznań Java User Group - 26.05.09r.

Zapraszam wszystkich na spotkanie Poznańskiej Grupy Użytkowników Javy poświęconemu oprogramowaniu wspomagającym skalowanie aplikacji w poziomie (ang. scaling out) o nazwie Terracotta. Prelegentem będzie Krzysztof Kliś programista w firmie BS Partner.

Oto krótkie streszczenie tego co będzie można usłyszeć na miejscu:
Terracotta jest oprogramowaniem open source, które pozwala na proste skalowanie w poziomie aplikacji działających na platformie Java, bez konieczności wykorzystywania dodatkowego kodu lub zewnętrznych baz danych. Efekt taki udało się uzyskać dzięki umieszczeniu całego mechanizmu klastrowania pomiędzy maszyną wirtualną Javy a warstwą aplikacji, dzięki czemu jest ona w praktyce całkowicie przezroczysta dla programisty. W trakcie prezentacji omówiona zostanie architektura Terracotty, przedstawione przykłady jej zastosowań (wraz z utworzeniem prostego projektu w Eclipse), a także współpraca z innymi technologiami opartymi na Javie (na przykładzie JRuby). Poruszone zagadnienia obejmą ponadto doświadczenia autora w pracy z Terracottą w kontekście wydajności, zagadnienia związane z licencją Terracotta Public License, jak również informacje na temat społeczności związanej z Terracottą.

Dodam jeszcze filmik z youtube mówiący co to jest Terracotta:


Miejsce i data spotkania:
Siedziba Cognifide - Aleje Wielkopolskie 4, Poznań
Wtorek 26.05.2009, godzina 18:00
Wymagana jest rejestracja pod adresem: www.oiola.com/e/382-spotkanie-poznan-jug-260509-terracota-krzysztof-klis/

Linki:
Web λ.0 - Functional programming for the Web - blog Krzysztofa Klisia

by lukas.stachowiak@gmail.com (WooKasZ) at May 16, 2009 01:06 PM

May 09, 2009

Łukasz Stachowiak

Podstawowe komponenty w LWUIT #part 1/2

Skoro pierwsze spotkanie z biblioteką LightWeightUserInterfaceToolkit mamy już za sobą, chciałbym dziś przybliżyć podstawowe komponenty jakimi możemy się posługiwać aby wzbogacić UI naszej aplikacji mobilnej.

Hierarchia klas w LWUIT:


Component
To klasa bazowa dla wszystkich komponentów, tylko klasy które dziedziczą po niej mogą być wyświetlane na ekranie. W ogólności nie będziemy z niej korzystać chyba, że zaczniemy pisać własne komponenty to wtedy możemy się nią zainteresować;-)

Container
Kontener to obiekt który umożliwia przechowywanie w sobie wielu innych komponentów. W tym innych kontenerów które zawierają inne komponenty, możliwość zagnieżdżania jest praktycznie nieograniczona.
Komponenty które dodajemy do kontenera trafiają na listę wg której są później wyświetlane na ekranie, jeśli nie podamy indeksu na który ma on trafić to jest domyślnie umieszczany na ostatnim miejscu.

Form
Formularz jest klasą reprezentującą okna w programie. Składa się on z 3 części: paska tytułowego, zawartości okna oraz paska menu. Jak to wygląda przedstawia obrazek obok.
Jeśli chodzi o pasek tytułowy to wg mnie jest on trochę ograniczony ponieważ możemy na niego wrzucać tylko tekst, no ale gdyby było inaczej to może inaczej też by się nazywał ;P Zawartość okna to nasze pole gdzie wrzucamy jakiekolwiek komponenty potrzebujemy. Możemy je rozmieszczać za pomocą różnych układów (layouts) ale o nich znacznie więcej w innej części tutoriala.
Pasek menu zawiera pozycje pomocne przy sterowaniu aplikacją, jeśli jest ich więcej niż dwie to będzie nam się wyświetlać menu wyboru. Przycisku na tym pasku tworzy się poprzez dodanie do obiektu formularza obiektów typu Command.
Form udostępnia nam dwa konstruktory. Jeden jest bez bezparametrowy, a drugi posiada parametr typu String który jest tekstem na pasku tytułowym. Formularz wyświetlamy za pomocą metody Form.show();.
API tej klasy jest dość bogate i jego znajomość jest podstawą z którą trzeba się zapoznać.

Label
Label to po prostu komponent który wyświetla tekst i/lub obrazek. Należy pamiętać by używać go tylko w tym wypadku! Gdyby istniała potrzeba jakieś interaktywności to lepszym wyborem byłoby skorzystanie z klasy Button.
Dla zawartości etykiety możemy definiować wyrównania - domyślnym jest LEFT, ale poza nim jest jeszcze CENTER i RIGHT. Ponadto jeśli dodany jest zarówno tekst jak i obrazek to możemy wyrównać tekst względem obrazka mamy do dyspozycji pozycje: TOP, BOTTOM, LEFT, RIGHT. A wykonujemy to za pomocą metody: setTextPosition(Label.TOP);.
Może mały przykład:
Form form = new Form("Label in action!");
// utworzenie obrazka
Image image = Image.createImage("/picture.png");

Label label = new Label(image);
label.setText("Hello Label !!");
label.setAlignment(Label.CENTER);
label.setTextPosition(Label.BOTTOM);

// dodanie labela do formularza
form.addComponent(label);
// wyświetlenie
form.show();
Button
Przyciski wywołują dla nas jakieś akcje. Podobnie jak Label może składać się z ikony i teksty (przecież jest to klasa rozszerzająca Label^^). Do przycisku możemy podpiąć dwa rodzaje "słuchaczy" (nie lubię tej nazwy, zna ktoś może jakąś lepsza polską ?;), na aktywowanie (FocusListener) oraz akcje (ActionListener). Ponieważ drugi przypadek jest częstszy w użyciu to posłużę się nim jako przykładem. Może od razu podam przykład który wyjaśni działanie tego mechanizmu:
Button coolButton = new Button("Great button!");
coolButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {
// instrukcje w tej metodzie zostaną wywołane po wciśnięciu przycisku
}
});
Można też utworzyć osobne klasy implementujące ten interfejs i podać je jako parametr. Zależy jakie kto rozwiązanie lubi i jak długa jest metoda obsługi zdarzenia.

RadioButton
To element dobrze nam znany chociażby z HTMLa. Jest to element który może posiadać dwa stany wybrany oraz nie wybrany. Stan taki może posiadać tylko jeden radio button w obrębie grupy o której za chwilę. Jeśli chodzi o zasady tworzenia oraz przypisywania obsługi zdarzeń to są one identyczne jak w przypadku przycisku.

ButtonGroup
Ta użyteczna klasa w sumie nie powinna zostać nazwana komponentem a bardziej takim zarządcą grupy komponentów. Jej funkcją jest grupowanie jakiegoś zbioru przycisków, żeby np. przypilnować, że został zaznaczony tylko jeden RadioButton.
Przykład działania:
// tworzenie przycisków
RadioButton radio1 = new RadioButton("RadioButton1");
radio1.setSelected(true); // niech jeden będzie zaznaczony domyślnie
RadioButton radio2 = new RadioButton("RadioButton2");
RadioButton radio3 = new RadioButton("RadioButton3");
RadioButton radio4 = new RadioButton("RadioButton4");

// tworzenie grupy oraz dodawanie do niej przycisków
ButtonGroup group = new ButtonGroup();
group.add(radio1);
group.add(radio2);
group.add(radio3);
group.add(radio4);

/**
* Jakieś operacje
*/

// pobranie indeksu który przycisk jest zaznaczony
int index = group.getSelectedIndex();
// pobranie zaznaczonego przycisku
RadioButton radioSelected = group.getRadioButton(index);
Gdy mamy indeks zaznaczonego przycisku to później można sobie zrobić jakiegoś switcha i wykonać odpowiednie akcje. Należy tylko pamiętać o tym by nie zmieniać kolejności ich dodawania do grupy, bo wg tego są one indeksowane.

To koniec części pierwszej o komponentach w LWUIT. W następnym wpisie z tej serii omówię CheckBox, ComboBox, TextArea oraz TabbedPane.

Zapraszam do komentowania !

_
Źródła obrazków oraz linki:
[1] https://lwuit.dev.java.net/
[2] http://lwuit.blogspot.com/

by lukas.stachowiak@gmail.com (WooKasZ) at May 09, 2009 10:43 AM

May 03, 2009

Łukasz Stachowiak

Pierwsze spotkanie sympatyków technik Agile w Poznaniu !

Na ostatnim spotkaniu Java User Group ogłoszono, że rozpoczyna się (oprócz Javowych) seria spotkań poświęcona technikom wytwarzania oprogramowania. Spotkania oprócz wystąpień mają w założeniu mieć także formę otwartej dyskusji. Pierwsze już 6 maja (czyli już w tę środę) w miejscu dobrze znanym czyli siedzibie Cognifide, przy ulicy Al. Wielkopolska 4 - godzina 18:00.

Będzie poświęcone sposobach prowadzenia projektu - metodyce Scrum. Prowadzącym spotkanie będzie pracownik firmy OpenX Andrzej Swędrzyński.
Oprócz wystąpienia spotkanie będzie także miało charakter organizacyjny - tematyka spotkań, terminy itp.

Zapraszam wszystkich !

ps. Zapraszam jeszcze na bloga AgileTuning.pl na którym można posłuchać bardzo ciekawych podcastów na ten temat.

by lukas.stachowiak@gmail.com (WooKasZ) at May 03, 2009 09:55 AM

May 01, 2009

Łukasz Stachowiak

10 minut z biblioteką SAX - Simple API for XML

Przy okazji projektu z sieci komputerowych przyszło mi szukać biblioteki do parsowania XML, która będzie działać na wszystkich 3 platformach Java. Długo się nie zastanawiając wybrałem SAX. Miałem już dość męczenia się z jakimś kXML czy jakimś innym wytworem i wybrałem coś konkretnego. Jaki był tego koszt ? Moja aplikacja na komórkę będzie wymagać implementacji Java ME Web Service (JSR 172). No ale żałować nie będę, bo bez tego już chyba urządzeń mobilnych z Javą nie wprowadzają na rynek.

Ok, ale przejdźmy do zadania :) Trzeba parsować proste komunikaty XML o postaci:
<?xml version=”1.0” encoding=”utf-8”?>
<response value=”[odpowiedz]”>
<params>
<[klucz] value=”[wartość]”/>
<!-- inne parametry takiej postaci -->
</params>
</response>

Nie wygląda na trudne. Ale zobaczmy jak to się robi z użyciem SAX.
W pierwszej kolejności musimy utworzyć klasę handlera który będzie odpowiadać za obsługę poszczególnych elementów dokumentu XML. Klasa handlera musi dziedziczyć po klasie DefaultHandler, która umożliwia implementacje kilku bardzo przydatnych metod. Nasz handler będzie posiadać następujące:
- public void startElement(String uri, String localName, String qName, Attributes attribs) - metoda ta wywoływana jest gdy parser natrafi na znacznik otwierający
- public void endElement(String uri, String localName, String qName) - metoda ta zostanie wywołana po natrafieniu na znacznik zamykający
W tym miejscu dodam jeszcze notkę o metodzie characters chociaż jej nie będziemy używać jest dość istotna. Ma następującą sygnaturę:
- public void characters(char[] ch, int start, int lenght) - wywoływana jest gdy parser natrafi na tekst (tekstowa zawartość węzła)

A oto znaczenie poszczególnych parametrów:
uri - namespace uri
localName - lokalna nazwa znacznika (bez prefiksu)
qName - nazwa kwalifikowana znacznika (z prefiksem)
attribs - obiekt typu Attributes zawierający atrybuty danego znacznika
ch - tablica znaków
start - pozycja startowa w tablicy znaków
lenght - liczba znaków
To są absolutnie podstawowe metody które należy znać. Po więcej zapraszam do dokumentacji DeafultHadler.

Ok, to możemy przystąpić do implementacji klasy.
package com.blogspot.wookasz.saxexample;

import java.util.HashMap;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

class SAXMessageHandler extends DefaultHandler {
// flaga oznaczająca czy teraz wczytywane będą parametry
private boolean paramMode = false;
// parametry
private HashMap<String, String> params;
// wartość odpowiedzi w komunikacie
private String response;

public SAXMessageHandler() {
super();
this.params = new HashMap<String, String>();
}

@Override
public void startElement(String uri, String localName, String qName,
Attributes attribs) throws SAXException {
// jeśli natrafiono na węzeł z odpowiedzią
if (qName.equals("response") && !paramMode) {
response = attribs.getValue("value");
return;
}
// jeśli natrafiono na węzęł rozpoczynający parametry
if (qName.equals("params")) {
paramMode = true; // ustawiamy flagę że teraz będą parametry
return;
}

// jeśli ustawiona jest flaga parametrów
if (paramMode) {
// dodajemy parametr z wartością do mapy
params.put(qName, attribs.getValue("value"));
return;
}
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// jeśli włączyony był tryb parametrów
// i nastrafiono na zamykający go znacznik
// to zmieniamy flegę
if (qName.equals("params")) {
paramMode = false;
}
}

public HashMap<String, String> getParams() {
return params;
}

public String getResponse() {
return response;
}
}

Komentarze w kodzie myślę wyjaśniają całkowicie działanie ;) Jakby co komentować!
Teraz czas na utworzenie parsera i zarejestrowanie handlera:)
To już tylko kilka linijek:
// utworzenie fabryki SAX
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
// utworzenie parsera
SAXParser parser = saxFactory.newSAXParser();
// utworzenie obiektu czytającego wiadomości XML
XMLReader reader = parser.getXMLReader();

// utworzenie naszego handlera
MessageSAXHandler xmlHandler = new SAXMessageHandler();
// oraz ustawienie go jako domyślnego dla obiektu czytającego
reader.setContentHandler(xmlHandler);

Teraz możemy poprzez metodę reader.parse(InputStram input) parsować wiadomości które do nas przychodzą. Należy zwrócić uwagę na to, że parametrem jest obiekt typu InputSource (dostępna jest jeszcze implementacja tej metody przyjmująca String - URI)! Jeśli mamy już całą wiadomość w pamięci to możemy to obejść w prosty sposób:
String xmlMsg = "[wiadomosc]";
InputStream streamXml = new ByteArrayInputStream(xmlMsg.getBytes()); // utworzenie strumienia bajtów z wiadomości
reader.parse(new InputSource(streamXml)); // parsowanie

Powinno działać :)

Jeszcze dodam uwagę co do implementacji tej biblioteki na platformie Java ME. JSR-172 trochę obcięło API i nie możemy utworzyć obiektu typu XMLReader. Na tej platformie parsowanie wygląda następująco:
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
SAXParser parser = saxFactory.newSAXParser();

SAXMessageHandler xmlHandler = new SAXMessageHandler();

parser.parse(new InputSource(streamXml), xmlHandler);

Oraz w klasie SAXMessageHandler należy zmienić typ zmiennej params na Hashmap.
To rozwiązanie powinno także działać w Java SE oraz Java EE ;-)

Mam nadzieję, że ten krótki tutorial komuś pomoże rozpocząć pracę z biblioteką SAX. Po więcej informacji zapraszam na stronę www.saxproject.org.

by lukas.stachowiak@gmail.com (WooKasZ) at May 01, 2009 09:29 AM

April 19, 2009

Wojciech Smolak

Wyprawa Gorce 2009

dzień 1 (11 kwietnia 2009): Wyruszam o 1 w nocy z Inowrocławia w kierunku Konina. Po drodze w Ślesinie zabieram pozostałą część ekipy. Maciasa i nasz support-team Matiego. Po drodze zwiedzamy muzeum w Oświęcimiu – Birkenau oraz święcimy nasze wyprawowe potrawy w Wadowicach. Docieramy do Nowego Targu Kowańca około 13.00 po czym od razu ruszamy zółtym [...]

by admin at April 19, 2009 06:02 PM

April 05, 2009

Tomasz Wątorowski

Turtelizer 2 JTAG Cloned.

Truly Integrated Turtelizer 2 Clone is another hardware implementation of popular Turtelizer 2 from ethernut.de. This programmer is designed to work with OpenOCD programming and debugging software. It uses a standard 10 pin JTAG connector with pinout identical to one used in original Turtelizer 2. It also embeds a simple RS232 voltage compatible serial port with baud rate up to 115200 bps. This programmer is based on FTDI FT2232 chip, and so it is supported by both Windows and Linux operating systems.

This programmer can be used to program almost every kind of microcontroller, thas is capable of programming via JTAG interface. All of our programmers were tested on one of the most popular ARM microcontrollers: the AT91SAM7S64, and worked perfectly.

Installation in Windows (XP):

  • In order to use the programmer it is necessary to download and install FTDI drivers.
  • Plug in programmer board, and add previously downloaded FTDI drivers to drivers search path, when asked to install drivers by Windows.
  • Then, it is necessary to install Turtelizer drivers.
  • Download the latest OpenOCD software package for Windows. It also contains drivers for Turtelizer.
  • When prompted to install drivers for Turtelizer, add path “(OpenOCD installation directory)driversturtelizer2″ to drivers search path, and then install drivers
  • That’s it! You can now use your programmer.

Installation in Linux:

  • Firstly you need to have libftdi and libftdi installed in your system, look for it at intra2net
  • Now it is necessary to compile OpenOCD with FT2232 chip suport. In order to do so, get OpenOCD sources with use of svn. Enter following command string:
    $ svn checkout svn://svn.berlios.de/openocd/trunk
  • Now copy ftdi.h, from libftdi source directory to (openocd dir)/src/jtag/
  • You have to have libusb installed. Look for it in your systems repository.
  • Then enter following commands:
    $ ./bootstrap
    $ ./configure --enable-ft2232_libftdi
    $ make
  • Now you have your OpenOCD installed and ready to use
  • In order to use serial port you need to use ftdi_sio module with specific variables set. To do so, enter following command (as root):
    # modprobe ftdi_sio vendor=0x403 product=0xbdc8
  • Then a new serial device should appear in your system as /dev/ttyUSB*.

Photos:

Programmer closeup

Programmer closeup

JTAG & RS232 Cable

JTAG & RS232 Cable


by admin at April 05, 2009 12:50 PM

March 19, 2009

Łukasz Stachowiak

Spotkanie Poznań JUG [26.03.2009] - Vine/Flex/BlazeDS

Po dość długiej przerwie w spotkaniach JUGowych na najbliższym będziemy mogli posłuchać o Vine, Flexie i BlazeDS z ust Piotra Dziubickiego. Oto krótki opis prelegenta nt wystąpienia:
"Tworzenie nowoczesnych serwisów internetowych z wykorzystaniem Vine/Flex/BlazeDs. Wybór odpowiedniej technologii często przesądza o późniejszym "być, albo nie być" projektu. Dlatego dyskusja skupiona będzie wokół często pojawiających się pytań:
- na co zwrócić uwagę i jak podejść do ewaluacji dostępnych rozwiązań?
- jak wygląda serwis internetowy wspomagający HPC wykorzystujący i łączący wiele standardów produkcyjnych.
"

Informacje techniczne:
26.03.2009, godzina 18:00
Siedziba Cognifide, Aleja Wielkopolska 4
Rejestracja

Zapraszam!!

by lukas.stachowiak@gmail.com (WooKasZ) at March 19, 2009 07:37 PM

March 15, 2009

Łukasz Stachowiak

Przykładowa aplikacja Java ME w NetBeans IDE z wtyczką Mobility

Dostałem już kilka maili od osób które zaczynają swoją przygodę z Java ME a mają problem ze zbudowaniem działającej prostej aplikacji. Dlatego chciałbym dziś zaprezentować mały tutorial jak stworzyć taką prostą aplikację za pomocą NetBeans IDE z wtyczką Mobility. Który wg mnie jest najlepszym środowiskiem do mobilnej Javy z jakim się spotkałem - a wiele już przeszło przez moje macki ^^
Zacznijmy od pobrania środowiska ze strony Download. Wybieramy wersje z pełnym wsparciem Java lub minimalna a po uruchomieniu w oknie Tools -> plugins pobieramy wtyczki:
  • Mobility

  • Visual Mobile Designer

  • Po instalacji potrzebny będzie restart IDE.
    Gdy już jesteśmy przygotowani możemy przystąpić do utworzenia nowego projeku Java ME.
    Wybieramy File -> New Project, na liście kategorii klikamy Java ME a następnie po prawej stronie Mobile Application.

    Na następnym ekranie wybieramy nazwę projektu (u mnie SampleJ2MEApp) oraz odznaczamy opcję Create Hello MIDlet (przecieć mamy go sami stworzyć ;)
    . Następne co musimy skonfigurować to emulator oraz platforma docelowa naszej aplikacji. Emulator powinniśmy mieć do wyboru jeden Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC . Aby większość komórek mogła uruchomić nasz MIDlet wybieramy konfigurację CLDC 1.1 oraz profil MIDP 2.0.
    To wszystko. Klikamy finish.
    Ok, dodajemy nowy Midlet: File -> New File -> MIDP -> Visual MIDletI nadajemy mu nazwę np. SampleApp.
    Po wybraniu finish powinien wyświetlić się nam ekran Flow Design w którym to możemy przedstawić cały przepływ sterowania między ekranami aplikacji a wtyczka Mobility wygeneruje za nas kod Javy do tego (klepanie tego ręcznie jest strasznie denerwujące:/).

    Możemy przystąpić do tworzenia! Zróbmy aplikację która po uruchomieniu wyświetli nam ekran powitalny z jakimś obrazkiem a następnie przejdzie do ekranu z tekstem np "Hello, world!".
    Jedynym obiektem który istnieje na diagramie jest Mobile Device który reprezentuje urządzenie. Ma przypisane dwie akcje - started do którego przypisujemy ekran który ma się wyświetlić po uruchomieniu oraz Resumed do którego przypisujemy ekran który ma się pojawić po wznowieniu działania aplikacji.
    Do diagramu będziemy musieli dodać dwa nowe elementy z panelu bocznego (palety). Mianowicie Splash Screen oraz Form. Pierwszy z nich reprezentuje ekran powitalny i jest specjalna klasą dostępną tylko w NetBeans, więc jeśli będzie konieczność przeniesienia projektu np. do Eclipse potrzebne będzie dodanie bibliotek w classpath. Form jest standardową klasą MIDP i reprezentuje standardowy ekran na którym będziemy wyświetlać jakieś kontrolki.
    Teraz dodamy jeden przycisk akcji do Form który będzie odpowiadać za zamykanie aplikacji. Z kategorii Commands wybieramy Exit Command i 'przenosimy' go na form.
    Następnie dodajmy działania do tych akcji. Aby tego dokonać należy połączyć akcje z ekranem docelowym klikając na akcję źródłową i próbować 'przenieść' ją (pojawi się strzałka) na ekran docelowy. W taki sposób łączymy
    - Started z splashScreen (po uruchomieniu to on się właśnie pojawi)
    - DISMISS_COMMAND z form (po upływie 5s zostanie wyświetlony form)
    - exitCommand1 z Mobile Device (wyłączenie aplikacji).
    Ostatecznie diagram przepływu powinien wyglądać następująco:

    Teraz możemy się zabrać za wygląd ekranów.
    Na ekranie powitalnym możemy wyświetlić naszego wiernego Javowego towarzysza Dukea !

    Klikamy prawym przyciskiem na splashScreen następnie Properties i z listy Image wybieramy <New Image Resource>. Pojawi się nowy element na liście, wybieramy go i klkamy trzy kropki obok. Odnajdujemy obrazek z naszym Dukiem.

    I klikamy OK. W oknie properties możemy zmienić jeszcze wartość title na "Przykładowa aplikacja Java ME !".
    No to został nam jeszcze form. Klikamy na niego i na nad widokiem diagramy przepływu wybieramy Screen. Wyświetli się designer ekranu form. Klikamy prawym przyciskiem na ekranik i wybieramy New/Add -> String Item. Po dodaniu edytujemy pogrubiony tekst na "Hello, world!". Następnie nagłówek 'form' zmieniamy na "Przykładowa aplikacja Java ME !".

    I to wszystko! Możemy teraz uruchomić aplikację i przetestować jej działanie na emulatorze (prawy przycisk myszy na nazwę projektu na liście a następnie run) a później wgrać na telefon i przekonać się, że wszystko ok:)


    Za pomocą kilku kliknięć udało nam się stworzyć prostą aplikację bez pisania nawet linijki kodu. Oczywiście tworząc normalne aplikacje koniecznie będzie pokodowanie trochę ale takie operacje jak sterowanie przepływem ekranów czy prosty design okna może zostać bardzo łatwo zrealizowany za pomocą środowiska:)

    Zapraszam do komentowania!

    by lukas.stachowiak@gmail.com (WooKasZ) at March 15, 2009 10:30 AM

    March 14, 2009

    Jakub Krajniak

    popsuje się

    Przypadkiem patrzyłem dzisiaj co też siostra ma na tych studiach. Tak sobie gaworzymy, akurat opracowywała doświadczenie z absorpcją światła w roztworach. Mieli jakiś spektrofotometr. Pytam się, czy sprawdzali, jakie będą wyniki innych długości fali. Cóż, spektrofotometru, nie mogli...

    March 14, 2009 02:19 PM

    March 11, 2009

    Wojciech Smolak

    Kurtka Małachowski Tourist II

    Swego czasu nabyłem dość drogą jak na studenckie warunki, ale wg wielu opinii wartą swej ceny kurtkę Małachowski z serii Turysta II. Przedstawię kilka spostrzeżeń powstałych w wyniku półrocznego używania jej. 1. Po dwóch miesiącach noszenia rozerwały się szwy pod pachami w wewnętrznej tkaninie kurtki. Dziury owe na szczęście się nie powiększają, choć denerwują. 2. Po godzinnym [...]

    by admin at March 11, 2009 09:29 PM

    March 03, 2009

    Jakub Krajniak

    Informatyzacja

    - Ludwiku Dorn i Sabo nie idźcie tą drogą Nie idźcie, doprawdy szkoda czasu na taką informatyzację. Odnoszę nieodparte wrażenie, że proces tworzenie systemów polega na przeniesieniu całej aktualnej, papierowej, analogowej rzeczywistości do cyfrowej i to tyle. Nie uwzględnia się...

    March 03, 2009 10:55 PM

    Łukasz Stachowiak

    Brak obsługi klawiszy multimedialnych w laptopie Lenovo SL500 na Ubuntu

    Dzisiaj troszkę z innej beczki. Jakiś czas temu stałem się posiadaczem laptopa Lenovo SL500. Chcąc w końcu nauczyć się obsługiwać linuxa zainstalowałem sobie Ubuntu 8.10 dla 64 bitowych procesorów. Zaskoczony byłem gdy po instalacji działał praktycznie cały sprzęt! Nie musiałem dogrywać żadnych dodatkowych sterowników:) No z jednym wyjątkiem... po jakimś czasie zauważyłem, że nie działają klawisze głośniej/ciszej i wyciszenia.
    Na polskich stronach nic nie znalazłem, na angielskich dotarłem do sterownika autorstwa Alexandre Rostovtsev. Opiszę jak go zainstalować, może komuś się kiedyś przyda ;)

    Pobieramy sterownik ze strony http://github.com/tetromino/lenovo-sl-laptop/tree/master
    Rozpakowujemy go w jakimś katalogu gdzie będzie mógł sobie bezpiecznie siedzieć i służyć.
    Wchodzimy do tego katalogu przez konsolę i wpisujemy:
    make
    insmod lenovo-sl-laptop.ko

    Ok, już powinno działać:)
    Jeszcze trzeba sprawić, by ten moduł uruchamiał się przy starcie systemu. Musimy napisać prosty skrypt w bashu:
    #!/bin/bash
    insmod sciezka_do_katalogu_z_modulem/lenovo-sl-laptop.ko

    I umieścić go w katalogu /etc/init.d/ pod dowolną nazwą z rozszerzeniem .sh. Następnie dodajemy mu uprawnienia na wykonywanie:
    chmod +x [nazwa skryptu]

    I dodajemy go by uruchamiał się przy starcie:
    update-rc.d nazwa_skryptu defaults


    No i problem rozwiązany.

    ps. Dziękuję za pomoc koledze Spawaczowi!
    UPDATE
    Na Ubuntu 9.04 też to rozwiązanie działa.

    UPDATE 2
    Trafiło do mnie podobne rozwiązanie którego jeszcze nie testowałem ale może ktoś będzie miał czas się pobawić.. chyba jest bardzie profesjonalne ^^ Link: http://gianlucamagalotti.wordpress.com/2009/02/16/lenovo-thinkpad-sl-series-hotkeys/

    by lukas.stachowiak@gmail.com (WooKasZ) at March 03, 2009 10:25 AM

    March 02, 2009

    Łukasz Stachowiak

    Tytuł inżyniera oraz DB2 Fundamentals Certificate zdobyte!

    Dłuuuga przerwa spowodowana dwoma sukcesami :)

    1. Tytuł inżyniera informatyki - po jakiś 17 latach nauki nareszcie są efekty! 16 lutego udało mi się uzyskać tytuł inżyniera na politechnice poznańskiej. Za prace pt. System informacji giełdowej na urządzenia mobilne otrzymałem ocenę 5, a na dyplom (obrona + średnia ze studiów) trafi ocena 4,5 :) Co prawda jakoś mój świat się nie zmienił po otrzymaniu tego tytułu ale miło, że coś dzięki temu zmieni się w CV (co prawda tylko 4 litery inż. ale zawsze;).

    2. DB2 Fundamentals Certificate (exam 730) - to świeże info, bo dziś w okolicach 16 moim oczom ukazał się taki oto ekran:

    Miło #2 :) Wynik jest dla mnie satysfakcjonujący, zważywszy na to, że pytania to prostych nie należały - spodziewałem się znacznie prostszych. Przygotowania do tego certyfikatu wiele mnie nauczyły, podczas projektowania bazy danych zwracam uwagę na znacznie więcej aspektów. Poza tym DB2 okazało się bardzo ciekawą relacyjną bazą danych. Nowy typ danych - XML, sposób jego przechowywania oraz operacje na nim są ciekawą innowacją. Postaram się coś o tym (i nie tylko) napisać na blogu;)
    Szkoda, że po otrzymaniu wyników nie mogłem przejrzeć gdzie popełniłem błędy :-/

    Jakie teraz mam plany (kolejność przypadkowa) ?;]
    - DB2 Administrator (exam 731)
    - Dokończyć szkolenie z Glassfish
    - SCJP - ale nad tym się jeszcze zastanawiam czy warto

    by lukas.stachowiak@gmail.com (WooKasZ) at March 02, 2009 04:41 PM

    February 04, 2009

    Łukasz Stachowiak

    MIDP 3.0 - co nowego ?

    Zabrałem się za czytanie JSR-271 czyli specyfikacji Mobile Information Device Profile w wersji 3. Na tę chwilę przygotowana jest wersja public review. Z tego co gdzieś tam usłyszałem to pod koniec połowy tego roku ma zostać wydana wersja finalna specyfikacji (informacja niepewna!).
    Ok, ale jakie nowe możliwości będą miały nasze aplikacje na komóreczki ? Oto lista:
    - Zwiększone wymagania sprzętowe - po pierwsze ekran 176x220 pikseli, głębia kolorów 16bit. 1 MB pamięci na MIDP, 512 KB pamięci trwałej dla zapisu danych aplikacji oraz 1 MB pamięci dla Java runtime. To wszystko oczywiście poza tym co wymaga CLDC/CDC.
    - wprowadzenie LIBletów, komponentów które mogą być używane przez jeden lub więcej MIDletów. Zawierają one zbiór klas i nie mogą być uruchamiane.
    - W pliku JAR mogą być teraz przechowywane dane w formacie RMS. A nawet więcej! Można pobierać dane RMS z internetu! Szkoda, że nie było tego wcześniej, bo ułatwiłoby mi inżynierkę;) W deskryptorze MIDletu musi znajdować się wpis ze ścieżką gdzie dane się znajdują. Oto przykład:
    MIDlet-Data-Size: 3000
    MIDlet-Persistent-Data-URL-1: data.rms overwrite encryptLocally
    MIDlet-Persistent-Data-URL-2: http://vendor.com/gamedata/coolgame.rms

    - w deskryptorze muszą być teraz zapisane JSRy oraz LIDlety z jakich korzysta MIDlet, jeśli można pobrać je z sieci to dodatkowo URL. Przykład:
    Dependency-1: microedition.location; JCP; 1.0+; standard
    Dependency-2: MapsForAll; MapsGalore, Inc.; 1.1.2; liblet
    LIBlet-Dependency-JAD-URL-2: http://www.mapsgalore.com/liblets/mapsforall.jad

    - możliwość uruchamiania kilku MIDletów jednocześnie. Dotychczas aby uruchomić inną aplikację, konieczne było zamknięcie poprzedniej. Teraz będzie można minimalizować programy i uruchamiać kolejne.
    - spooooro zmian w bezpieczeństwie. Tutaj zapraszam do lektury specyfikacji, bo jest tego naprawdę dużo ;-)

    Są jeszcze sprawy nad którymi dyskusja nadal trwa:
    - czy Form może być przewijany horyzontalnie ?
    - obsługa wielu ekranów powitalnych (ang. splash screen)
    - wymagana obsługa SVG Tiny 1.1 i obsługa tego formatu przy tworzeniu komponentów interfejsu użytkownika
    - poprawki do komponentu TabbedPane oraz obiektu nasłuchującego TabListener
    - lokalizacja nazw MIDletów
    - zmiana domyślnego kodowania znaków na UTF-8
    - wprowadzanie adresu URL dla aktualizacji MIDletu

    Oczywiście zapewniona jest zgodność wstecz ;-)

    Osobiście podobają mi się zmiany. Niektóre ciekawe, inne bardzo ciekawe. Mam nadzieję, że SVG stanie się standardem oraz zostanie wprowadzony URL do aktualizacji. Znacznie by to zbliżyło MIDlety do aplikacji desktopowych. Jednak nadal mi brakuje większych (lub jakichkolwiek!) możliwości operowania telefonem - dostępu do książki telefonicznej, czy wiadomości tekstowych.
    W tym roku ma się także pojawić "wersja komórkowa" JavaFX (to może być hit!). Jestem ciekaw jak to zostanie zgrane z MIDP 3.0.

    Zapraszam do komentowania !

    by lukas.stachowiak@gmail.com (WooKasZ) at February 04, 2009 07:52 PM

    February 03, 2009

    Łukasz Stachowiak

    Szkolenie z Glassfish - czas start !

    Dziś zakończyłem sesje na uczelni:) Ostatnia sesja na studiach pierwszego stopnia... ale jeszcze 3 będą na drugim stopniu więc nie jestem jakoś wielce wzruszony:P Do tego obrona pracy inżynierskiej 16 lutego. No ale wszystko ze spokojem, sporo czasu jeszcze jest na przygotowanie więc można zająć się czymś bardziej przyjemnym :)

    Zapisałem się właśnie na szkolenie z serwera aplikacyjnego Glassfish o którym pisałem wcześniej. Pierwszy punkt to: GlassFish(TM) Application Server: Introduction. Czeka mnie mały wstęp;) I dobrze, nigdy nie zgłębiałem wiedzy na temat serwerów aplikacji, więc czas się jakimś bardziej zainteresować. Jaką formę będzie miało to szkolenie to jeszcze nie wiem, nigdy w niczym takim nie brałem udziału, ale mam zamiar jak najwięcej z niego wynieść.
    Jest ambitny plan dzielenia się doświadczeniami na blogu, co by ktoś kto nie ma czasu na wzięcie udziału w szkoleniu mógł chociaż trochę liznąć z tematu (mam nadzieje, że nie będę przez to łamać czyiś praw autorskich) . Trzymajcie za mnie kciuki!

    by lukas.stachowiak@gmail.com (WooKasZ) at February 03, 2009 08:17 PM

    January 27, 2009

    Łukasz Stachowiak

    Dzisiejsze spotkanie Poznań JUG przesunięte !

    Niestety z powodu choroby prelegenta Jacka Pospychały dzisiejsze spotkanie o AspectJ musi zostać przesunięte.
    Znany już jest termin na który zostało przesunięte, jest to 10 lutego, godzina 18:00. Miejsce to samo co zwykle czyli siedziba Cognifide.
    Zapraszam na ten termin ! ;-)

    Proszę przekazać informację innym uczestnikom aby nie jechali na marne!

    by lukas.stachowiak@gmail.com (WooKasZ) at January 27, 2009 10:50 AM

    January 25, 2009

    Łukasz Stachowiak

    Walidacja wielu pól w jednym walidatorze w JSF

    Typowa sytuacja - mamy formularz zmiany hasła a w nim pola jak hasło i potwierdź hasło. Jak stworzyć do takich pół klasę walidującą skoro normalnie może ona operować na tylko jednym elemencie formularza ?
    To proste:) Musimy przekazać dodatkowo walidatorowi jako atrybut wartość z pierwszego pola.
    Posługując się powyższym przykładem mamy formularz:

    <h:form id="changepassform">
    <tr>
    <td>Nowe hasło:</td>
    <td>
    <h:inputSecret id="password" value="#{userRegistrationBean.password}"
    required="true" redisplay="false" />
    </td>
    </tr>
    <tr>
    <td>Powtórz:</td>
    <td>
    <h:inputSecret id="confirm" required="true" redisplay="false">
    <f:validator validatorId="passwordValidator" />
    <f:attribute name="passwordId" value="changepassform:password" />
    </h:inputSecret>
    </td>
    </tr>
    </h:form>
    W drugim polu formularza podajemy walidator którym jest passwordValidator - jego implementacja zajmiemy się za chwilę. Jako atrybut o nazwie passwordId podajemy z formularza changepassword (to nazwa aktualnego formularza) pole password, czyli to powyżej.
    Teraz czas na klasę walidującą.
    PasswordValidator.java
    package com.wookasz.blogspot.jsfmultivalidator;

    import javax.faces.application.FacesMessage;
    import javax.faces.component.UIComponent;
    import javax.faces.component.UIInput;
    import javax.faces.context.FacesContext;
    import javax.faces.validator.Validator;
    import javax.faces.validator.ValidatorException;

    public class PasswordValidator implements Validator {

    public void validate(FacesContext context, UIComponent component, Object value)
    throws ValidatorException {

    // pobranie atrybutu przekazanego w formularzu
    String passwordId = (String)component.getAttributes().get("passwordId");
    // odnalezienie odpowiedniego komponentu o tej nazwie
    UIInput passwordInput = (UIInput)context.getViewRoot().findComponent(passwordId);
    // pobranie wartości z tego komponentu
    String password = (String) passwordInput.getValue();
    String confirm = (String) value;

    // sprawdzanie poprawnosci i ew. zrzucenie wyjątku
    if (!password.equals(confirm)) {
    throw new ValidatorException(new FacesMessage("Hasła nie są identyczne"));
    }
    }
    }
    Mam nadzięję, że komentarze w kodzie wystarczą by wyjaśnić sprawę ;-)
    Pozostaje jeszcze rejestracja walidatora w faces-config.xml:
    <validator>
    <validator-id>passwordValidator</validator-id>
    <validator-class>
    com.wookasz.blogspot.jsfmultivalidator.PasswordValidator
    </validator-class>
    </validator>

    Wynik:

    by lukas.stachowiak@gmail.com (WooKasZ) at January 25, 2009 11:11 PM

    January 24, 2009

    Łukasz Stachowiak

    NetBeans uznany produktem roku przez Developer.com !


    W głosowaniu przeprowadzonym przez serwis www.developer.com produktem roku 2008 został NetBeans! Wygrał w pięciu z dwunastu kategorii! Co więcej w tych kategoriach otrzymał znacząco większą liczbę głosów niż kolejne miejsca.



    Zwycięstwo odnotowano w następujących kategoriach:
    - Development Tool -> NetBeans Platform
    - Development Utilities -> NetBeans Profiler
    - Wireless/Mobile -> NetBeans Mobility Pack for Connected Device Configuration (CDC) 5.5
    - Java Tool -> NetBeans IDE
    - Open Source -> NetBeans

    Myślę, że to świetny wynik. W Polsce zauważam, że ze strony firm brakuje jakoś przekonania co do tego IDE. Większość korzysta z Eclipsa (co widać po publice na NetBeans day i Eclipse DemoCamp). Mam nadzieję, że takie nagrody zaczną przekonywać ludzi do korzystania z NetBeansa ;-)

    Pełną listę zwycięzców można przeczytać w artykule: Winners of the Developer.com Product of the Year 2009 Are Announced

    by lukas.stachowiak@gmail.com (WooKasZ) at January 24, 2009 12:59 PM

    January 23, 2009

    Łukasz Stachowiak

    AspectJ na Poznań Java User Group [27.01.09]

    O programowaniu aspektowym w Javie za pomocą AspectJ na najbliższym spotkaniu Poznań Java User Group opowie nam Jacek Pospychała. Spotkanie odbędzie się 27 stycznia (wtorek) w siedzibie firmy Cognifide na ulicy Al. Wielkopolskie 4 - godzina 18:00.

    Tak jak ostatnim razem na spotkanie wymagana jest rejestracja [link].
    Ja niestety nie dotrę tym razem, ponieważ mam egzamin w tym czasie :-/ Ale wszystkich serdecznie ZAPRASZAM !

    Więcej szczegółów na grupie dyskusyjnej Poznań JUG.

    EDIT: A jednak udało mi się być zwolnionym z egzaminu to pojawię się na JUGu ^^

    by lukas.stachowiak@gmail.com (WooKasZ) at January 23, 2009 08:23 AM

    January 22, 2009

    Przemysław Walkowiak

    Windows SideShow i Windows Mobile

    Windows SideShow jest usługą, która umożliwia szybki dostęp do niektórych funkcji systemu (zależnych tylko od wyobraźni programistów) z między innymi urządzeń posiadających mały ekran W sumie nie widziałem jeszcze działania tego podsystemu, aż do wczoraj...

    W sumie zainteresowałem się tym już jakiś tydzień temu szukając jakichś fajnych gadżetów na mojego HTC Touch Diamonda (dorobiłem się w końcu jakiś czas temu, tak jak i nowego laptopa;) ). No i przypomniałem sobie o Windows Sideshow - usłudze, której nazwa co chwile wpadała w oczy podczas przeglądania panelu sterowania. Grzebiąc trochę w Internecie doszukałem się, że Microsoft wypuścił aplikacyjkę na Windows Mobile wykorzystującą właśnie Windows SideShow. Jaki jest efekt działania?

    W tej chwili na komórce w momencie gdy jest połączona przez Bluetooth (po WiFi nie działa) mogę połączyć się z usługą Windows SideShow na laptopie i korzystać z zainstalowanych gadżetów. Gadżety można ściągnąć z MS Live Gallery, ale na chwilę obecną nie ma ich niestety zbyt wiele. W każdym bądź razie są dwa dosyć przydatne.

    Office Powerpoint Remote oraz domyślnie zainstalowany gadget do Windows Media Playera. Ten drugi umożliwa zdalne sterowanie naszym WMP, a ten pierwszy czyni z naszego telefonu dosyć zaawansowany prezenter, który oprócz możliwości przełączania slajdów wyświetla również napisane notatki oraz wyświetla jaki będzie następny slajd. Co prawda ma jeszcze parę małych wad jak kiepskie przystosowanie do dotykowego ekranu, ale i tak cieżko znaleźć podobną aplikację i to za darmo :)

    Linki:


    by Przemysław Walkowiak at January 22, 2009 09:18 PM

    Łukasz Stachowiak

    Placebo - Twenty Years, live at Rock Am Ring 06-04-06

    Nie wiem czy czytają mnie jacyś fani Placebo, ale uważam, że ten kawałek na tym koncercie zagrali zaj****** ! Końcówka wymiata !

    Szkoda tylko, że na YouTube jest taka słaba jakość dźwięku;/

    by lukas.stachowiak@gmail.com (WooKasZ) at January 22, 2009 11:54 AM

    January 12, 2009

    Łukasz Stachowiak

    Drobne poprawki w wyglądzie bloga

    Usiadłem dziś i poszerzyłem miejsce na posty na blogu. Wyleciały przez to zaokrąglenia ramek, ale mam nadzieje, że to mocno nie popsuło designu. Prosiłbym o komentarze co tu jeszcze psuje czytelność lub szpeci wygląd ;-) Nie mam niestety zdolności plastycznych żeby samemu to ocenić ;-/

    by lukas.stachowiak@gmail.com (WooKasZ) at January 12, 2009 11:40 AM

    January 09, 2009

    Łukasz Stachowiak

    January 08, 2009

    Łukasz Stachowiak

    Pierwszy MIDlet v2.0 -> LWUIT incoming!

    W czasach średniowiecznych opisałem tutaj jak napisać prosty midlet na urządzenie mobilne. Przedstawiłem to na standardowych kontrolkach z MIDP 2.0. Dziś chciałbym pokazać jak napisać pierwszy MIDLet ale już w dużo bardziej rozbudowanej i wszechstronnej bibliotece - Lightweight UI Toolkit (LWUIT).
    Co nam daje ta biblioteka ? Oto główne korzyści:
    - model MVC podobny do swingowego
    - aplikacja wygląda i działa identycznie na każdym urządzeniu
    - dużo większa liczba kontrolek
    - layouty jak w swingu (BoxLayout, GridLayout itd...)
    - Look and Feel oraz bardzo łatwa ich zmiana nawet podczas działania aplikacji
    - różnego rodzaju animacje i efekty przejścia
    - wszystkie komponenty UI mogą być w łatwy sposób modyfikowane (nie są oznaczone jako final - można dziedziczyć)
    - okienka modalne
    - obsługa ekranów dotykowych
    - internacjonalizacja
    - zmiana czcionek
    Hmmm... chciałem tylko kilka wymienić a tu się dość spora lista zrobiła ;P Jak wygląda LWUIT w akcji ? Możecie zobaczyć na filmiku poniżej:

    Już się wszystkim podoba ? Mnie bardzo! W połączeniu z licencją GPL jeszcze bardziej ^^
    No to czas coś napisać. Najpierw ściągnijmy bibliotekę : link. I tworzymy nowy projekt w ulubionym środowisku. Ja będę korzystać z NetBeans. Dodajemy klasę typu MIDlet do projektu, dodajemy bibliotekę LWUIT.jar oraz katalog resources do którego wrzucamy plik z motywem (link). Motyw pochodzi z przykładowego projektu LWUITDemo rozprowadzanego razem z biblioteką.
    Najpierw pokażę cały kod a później omówię najważniejsze elementy.
    LWUITDemo.java
    package com.blogspot.wookasz.lwuitdemo;

    import com.sun.lwuit.Command;
    import com.sun.lwuit.Display;
    import com.sun.lwuit.Form;
    import com.sun.lwuit.Label;
    import com.sun.lwuit.animations.CommonTransitions;
    import com.sun.lwuit.events.ActionEvent;
    import com.sun.lwuit.layouts.BorderLayout;
    import com.sun.lwuit.plaf.UIManager;
    import com.sun.lwuit.util.Resources;
    import javax.microedition.midlet.MIDlet;

    public class LWUITDemo extends MIDlet {
    private static final String THEME_FILE = "/businessTheme.res";
    public void startApp() {
    try {
    // inicjalizacja ekranu
    Display.init(this);

    // otwarcie i wczytanie motywu
    Resources r = Resources.open(THEME_FILE);
    UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));

    // tworzenie formatek
    final Form firstForm = new Form("Pierwsza formatka");
    firstForm.setLayout(new BorderLayout());
    Label label1 = new Label("Hello world!");
    label1.getStyle().setBgTransparency(100);
    firstForm.addComponent(BorderLayout.CENTER, label1);

    final Form secondForm = new Form("Druga Formarka");
    secondForm.setLayout(new BorderLayout());
    Label label2 = new Label("and Hello LWUIT !!");
    label2.getStyle().setBgTransparency(100);
    secondForm.addComponent(BorderLayout.CENTER, label2);

    // przypisanie animacji przejść
    firstForm.setTransitionInAnimator(
    CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL,
    false, 1000));
    secondForm.setTransitionInAnimator(
    CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL,
    true, 1000));

    // dodawanie przycisków
    Command goBtn = new Command("Wciśnij mnie!", 1) {
    public void actionPerformed(ActionEvent evt) {
    secondForm.show();
    }
    };
    firstForm.addCommand(goBtn);

    Command backBtn = new Command("Powrót!", 1) {
    public void actionPerformed(ActionEvent evt) {
    firstForm.show();
    }
    };
    secondForm.addCommand(backBtn);
    // przycisk wyjścia
    Command exitCmd = new Command("Wyjście", 2) {
    public void actionPerformed(ActionEvent evt) {
    destroyApp(true);
    notifyDestroyed();
    }
    };
    firstForm.addCommand(exitCmd);
    secondForm.addCommand(exitCmd);

    // wyświetlenie formatki pierwszej
    firstForm.show();
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }

    public void pauseApp() {}
    public void destroyApp(boolean unconditional) {}
    }

    Pierwsza instrukcja inicjalizuje ekran, musi być ona wywołana przed wyświetleniem pierwszej formatki. Jako parametr należy podać obiekt dziedziczący po klasie MIDlet.
    Następne dwie linie
    Resources r = Resources.open(THEME_FILE);
    UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));
    Załatwiają za nas całe wystylizowanie aplikacji:) Pierwszy wczytuje zbiór danych w którym znajduje się nasz motyw. W drugim go ustawiamy jako aktualny, szybkie i proste:) W jednym zbiorze może znajdować się wiele motywów dlatego odwołujemy się do tablicy w r.getThemeResourceNames()[0].
    final Form firstForm = new Form("Pierwsza formatka");
    firstForm.setLayout(new BorderLayout());
    Label label1 = new Label("Hello world!");
    label1.getStyle().setBgTransparency(100);
    firstForm.addComponent(BorderLayout.CENTER, label1);
    Tworzymy pierwszą formatkę. Parametrem jest napis jaki ma się pojawić na górnej belce, tak samo jako w standardowym formie. Następnie dla tej formatki ustawiamy layout typu BorderLayout, zgodnie z tym layoutem będą rozmieszczane wszystkie konponenty. W następnie dodajemy jeden komponent (napis) i dodajemy go na środek. Wcześniej jednak ustawiamy jego tło na całkowicie przezroczyste żebyśmy mogli widzieć tło aplikacji jakie jest zdefiniowane w motywie. W layoucie BorderLayout środkowa jego część zawsze zajmuje największą możliwą przestrzeń, gdybyśmy nie przypisali przezroczystego tła napisowi, nie zobaczylibyśmy tła aplikacji. Podobnie postępujemy z drugą formatką.
    firstForm.setTransitionInAnimator(
    CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL,
    false, 1000));
    Przypisujemy animacje dla sytuacji gdy formatka ma się pojawić. Trwać ona będzie 1000ms oraz będzie przesuwać się w stronę lewą. Podobnie tworzymy dla drugiej formatki, tylko animacja tam będzie przesuwać się w prawo.
    Command goBtn = new Command("Wciśnij mnie!", 1) {
    public void actionPerformed(ActionEvent evt) {
    secondForm.show();
    }
    };
    firstForm.addCommand(goBtn);
    Podczas tworzenia przycisków możemy od razu zdefiniować jaka akcja ma się wykonać podczas jego przyciśnięcia. Robimy to tworząc metodę actionPerformed dla tego przycisku. Co prawda nie jest to za bardzo zgodne z modelem MVC ale dla drobnych akcji takie podejście chyba nie jest aż tak złe. Akcja która zdefiowaliśmy wyświetla drugą formatkę. Oczywiście pojawia się ona z efektem przejścia który przypisaliśmy jej wcześniej.
    Dalej w kodzie przypisujemy kolejne przyciski o dość zrozumiałym działaniu, by na końcu wyświetlić pierwszą formatkę metodą show().
    Uruchamiamy!

    U mnie działa:) Zachęcam do przetestowania na telefonie, nie powinno być problemów raczej.
    Należy pamiętać, że jeśli użyjemy efektu przejścia jakim jest np. Transition3D.createRotation(int, bool) to jest wymagane od urządzenia obsługa 3D (pakiet javax.microedition.m3g).

    To by było na tyle mojego bardzo krótkiego wstępu do Lightweight UI Toolkit. Zachęcam do zapoznania się z API - bardzo proste i rozbudowane zarazem. Ja z pewnością napisze jeszcze trochę tutaj na ten temat. Pracuję już z LWUIT kilka miesięcy i trochę ciekawostek się nazbierało do opisania ^^

    Zapraszam do komentowania!

    Linki:
    Projekt NetBeans przykładu z wpisu: download
    Strona domowa - https://lwuit.dev.java.net/
    Oficjalne forum - http://forums.java.net/jive/forum.jspa?forumID=139
    Blog - http://lwuit.blogspot.com/

    by lukas.stachowiak@gmail.com (WooKasZ) at January 08, 2009 11:07 PM

    Traum

    WebBrowser

    Ostatnio korzystając z WebBrowser w c# natrafilem na ciekawą funkjonalność. Kontrolka pozwala do załadowanej strony wstrzyknąć kod java script. Na początku musimy do naszego projektu dodać Referencje do Microsoft Html Object Library: Add Reference->Com->Microsoft Html Object Library. W nastepnym kroku dodajemy: 1 using mshtml; Dalej nie pozostaje nam nic innego jak wstrzyknąć kod js’a do wnetrza załadowanej wcześniej strony: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //pobieramy element <head> HtmlElement [...]

    by Szymon at January 08, 2009 12:14 PM

    January 06, 2009

    Łukasz Stachowiak

    Darmowe szkolenia z Glassfish!

    Sun robi niespodzianki noworoczne i oferuje nam darmowe szkolenie (trial) z zakresu serwera aplikacji GlassFish. Żeby z niego skorzystać należy się zarejestrować by po tym otrzymać dostęp na 60 dni do serwisu szkoleniowego. Zakres programu jest dość wąski wg mnie bo obejmuje tylko informacje wstępne na temat serwera oraz różne aspekty tworzenia usług sieciowych: projektowanie, bezpieczeństwo, QoS, integracja z .NET, transakcyjność, praca z usługami. Jak to wygląda od środka jeszcze nie wiem, bo zarejestruje się gdzieś pod koniec stycznia dopiero gdy znajdę więcej czasu. Ale wszystkich zachęcam do skorzystania, zawsze można się czegoś nauczyć nowego ^^
    Co ciekawe rejestracja daje nam także zniżki np na certyfikaty SCWCD czy SCBCD.
    Z tego co wyczytałem to promocja kończy się 20 marca.
    Link do rejestracji (i większej ilości informacji): www.sun.com/training/glassfish_login.html


    EDIT:
    To jednak nie na certyfikaty są zniżki tylko na pakiety przygotowujące go egzaminu ! Przepraszam za pomyłkę ;-)

    by lukas.stachowiak@gmail.com (WooKasZ) at January 06, 2009 08:38 PM

    January 01, 2009

    Łukasz Stachowiak

    Dostęp do kontekstu utrwalania w niezarządzanych obiektach JSF

    Tworząc projekt z użyciem JSF i Spring Security musiałem w jednej z metod uwierzytelniających pobrać dane o użytkowniku z bazy danych. Problemem było to, że obiekt ten nie był zarządzanym przez kontener aplikacji więc nie mogłem wstrzyknąć sobie do niego referencji do kontekstu utrwalania. Samemu tworząc obiekt jak w przypadku platformy Java SE uzyskiwałem wyjątek braku informacji o jednostce utrwalania. Ostatecznie z rozwiązaniem problemu przyszła mi z pomocą grupa dyskusyjna pl.comp.lang.java a dokładniej użytkownik Jarek któremu bardzo dziękuje ^^

    Ok, żeby dostać się do kontekstu utrwalania należy wzbogacić nasz deskryptor wdrożenia web.xml o następujący wpis:
    <persistence-context-ref>
    <persistence-context-ref-name>
    persistence/[nazwa jednostki utrwalania z persistence.xml]
    </persistence-context-ref-name>
    <persistence-unit-name>
    [nazwa jednostki utrwalania z persistence.xml]
    </persistence-unit-name>
    </persistence-context-ref>
    Miedzy pierwszą parą znaczników wpisujemy gdzie będziemy mogli znaleźć naszą jednostkę utrwalania w JNDI, a w drugiej nazwę tej jednostki z pliku persistence.xml. Bardzo proste:) Należy tylko pamiętać aby wcześniej wszystko skonfigurować związanego z utrwalaniem.
    Teraz gdy to już mamy możemy dobrać się do tego czego szukamy:
    InitialContext ictx = new InitialContext();
    Context envCtx = (Context) ictx.lookup("java:comp/env");
    entityManager = (EntityManager) envCtx.lookup("persistence/[nazwa]");

    Działa :)

    by lukas.stachowiak@gmail.com (WooKasZ) at January 01, 2009 09:14 PM

    December 26, 2008

    Jakub Krajniak

    Rwący Nurt Historii

    Skoro są Święta to będę świętował i spróbuje zapomnieć o czekającym mnie styczniu lutym, a zapowiada się fatalny. Tym się zajmę jutro, zgodnie z zasadą co masz zrobić jutro zrób jutro. Goście, rodzina i takie tam, klimat wybitnie niesprzyjający do liczenia zadań z mechaniki,...

    December 26, 2008 06:52 PM

    December 25, 2008

    Jakub Krajniak

    Przerwa w funkcjonowaniu witryny

    Właściwie ku potomności, żeby nie szukać. Problem jest następujący: Jak sprawić, żeby normalnym użytkownikom przez pewien czas pokazywać stronę z informacją o tym, że są prowadzone pracę konserwatorskie Oczywiście potrzebujemy stronę z komunikatem. Umieśćmy ją w katalogu...

    December 25, 2008 02:21 PM

    Traum

    December 16, 2008

    Łukasz Stachowiak

    Optymalizacja operacji na danych w OpenBaseMovil-db

    System zapisu danych w OpenBaseMovile-db podobnie jak RMS opiera się na schemacie otwierania i ich zamykania. Gdy chcemy wykonać jakieś operacje na danych zbiór odpowiadający tabeli (to samo indeksy) jest otwierany a gdy skończymy to zamykany. Dzieje się to automatycznie i wykonywane jest przez bibliotekę. Co ciekawe dany zbiór może być otwierany kilka razy i kilka razy zamykany. Używany jest do tego licznik, który pilnuje aby tylko za pierwszym razem otworzyć zbiór i zamknąć go wtedy gdy liczba zamknięć będzie odpowiadać liczbie otwarć. Można to wykorzystać do optymalizacji operacji na zbiorach. Jeśli pozostawiamy wszystko bibliotece, podczas np 300 insertów 300 razy wykonywana jest operacja otwierania i zamykania zbioru. Jeśli sami wcześniej otworzymy zbiór to wykona się to tylko raz i znacznie przyspieszy wprowadzanie danych.
    Otwieranie zbioru wykonywane jest przez wywołanie operacji na tabeli openTree();.
    Schemat:
    try {
    tabela.openTree();
    // wstawianie danych
    } finally {
    tabela.closeTree();
    }
    I już jest znacznie wydajniej :) Tylko koniecznie trzeba pamiętać o zamknięciu zbioru!

    by lukas.stachowiak@gmail.com (WooKasZ) at December 16, 2008 06:22 PM

    December 14, 2008

    Łukasz Stachowiak

    Koty są dziwne...

    Po prostu nie mogłem się powstrzymać przed umieszczeniem tego tutaj :)
    Te kotki nigdy się nie poddadzą!

    Genialne :)

    Wykopane na Wykop.pl ;-)

    Edit:
    Dorzucę jeszcze to:

    też wykopane ;-)

    Koty są spoko ^^

    by lukas.stachowiak@gmail.com (WooKasZ) at December 14, 2008 12:07 AM

    December 11, 2008

    Łukasz Stachowiak

    Ułatwianie życia z JSF - PanelGrid

    Zabrałem się za JSF! Nie miałem wcześniej żadnego doświadczenia z frameworkami javowymi to tworzenia www i każda strona książki Core JavaServer Faces coraz wyraźniej pokazuje mi, że byłem mocno zacofany ;)
    Dziś np. miła niespodzianka w postaci znacznika panelGrid. Pisząc szablony w php strasznie wnerwiało mnie tworzenie tabel do formularzy (i nie tylko:>). Było to nużące i oszpecało kod.
    A w JSF odkryłem znacznik panelGrid który tworzy sam tabele. Wystarczy podać liczbę kolumn a następnie wypisywać kolejne elementy.
    Np.
    <h:panelGrid columns="2">
    <h:outputText value="Login:"/>
    <h:inputText required="true"
    value="#{userRegistrationBean.login}" />

    <h:outputText value="Hasło:"/>
    <h:inputSecret required="true"
    value="#{userRegistrationBean.password}" />
    </h:panelGrid>
    I to wygeneruje taki kod HTML:
    <table>
    <tbody>
    <tr>
    <td>Login:</td>

    <td><input type="text" name="j_id_id18:j_id_id64" value="" /></td>
    </tr>
    <tr>
    <td>Hasło:</td>
    <td><input type="password" name="j_id_id18:j_id_id68" value="" /></td>
    </tr>
    </tbody>
    </table>

    Oczywiście ten znacznik posiada sporo atrybutów dzięki którym można dostosować go do konkretnych potrzeb. Poczytać o nich można tutaj.

    Jeśli w komórce ma się znaleźć więcej niż jeden znacznik należy użyć znacznika grupującego panelGroup.
    Wracam do nauki...

    by lukas.stachowiak@gmail.com (WooKasZ) at December 11, 2008 10:50 PM

    December 09, 2008

    Dawid Morzyński

    Egipt

    Chociaż w Egipcie byłem już ponad miesiąc temu, to chciałbym napisać o kilku rzeczach, które wydały mi się ciekawe w tym kraju – jako turyście.

    Pierwsza rzecz jaka się rzuca w oczy jeszcze podczas lotu, to wszechobecna pustynia (bo jak inaczej to nazwać?) i wyrastające z niej "rajskie ogrody" – czyli hotele w których tętni życie, a poza którymi dookoła nie ma nic. Pierwsze wrażenie było jak najbardziej słuszne. Gdy jechaliśmy do hotelu po drodze kolejne hotele był jak fortece, do których wwozi się turystów i po tygodniu-dwóch wywozi. Egipcjanie najchętniej zamknęliby swoich gości w hotelu i zakazali im wychodzenia na zewnątrz, zapewniając dosyć rozrywek w środku. Powodem tego jest strach, że może coś im się stać (stąd przed każdym hotelem po zęby uzbrojeni ochroniarze, wszechobecna policja itp.) i strefy militarne, gdzie nikt nie ma wstępu. Może to też tłumaczyć zakaz używania GPSów na terenie całego kraju i fakt, że mapy, które są oficjalnie dostępne są bardzo lakoniczne.

    Pomimo tego, że byliśmy tam późnym październikiem, to temperatury były bardzo wysokie, więc podejrzewam, że nawet w styczniu można tam polecieć i cieszyć się ciepłą wodą morza czerwonego i słońcem.

    W Sharm el Sheikh poza starym bazarem i długim na 30 kilometrów wybrzeżem hotelowym jest cudowna rafa koralowa. I nie trzeba wcale nurkować ze specjalnym sprzętem, żeby zobaczyć to, co morze ma tam do zaoferowania. Problemem może okazać się tylko dojście do rafy – przez około 400 metrów brodzimy w wodzie po kolana natrafiając na końcu na ostrą rafę, którą da się przejść i "zanurzyć" w głębokiej wodzie, ale tylko pod warunkiem, że nie ma fali. Obowiązkowe oczywiście porządne obuwie wodne i ostrożność na olbrzymie jeżowce.

    Kolejnym miejscem jakie zwiedziliśmy był Kair. Spośród różnych rzeczy, jakie przykuły moją uwagę w drodze do Kairu (przejazd pod kanałem sueskim, jazda nocą przez niezamieszkałą część półwyspu Synaj) jest to, że Giza jest dzielnicą Kairu, a nie odrębnym miastem. Do tej pory żyłem w przekonaniu, że jest to "miejsce na pustyni, gdzieś blisko Nilu, gdzie wybudowano piramidy". Błąd. Giza jest normalną dzielnicą Kairu – z zatłoczonej ulicy trafiamy na fragment pustyni w środku miasta, na której stoją piramidy. Coś niesamowitego.

    W Kairze uwagę przykuwa przede wszystkim kontrast. Kontrast między biedotą, a skrajnie bogatymi. Znajdziemy tam zarówno znane z zachodu hotele, sklepy i inne luksusy, ale natrafimy też w środku miasta na ludzi, którzy nie zawsze mają co zjeść. Średnia pensja nauczyciela w Egipcie to 70$. Tancerka brzucha zarabia… 5000$. Widać różnicę?

    Klątwa faraona. To ostatnia moja refleksja po tej wyprawie. Owa klątwa istnieje – jest niczym innym jak nieprzystosowaniem organizmu europejczyków do flory bakteryjnej (niekoniecznie szkodliwej) Egiptu. I problemem nie było tu jedzenie niemytych owoców, picie wody z kranu czy zły dobór diety. Picie cięższych alkoholi na niewiele się zda. Jedynym rozwiązaniem jest branie tabletek wyrównujących florę bakteryjną już na dwa tygodnie przed wyjazdem – wtedy jest szansa, że organizm przystosuje się do nowej flory. Oczywiście nie jest powiedziane, że każdego dopadnie ten problem, ale większość go niestety ma.

    Moja galeria z Egiptu dostępna jest tutaj. A już niebawem – Szwecja (Uspala, Sztokholm) – czyli z wizytą u Marty.

    by dmk at December 09, 2008 01:11 PM

    December 05, 2008

    Dawid Morzyński

    Vista SP2 Beta (build v.113) - Multilanguage (PL)

    Już jest…

    Vista SP2 PL

    …i działa. Jak? Jeszcze nie wiem. Obiecuję napisać za dwa dni.

    Do pobrania tutaj. Podobno nie ma innych wersji językowych niż "English, French, German, Japanese, and Spanish". I faktycznie WU na Polskiej Viście nie widzi aktualizacji (po pobraniu odpowiedniego skryptu dodającego klucze do rejestru), ale po pobraniu instalatora "standalone" wszystko się zainstalowało i działa...

    Numer buildu na pulpicie

    PS Rok temu o tej samej porze testowałem SP1...

    Update: Moje wrażenia po tych kilku dniach używania Visty z SP2 są raczej dobre. Nie zauważyłem drastycznych różnic. Zmienił się z pewnością sposób obsługi urządzeń na Bluetooth, dodatkowo działa (nareszcie) zatrzymywanie urządzeń w kieszeni ultrabay mojego ThinkPada (do tej pory nie mogłem użyć "bezpiecznego usuwania sprzętu" z drugim dyskiem). Stabilność - do tej pory nie narzekałem i teraz chyba też nie mogę

    by dmk at December 05, 2008 12:30 PM

    Traum

    Molesta i kumple

    Ostatnio wpadła mi w ręce płyta Molesta Ewenement “Molesta + kumple”. Dla mnie niesamowite produkcje - bo o tekstach powinien wypowiedzieć się ktoś bardziej elokwentny :). Jak sama nazwa krążka wskazuje chłopaki z Molesty zaprosili kilku kumpli. Mamy okazje uslyszeć m. in. Jamala, Eldo czy Ostrowskiego. Moi faworyci: “Nikt i nic”, “Do utraty tchu” i [...]

    by Szymon at December 05, 2008 12:02 AM

    December 04, 2008

    Łukasz Stachowiak

    Rejestracja na najbliższe spotkanie Poznań Java User Group

    Na najbliższe spotkanie Poznańskiego JUGa należy się zarejestrować (chyba organizatorzy chcą wiedzieć ile będzie osób bo ostatnio się wszyscy nie mieścili w sali:P).
    Rejestracja dostępna jest pod adresem http://oiola.com/e/252-spotkanie-poznan-jug-wicket-08122008/.
    Spotkanie odbędzie się także 30min później niż wcześniej zapowiadałem.

    Podsumowując:
    Temat: Wicket
    Prelegent: Stanisław Osiński
    Miejsce: Siedziba Cognifide, Aleja Wielkopolska 4, Poznań
    Data: 8.12.2008
    Godzina: 18:30
    Rejestracja: tutaj

    Zapraszam!

    by lukas.stachowiak@gmail.com (WooKasZ) at December 04, 2008 11:01 AM

    Zmiana Look And Feel w NetBeans

    Jeśli znudził Ci się standardowy look and feel NetBeans to wiedz, że można go łatwo podmienić ^^
    Istnieją dwa sposoby:
    - uruchomić NetBeans z parametrem
    --laf [klasa L&F]

    - lub dodać ten parametr do pliku [katalog z nb]/etc/netbeans.conf do netbeans_default_options.

    Efekty:
    --laf javax.swing.plaf.metal.MetalLookAndFeel

    --laf com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel


    A jeśli znudziły Ci się standardowe wyglądy, możesz uruchomić inny dodając do ścieżki odpowiednią bibliotekę:
    --laf [klasa z L&F] -cp:p [ścieżka do JARa]

    Osobiście jednak najbardziej jestem przekonany do standardowego wyglądu :P

    ps. screeny są z RC2, bo w wersji finalnej mam za duży bałagan w projektach ;)

    by lukas.stachowiak@gmail.com (WooKasZ) at December 04, 2008 07:51 AM

    December 02, 2008

    Łukasz Stachowiak

    Klient web service w Java Micro Edition bez JSR-172

    Przez ostatnie dwa dni walczyłem żeby podłączyć klienta web service w mojej aplikacji mobilnej. Na emulatorze wszystko śmigało aż miło ale testy na telefonie komórkowym nie powiodły się ponieważ moje telefony (SE K750i oraz Nokia 9300i) nie obsługują J2ME Web Services Specification (JSR-172), a kod generowanego klienta przez NetBeans właśnie na tej specyfikacji się opierał. To ogranicza liczbę urządzeń na których moja aplikacja będzie mogła działać.
    Rozwiązania w mojej głowie pojawiły się dwa: albo zignorować i opierać wszystko na tej implementacji, albo ręcznie bawić się w parsowanie komunikatów SOAP (o zgrozo!).
    Co prawda drugie rozwiązanie nie byłoby aż tak tragiczne ponieważ udało mi się znaleźć jakąś pomocną bibliotekę (kSOAP) no ale i tak nie jest tak fajnie jak powinno. Pozostając tymczasowo przy pierwszym (łatwo później podmienić takiego klienta) postanowiłem przepytać ludzi na pl.comp.lang.java czy nie mają jakiś pomysłów. Ostatecznie skontaktowałem się z Karolem Harezlakiem który podał mi rozwiązanie tego problemu.
    Aby klient J2ME nie korzystał z JSR-172 należy użyć serwera proxy który będzie tłumaczył dane z web service na dane binarne których przetwarzaniem zajmie się już klient J2ME. Wszystko oczywiście łatwe i proste dzięki środowisku NetBeans IDE :)
    Przejdźmy do praktycznych rzeczy:)

    Web Service
    Niech nasza usługa będzie super zaawansowaną usługą sieciową i niech jej zadaniem będzie mnożenie dwóch liczb :)
    No to do roboty, tworzymy projekt new project -> Java EE -> EJB Module. Nazwa: MultiplyingService, w następnym oknie wybieramy serwer aplikacji na którym będzemy uruchamiać usługę, ja wybrałem GlassFisha V2 (instaluje się razem z NetBeans). Koniecznie wybieramy wersje Java EE 5.
    Żeby wszystkiego nie generować i przy okazji liznąć trochę EJB napiszemy sami usługę.
    Dodajemy nowa klasę javy do projektu o nazwie: MultiplyingWS.java
    package com.blogspot.wookasz.j2mecwsclient;

    import javax.ejb.Stateless;
    import javax.jws.WebService;

    @Stateless
    @WebService
    public class MultiplyingWS {
    public int multiply(int a, int b) {
    return a * b;
    }
    }
    Adnotacja Stateless oznacza, że mamy do czynienia z bezstanowym komponentem sesyjnym, który wzbogacony o adnotację WebService stanie się usługą sieciową zdolną do komunikacji poprzez protokół SOAP. Generacją WSDLa i innymi szczegółami zajmuje się serwer aplikacji.
    Wykonujemy deploy na serwer.

    Servlet
    Ok, teraz musimy stworzyć servlet który będzie jednoczenie klientem usługi oraz będzie udostępniał jego wyniki klientowi J2ME.
    Tworzymy nowy projekt ProxyServlet: New project -> Java Web -> Web Application. Dodajemy do niego New File -> Web Services -> Web Service Client. Usługę dla niego wybieramy z poprzednio utworzonego projektu.

    Wykonujemy deploy na serwer.

    J2ME Client
    No to został nasz ostatni docelowy klocek. Tworzymy nową aplikację J2ME New Project -> J2ME -> Mobile Application o nazwie WSClient, wybierająć CLDC 1.1 oraz MIDP 2.0.
    Do projektu dodajemy New File -> MIDP -> Java ME Client to Web Application. I konfigurujemy go jak na obrazkach:



    Klikamy finish i zostanie dodany po chwili do projektu plik o nazwie MultiplyWSClient.java który jest naszym docelowym klientem usługi sieciowej. Jeszcze utwórzmy głowny MIDlet WSClient.java:
    package com.blogspot.wookasz.j2mewsclient;

    import java.io.IOException;
    import javax.microedition.lcdui.Command;
    import javax.microedition.lcdui.CommandListener;
    import javax.microedition.lcdui.Display;
    import javax.microedition.lcdui.Displayable;
    import javax.microedition.lcdui.Form;
    import javax.microedition.midlet.*;

    public class WSClient extends MIDlet implements CommandListener {
    public void startApp() {
    try {
    Form form = new Form("WebService Client");
    int res = new MultiplyWSClient().multiply(2, 2);
    String text = "2 * 2 = " + res;
    form.append(text);
    Command exitCmd = new Command("Wyjscie", Command.EXIT, 0);
    form.addCommand(exitCmd);
    form.setCommandListener(this);
    Display display = Display.getDisplay(this);
    display.setCurrent(form);

    } catch (IOException ex) {
    ex.printStackTrace();
    }
    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {}

    public void commandAction(Command c, Displayable d) {
    notifyDestroyed();
    }
    }
    I koniec! Jeśli wszystko wykonaliśmy poprawnie powinniśmy po odpaleniu emulatora otrzymać taki wynik:
    Wszystko działa:) Testy na komórkach bez obsługi JSR-172 także wypadły pomyślnie!
    Dziękuje bardzo Karolowi za pomoc!!

    ps. dodam jeszcze, że całość została napisana na podstawie tutoriala: End-to-End Web Service Tutorial: Mobile Dilbert Application.

    by lukas.stachowiak@gmail.com (WooKasZ) at December 02, 2008 07:07 PM

    November 30, 2008

    Łukasz Stachowiak

    Wicket na Poznań Java User Group.

    W poniedziałek 8 grudnia odbędzie się kolejne spotkanie Poznań Java User Group. Na nim Pan Stanisław Osiński opowie nam o Wicket, czyli frameworku do tworzenia aplikacji webowych. Sam nie mam żadnego doświadczenia z tą biblioteką, więc mam nadzieję, że wykład będzie od podstaw :)
    Miejsce to nowe centrum spotkań JUGowych - Cognifide na ulicy Aleje Niepodległości 4. Godzina prawdopodobnie 18:00.

    Zapraszam !

    by lukas.stachowiak@gmail.com (WooKasZ) at November 30, 2008 09:38 PM

    Filtrowanie i sortowanie danych w OpenBaseMovil-db

    Praca inżynierska wymaga ode mnie wykonania tych operacji w OpenBaseMovil-db no to przy okazji opiszę jak to się robi ;-)

    Sortowanie
    To będzie proste :)
    Najpierw musimy pobrać jakiś zbiór danych, a następnie wykonań na nim metodę sort gdzie parametrami są:
    String fieldName - kolumna po której sortujemy
    int mode - rosnąco czy malejąco (RowSet.DESCENDING/RowSet.ASCENDING) - wartość domyślna to rosnąco.
    Przykład:
    RowSet firmy = Firmy.findAll();
    firmy.sort("nazwa", RowSet.DESCENDING);
    I to wszystko:) Przeglądając zbiór firmy będą one uszeregowane malejąco wg kolumny nazwa.

    Filtrowanie
    OpenBaseMovil-db ma niestety sporą wadę, nie można wyszukiwać danych które zawierają jakiś fragment tekstu (wyjątek - dana wartość zaczyna się od podanej sekwencji) dlatego zmuszeni jesteśmy do tworzenia własnych filtrów danych.
    Aby tego dokonać musimy poprzez metodę RowSet.applyFilter przekazać obiekt implementujący interfejs RowFilter. Interfejs ten wymusza implementację metody matches(Row row) która zwraca wartość boolowską w zależności czy dany rekord ma zostać dołączony do wyniku czy nie.
    Następnie możemy wykonać jedną z dwu operacji:
    - RowSet.clearFilter() - aby anulować filtr i odzyskać początkowy zbiór
    - RowSet.packFilter() - aby odrzucić wszystkie rekordy nie pasujące i dalej np. móc zastosować inny filtr.
    Przykład:
    RowSet set = stocks.findAll();
    set.applyFilter(new RowFilter() {
    public boolean matches(Row row) {
    return row.getString("name").indexOf(name) == -1 ? false : true;
    }
    });
    set.packFilter();
    Wracam do pisania.... ;-)

    by lukas.stachowiak@gmail.com (WooKasZ) at November 30, 2008 06:43 PM

    November 24, 2008

    Przemysław Kaczmarek

    IT Academic Day 2008 - Politechnika Poznańska

    Jak co roku na Politechnice Poznańskiej odbędzie się konferencja IT Academic Day organizowana przez studenckie koło naukowe - grupę .NET działającą na Politechnice Poznańskiej, przy współpracy firmy Microsoft. Tym razem mam przyjemność zaprosić wszystkich jako organizator wraz z Marcinem Mikołajczakiem. Konferencja odbędzie się 4 grudnia 2008 roku (czwartek) już za niecałe dwa tygodnie. Kilka dni temu ustaliliśmy oficjalną wersję agendy, która zamieszczam poniżej.

    IT AD 2008

    Jest to niepowtarzalna okazja aby na żywo spotkać najlepszych specjalistów z dziedziny IT. To największa taka lokalna konferencja, na której wystąpią między innymi: Karol Wituszyński, który przedstawi wszystkie programy akademickie Microsoftu, oraz opowie o konkursie Imagine Cup. Następnie Mariusz Jarzębowski zaprezentuje historię wstążki czyli innowacyjne podejście do projektowania aplikacji. O tworzeniu aplikacji opartych na ASP.NET framework zgodnie z wzorcem MVC (Model - View - Controller) opowie Dariusz Tarczyński z CafeNews. Prelegentem będzie również Peter Budkowski, który opowie o karierze w Microsoft Irlandia oraz o Smart Cards. Będzie również okazja dowiedzieć się jak bez oprogramowania antywirusowego można usuwać wirusy w systemie Windows. Natomiast na sam koniec Piotr Zawadzki opowie o architekturze systemów Microsoft Windows Server.

    Dla wszystkich zarejestrowanych uczestników przewidziane zostały drobne upominki, a dla najaktywniejszych osób – cenne nagrody. Zarejestruj się już teraz na Codeguru.pl. Wstęp na konferencje jest bezpłatny.

    Szczegóły dotyczące agendy, procesu rejestracji oraz samej konferencji znajdziesz pod adresem www.itacademicday2008.studentlive.pl

    W imieniu Marcina jak i moim serdecznie zapraszamy!

    by soczek at November 24, 2008 03:26 PM

    November 21, 2008

    Dawid Morzyński

    IT Academic Day 2008 @ Politechnika Poznańska

    Czy pamiętacie zeszłoroczny IT Academic Day na Politechnice Poznańskiej? Tak, to już niemal dwanaście miesięcy minęło od tego czasu. W tym roku dokładnie tego samego dnia – 4. grudnia – odbędzie się kolejna edycja akademickiej konferencji MSu. Niestety nie mogłem zdradzić wcześniej kto będzie prelegentem podczas tej edycji konferencji, ale od dzisiaj agenda jest już zamknięta i możecie się już rejestrować na to wydarzenie tutaj.

    Na samym początku Karol Wituszyński opowie o różnorakich programach akademickich Microsoft. Karol opowie też o nowym programie dla startujących firm - BizSpark. Kolejna prezentacja to historia pewnej wstążki opowiedziana przez Mariusza Jarzębowskiego. Warto zaznaczyć, że będzie to prezentacja, którą mieli okazję obejrzeć uczestnicy tegorocznej konferencji MTS. Model, widok, kontroler – czyli dość popularne podejście do projektowania aplikacji webowych. O MVC w ASP.NET opowie Dariusz Tarczyński. O Smart Cards w Windows i karierze w Microsoft Irlandia opowie Peter Budkowski. Stereotypy związane z wirusami i Windows będzie obalał Robert Kapuściński. Na sam koniec pozostaje Piotr Zawadzki, który opowie o architekturze Windows Server.

    IT Academic Day 2009 - plakat

    Podczas konferencji będzie okazja do rejestracji w konkursie Imagine Cup 2009. Organizatorzy przewidzieli też (podobno) wiele nagród i dodatkowych niespodzianek.

    Zapraszam tym bardziej, że już po raz drugi będę miał przyjemność poprowadzić tę konferencję.

    Update: strona konferencji jest już dostępna tutaj.

    by dmk at November 21, 2008 10:43 PM

    November 19, 2008

    Wojciech Smolak

    Wyprawa w Karkonosze

    Poniżej mapka z wyprawy w Karkonosze: Zdjęcia z wyprawy

    by admin at November 19, 2008 09:02 PM

    Łukasz Stachowiak

    Jak sprawdzić czy baza danych istnieje w OpenBaseMovil-db

    Po kilku dniach pracy z OpenBaseMovil-db natknąłem się na problem. Otóż operacja:
    Database db = Database.connect(DATABASE_NAME);
    jeśli baza danych nie istnieje to ją automatycznie utworzy. Lepsze to niż rzucać wyjątkiem ;-) No ale gdy później zaczynamy operować na tabelach które nie istnieją to wyjątek już się pojawia... Trzeba znaleźć sposób jak sprawdzić tabele zostały już utworzone podczas łączenia z bazą. Rozwiązanie odnalazło się na forum OpenBaseMovil. Sposobem na to jest jest wersjonowanie bazy przy użyciu metod Database.getVersionMajor() oraz Database.setVersionMajor().
    Już spieszę z przykładem:
    public Database createDb() {
    Database dbh = null;
    try {
    dbh = Database.connect(DATABASE_NAME);
    // 0 - tabele jeszcze nie istnieją
    if (dbh.getVersionMajor() == 0) {
    dbh.drop();
    dbh = Database.create(DATABASE_NAME);
    // tworzenie tabel
    createTables(dbh);
    // 1 - tabele utworzone
    dbh.setVersionMajor((short) 1);
    }
    } catch (Exception e) {
    dbh = null;
    }
    return dbh;
    }
    I problem rozwiązany :)

    ps. wersja finalna NetBeans 6.5 dostępna tutaj :)

    EDIT:
    Metoda ostatecznie nie działała jak powinna, poprawiłem - teraz jest ok :)

    by lukas.stachowiak@gmail.com (WooKasZ) at November 19, 2008 07:53 PM

    November 18, 2008

    Łukasz Stachowiak

    Eclipse DemoCamp już za tydzień!

    Dziwna sprawa, dopiero teraz dowiedziałem się, że za tydzień w poniedziałek (24 listopada) odbędzie się kolejny w tym roku Eclipse DemoCamp w Poznaniu! Oczywiście już poprosiłem o dopisanie mnie do listy uczestników. Co prawda Eclipsa nie używam za często ale na takie niezwykle ciekawe spotkanie muszę się wybrać.
    Pisząc niezwykle ciekawe wcale nie przesadzam, ponieważ zaproszono specjalnego gościa prosto z Kanady! Wassim Melhem - lider technicznego zespołu tworzącego Eclipse Plug-in Development Environment przyleci specjalnie do Poznania by opowiedzieć nam o swoich doświadczeniach z Eclipsem. Ponadto wystąpi też Dawid Weiss z PP (po Jego ostatnim wykładzie na PJUG już wiem, że będzie ciekawie;) oraz Bartosz Michalik z Eclipse Support Center.
    Organizatorzy tak jak ostatnim razem organizują tzw lighting talks - czyli: chcesz opowiedzieć o swoich doświadczeniach z Eclipse ? Wstajesz i mówisz:)
    Nie obędzie się też bez gratisowego piwka oraz pizzy :) (to myślę wszystkich przekona, żeby przyjść:P).

    Zarejestrować się można tutaj.
    A przybyć trzeba do klubu Piwnica 21 na ulicy Wielkiej 21 na godzinę 18:00 - czyli tak jak ostatnio.
    Dla niewiedzących mapka:

    Wyświetl większą mapę

    ZAPRASZAM !

    by lukas.stachowiak@gmail.com (WooKasZ) at November 18, 2008 10:15 PM

    Dawid Morzyński

    Muzyka relaksacyjna..

    Chciałem posłuchać.. z radia internetowego... tylko tyle.....

    Out of memory

    by dmk at November 18, 2008 09:12 AM

    November 17, 2008

    Dawid Morzyński

    Win+D, Win+M.. ale to ciągle nie to

    Z blogu technicznego z powodu braku czasu robią się moje "odkrycia" w dziedzinie narzędzi do poprawiania Windowsa. Miała być też recenzja Windows 7… kilka tekstów leży w notatniku, kilka ma tylko tytuł. No ale taki nasz los. Tak czy inaczej obiecuję się od grudnia poprawić i zająć bardziej technicznymi sprawami (oj, a mam dużo ciekawych technologii głównie z platformy .NET do opisania), a teraz pozwolę sobie na kolejny "ulepszacz" mojego środowiska pracy.

    Otóż często muszę sięgnąć na pulpit a to po plik, a to jakiś skrót tam zostawiłem na lepsze czasy itp. Windows+D działa dość fajnie, oprócz tego że ukrywa sidebara (z którego często korzystam), a po drugie gdy uruchomi się jakieś okienko z pulpitu zapomina o wcześniej otwartych oknach i zostają one zminimalizowane. Windows+M – jeszcze gorzej. Po prostu minimalizuje wszystkie otwarte okna. Idealnym rozwiązaniem byłoby, gdyby można było nacisnąć kombinację klawiszy, zobaczyć pulpit, otworzyć co potrzeba i przywrócić wcześniej otwarte okna. Niemożliwe? Możliwe. Z tym małym projekcikiem, który wykorzystuje do swojego działania AutoHotKey (swoją drogą to, co można zrobić w tym środowisku można śmiało nazwać cudami) działa idealnie. Jedyny problem to jak przypisać rozsądny skrót do tej aplikacji. Ja umieściłem go na pasku szybkiego uruchamiania i w Viście mam go pod skrótem Windows+1.

    PS Nie wymaga instalacji, nie zostawia po sobie śmieci – po prostu działa.

    Update: Kuba udowodnił mi, że nie potrzebuję do tego żadnego dodatkowego oprogramowania. Tak jak napisał w swoim komentarzu - Windows+M do minimalizacji, a Shift+Windows+M do przywrócenia wcześniej otwartych okien (ważna jest kolejność!). Działa dokładnie tak samo, jak opisany program.

    by dmk at November 17, 2008 09:15 PM

    Jakub Krajniak

    zasadny, regulaminy, pierdoły, zbiornik

    Krzywiznę ogórka potrafią uregulować (podobno znieśli), kolor skórki pomidorów. Nawet przykazać aby student na wykłady chodził (jeden z bardziej zabawnych punktów w regulaminie na PUT). Zapisać, że prace inżynierskie/magisterskie mają być pisane w TeX to już nie bardzo. Potem...

    November 17, 2008 08:36 PM

    November 15, 2008

    Łukasz Stachowiak

    OpenBaseMovil-db czyli baza danych na komórki !

    Czasu ostatnio mało... nie, ja zawsze cierpię na brak czasu! No ale nic z tym nie mogę zrobić. Szkoła, praca, praca inżynierska i na dodatek zapisałem się na kurs przygotowujący do certyfikatu z DB2 - DB2 9 Family Fundamentals. Baza danych dość ciekawa. Po wykonaniu pierwszych ćwiczeń znam więcej poleceń z konsoli niż z reszty baz danych jakie używałem łącznie. No ale nie o tym miałem pisać...

    Wracamy do tematyki J2ME! Skoro wiemy już jak zapisywać dane w RMS i wiemy, że jest to bardzo niewygodne trzeba użyć czegoś z "jajami"!
    OpenBaseMovil to właśnie taki framework. Jego część nazywająca się OpenBaseMovil-db to nic innego jak baza danych na urządzenia mobilne. Co prawda nie możemy używać SQLa i innych fajerwerków z nim związanych ale to nic! I tak użycie tej biblioteki w OGROMNYM stopniu ułatwi nam zarządzanie danymi w aplikacjach.

    OpenBaseMovil-db jest relacyjną bazą danych napisaną w Javie na urządzenia obsługujące Jave (Java ME). Twórcy zadbali o to by była obsługiwana przez wszystkie urządzenia niezależnie od modelu czy wersji oprogramowania (przynajmniej tak jest napisane w dokumentacji;P). Wielkość bazy danych, tabeli, wiersza jest ograniczona tylko poprzez wielkość dostępnej pamięci.

    Zacznijmy od bibliotek które są wymagane w classpath projektu. Oto lista:

    Trochę ich sporo ale funkcjonalność nam to wynagradza:)

    No to już możemy przejść do tworzenia bazy:
    Database db = Database.create("TestDB");
    db.start();
    To chyba nie trzeba wyjaśnień.
    Aby dodać przykładową tabelę z polami np id oraz imię wykonujemy polecenie
    Table newTable = new Table("Names");

    newTable.addColumn("id", Constants.FT_INT);
    newTable.addColumn("name", Constants.FT_STRING, 20); // 20 oznacza długość pola
    // tworzymy indeks na polu id
    newTable.createIndex("main_index", "id");

    db.createTable(newTable);

    Co do nazwy tabeli to należy pamiętać, że musi być ona niepowtarzalna w obrębie wszystkich baz danych. Dość spore ograniczenie ale kto będzie miał w aplikacji na komórce wiele baz danych?!

    Aby dodać jakiś wiersz należy utworzyć obiekt typu Row z odpowiedniej tabeli:
    Row row = newTable.createRow();
    row.setField("id", new Integer(1)); // można także row.setField("id", "1");
    row.setField("name", "Duke");
    row.save(); // Można także newTable.save(row);
    No i mamy dane w bazie:)

    Wyszukiwanie i przegląd tego co się znalazło wykonuje się następująco:
    RowSet rows = newTable.find("id", new Integer(1));
    while (rows.next()) {
    System.out.println( rows.getCurrent().getString("name") );
    }
    Tyle chciałem przedstawić jako szybki i praktyczny wstęp do biblioteki. Oczywiście to nie wszystko! Zachęcam do przeczytania OpenBaseMovil-db-DeveloperGuide-3.0.02.pdf oraz do zaglądania tutaj bo z pewnością to nie pierwszy wpis na ten temat ;-)
    No to wracam do pisania inżynierki...

    by lukas.stachowiak@gmail.com (WooKasZ) at November 15, 2008 10:44 AM

    November 11, 2008

    Dawid Morzyński

    Nowy rozdział

    Są takie momenty w życiu, które warto uwiecznić – w każdy sposób, żeby później móc do nich wrócić i przeżyć raz jeszcze.

    Dzisiaj rozpoczął się nowy rozdział w życiu mojej przyszłej żony oraz moim. Oficjalnie zaręczyliśmy się 11.11.2008 roku. I niech to pozostanie w naszej pamięci.

    PS Bo wspomnienia, to najważniejsze co nam zostaje.

    by dmk at November 11, 2008 11:54 PM

    November 09, 2008

    Łukasz Stachowiak

    CentrumPaliw.pl


    Chciałbym zapoczątkować drobny czyn społeczny u każdego z Was. Pomoże oszczędzić trochę $$ kierowcom. Polecam serwis CentrumPaliw.pl i zachęcam do wprowadzania do niego cen. Zajmuje to dosłownie moment a może pomóc w wyborze miejsca następnego tankowania. Serwis już trochę czasu funkcjonuje, posiada w bazie ponad 3400 stacji w całej Polsce. Kuleje trochę rejon Poznania który obserwuję. Serwis cierpi z powodu słabego rozreklamowania co chciałbym naprawić.
    W niedługim czasie ma się pojawić wersja na urządzenia mobilne, umożliwi to wyszukanie najtańszej stacji prosto z komórki.

    Podawajcie linka dalej!! ;-)

    by lukas.stachowiak@gmail.com (WooKasZ) at November 09, 2008 08:37 PM

    Jakub Krajniak

    Brawo i takie tam..

    wreszcie coś sensownego w tym temacie

    November 09, 2008 07:09 PM

    Dawid Morzyński

    UAC – zróbmy go lepszym

    Jestem jednym z tych, którzy uważają, że UAC w Windows Vista to jedno z lepszych rozwiązań. Na co dzień pracuję na koncie administratora i lubię wiedzieć, kiedy jakaś aplikacja przechodzi w stan wyższych uprawnień (coś się instaluje, jakaś istotna część systemu się zmienia itp.). Dlatego UAC nie wyłączam zaraz po instalacji jak wielu moich znajomych.

    Istnieje jednak pewna cecha UAC, a raczej realizacji graficznej tej technologii, która również mnie irytowała. Przyciemnianie ekranu i pokazywanie okienka jest bardzo dobrym pomysłem, jednak nie do końca działa to jak powinno. Okienko UAC oraz "wygaszony" ekran jest uruchamiany ze specjalnymi poświadczeniami (tak wynika z tego, do czego się dokopałem), przez co uruchamiane jest niejako "poza DWM" - idea jest taka, aby żadna inna aplikacja nie mogła podpiąć się do tych okien i wymusić np. automatyczne kliknięcie Continue – wtedy UAC mógłby stracić sens sens. Powoduje to, że nie ma ono np. ramki w stylu Aero pomimo, że Aero jest włączone. Zdarza się, że ekran robi się czarny i zostaje sam kursor, a dopiero najechanie na jakiś element graficzny okienka (przycisk itp.) przywołuje je z powrotem. Jest to szczególnie uciążliwe w momencie, gdy nie wiemy w której części ekranu uruchomiło się okienko i musimy go szukać kursorem po całym pulpicie (nie wspomnę o posiadaniu dwóch i więcej monitorów). Podobnie uruchamiany jest między innymi CardSpace – również na tzw. "bezpiecznym pulpicie". Opis jak można zrezygnować z "wygaszania" dostępny jest chociażby tutaj.

    Powstaje więc dylemat, czy wyłączyć "wygaszanie" ekranu na czas operacji UAC i teoretycznie zmniejszyć jego odporność na niebezpieczne akcje "z zewnątrz", czy zostać przy dobrej koncepcji, ale gorszej realizacji z włączonym "wygaszaniem".

    PS Następny post to będzie moja mała recenzja Windows 7 – tam UAC mocno ograniczono, zrezygnowano z wygaszania ekranu, ale trudno powiedzieć jaka jest finalna strategia w tej działce – to nawet nie jest ogólnodostępne wydanie systemu.

    PS2 Szkoda, że UACblog umarł...

    by dmk at November 09, 2008 01:09 PM

    November 08, 2008

    Traum

    Bass.dll

    Od jakiegoś czasu szukałem czegoś co pomogłoby mi odtwarzać muzykę w C#, tak żebym miał bezpośredni dostęp do odtwarzanego streamu. Ostatnio natknąłem się na bibliotekę bass.dll. Na oficjalnej stronie http://www.un4seen.com/ można poczytać o możliwościach tej malutkiej biblioteki. Za pomocą bass.dll możemy między innymi: odtwarzać pliki mp3/oog/wav/aiff/mp2/mp1/xm/mod, mieć dostęp do odtwarzanych danych, odtwarzać wiele strumieni jednocześnie, korzystać z efektów DirectX, tworzyć własne [...]

    by Szymon at November 08, 2008 04:01 PM

    November 04, 2008

    Łukasz Stachowiak

    LINQ w Javie ??

    W Berlinie na spotkaniu grupy Object Database Technology Working Group padła propozycja aby dodać LINQ do języka Java jako standardowe API zapytań. Na spotkaniu najpierw porównano LINQ z konkurencyjnym rozwiązaniem SBQL i to LINQ wygrało pojedynek i być może zostanie wzięte pod lupę przez JCP i trafi do języka Java. Oczywiście będzie konieczna zmiana nazwy i zapewne kilka innych zmian ponieważ LINQ jest zastrzeżoną nazwą firmy Microsoft.

    Co z tego będzie - nie wiem. Nie znam się na LINQ ale Java ma już swoje EJBQL i może lepiej byłoby rozbudować ten język zapytań niż dodawać kolejny klocek do Javy ? Będę czekał na nowe wiadomości w sieci na ten temat.

    Link: LINQ is the best option for a future Java query API - ODBMS Industry Watch.

    by lukas.stachowiak@gmail.com (WooKasZ) at November 04, 2008 11:32 PM

    Przemysław Kaczmarek

    Konferencja VORT-EX 08

    Już za niecały miesiąc odbędzie się pierwsza w Polsce wirtualna konferencja VORT-EX 08, w której moim zdaniem warto uczestniczyć. Chociażby dla samej ciekawości jak wypali tak duża konferencja online… Szczegóły poniżej.

    VORT-EX 08

    Nieźle zakręcona konferencja!

    Zostań uczestnikiem pierwszej w naszym kraju wirtualnej konferencji omawiającej najnowsze trendy i technologie na rynku WWW. To jedyna w swoim rodzaju okazja do zdobycia praktycznej wiedzy o skutecznym projektowaniu i programowaniu serwisów internetowych. Mamy zamiar Cię zainspirować.

    2 dni, 3 ścieżki tematyczne, ponad 20 ekspertów – wszystko to bezpłatnie dostępne dosłownie na wyciągnięcie ręki. Całe wydarzenie transmitowane będzie na żywo za pośrednictwem strony http://www.vort-ex.com.

    Zarejestruj się i zarezerwuj swój czas już dziś:

    Dzień 1 – 18. listopada (wtorek) w godzinach 14:00-19:00

    Dzień 2 – 19. listopada (środa) w godzinach 14:00-18:00

    Wciąż zastanawiasz się, czy będzie warto? Na portalu konferencji możesz już teraz zapoznać się ze szczegółową agendą wydarzenia. Przygotowaliśmy również upominki: każdy z uczestników otrzyma za darmo możliwość pobrania Windows Server 2008 Web Edition!

    Spotkajmy się na www.vort-ex.com !

    by soczek at November 04, 2008 01:26 PM

    November 03, 2008

    Wojciech Smolak

    Automatyczny odkurzacz

    Przedstawiam kolejny program, który powstał na zaliczenie przedmiotu Modele Systemów Dyskretnych. Tym razem symulator dwuwymiarowej Maszyny Turinga. Program działa na 15-elementowym alfabecie wejściowym (0-9, A-E) oraz symbol F, który oznacza brzeg taśmy. Dołączona definicja maszyny działa jak odkurzacz. Głowica objeżdża wszystkie pola aż do wyzerowania każdego elementu taśmy. Definicja maszyny zawiera wiele błędów, poprawnie działa w [...]

    by admin at November 03, 2008 10:49 PM

    Jakub Krajniak

    8$ dla każdego

    przeciętnie na każdy głos oba sztaby przeznaczyły po 8$ najdroższe wybory w historii USA "Obama korzystny dla Polski" Według informacji Federalnej Komisji Wyborczej Barack Obama zebrał do końca października 2008 roku 639 mln. USD. Wsparcie ze strony korporacji oraz uczelni: (Barack...

    November 03, 2008 10:29 PM