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


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();ButtonButton 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.// tworzenie przyciskówGdy 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.
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);
by lukas.stachowiak@gmail.com (WooKasZ) at May 09, 2009 10:43 AM
by lukas.stachowiak@gmail.com (WooKasZ) at May 03, 2009 09:55 AM
<?xml version=”1.0” encoding=”utf-8”?>
<response value=”[odpowiedz]”>
<params>
<[klucz] value=”[wartość]”/>
<!-- inne parametry takiej postaci -->
</params>
</response>
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;
}
}
// 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);
String xmlMsg = "[wiadomosc]";
InputStream streamXml = new ByteArrayInputStream(xmlMsg.getBytes()); // utworzenie strumienia bajtów z wiadomości
reader.parse(new InputSource(streamXml)); // parsowanie
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
SAXParser parser = saxFactory.newSAXParser();
SAXMessageHandler xmlHandler = new SAXMessageHandler();
parser.parse(new InputSource(streamXml), xmlHandler);
by lukas.stachowiak@gmail.com (WooKasZ) at May 01, 2009 09:29 AM
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):
Installation in Linux:
$ svn checkout svn://svn.berlios.de/openocd/trunk
$ ./bootstrap $ ./configure --enable-ft2232_libftdi $ make
# modprobe ftdi_sio vendor=0x403 product=0xbdc8
Photos:

Programmer closeup

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

by lukas.stachowiak@gmail.com (WooKasZ) at March 15, 2009 10:30 AM
make
insmod lenovo-sl-laptop.ko
#!/bin/bash
insmod sciezka_do_katalogu_z_modulem/lenovo-sl-laptop.ko
chmod +x [nazwa skryptu]
update-rc.d nazwa_skryptu defaults
by lukas.stachowiak@gmail.com (WooKasZ) at March 03, 2009 10:25 AM

by lukas.stachowiak@gmail.com (WooKasZ) at March 02, 2009 04:41 PM
MIDlet-Data-Size: 3000
MIDlet-Persistent-Data-URL-1: data.rms overwrite encryptLocally
MIDlet-Persistent-Data-URL-2: http://vendor.com/gamedata/coolgame.rms
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
by lukas.stachowiak@gmail.com (WooKasZ) at February 04, 2009 07:52 PM
by lukas.stachowiak@gmail.com (WooKasZ) at February 03, 2009 08:17 PM
by lukas.stachowiak@gmail.com (WooKasZ) at January 27, 2009 10:50 AM
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.
<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>
package com.wookasz.blogspot.jsfmultivalidator;Mam nadzięję, że komentarze w kodzie wystarczą by wyjaśnić sprawę ;-)
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"));
}
}
}
<validator>
<validator-id>passwordValidator</validator-id>
<validator-class>
com.wookasz.blogspot.jsfmultivalidator.PasswordValidator
</validator-class>
</validator>

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

by lukas.stachowiak@gmail.com (WooKasZ) at January 24, 2009 12:59 PM
by lukas.stachowiak@gmail.com (WooKasZ) at January 23, 2009 08:23 AM
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 lukas.stachowiak@gmail.com (WooKasZ) at January 22, 2009 11:54 AM
by lukas.stachowiak@gmail.com (WooKasZ) at January 12, 2009 11:40 AM
by lukas.stachowiak@gmail.com (WooKasZ) at January 09, 2009 01:18 PM
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) {}
}
Resources r = Resources.open(THEME_FILE);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].
UIManager.getInstance().setThemeProps(r.getTheme(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(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.
CommonTransitions.createSlide(CommonTransitions.SLIDE_HORIZONTAL,
false, 1000));
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.
by lukas.stachowiak@gmail.com (WooKasZ) at January 08, 2009 11:07 PM
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 ^^by lukas.stachowiak@gmail.com (WooKasZ) at January 06, 2009 08:38 PM
<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.
<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>
InitialContext ictx = new InitialContext();
Context envCtx = (Context) ictx.lookup("java:comp/env");
entityManager = (EntityManager) envCtx.lookup("persistence/[nazwa]");
by lukas.stachowiak@gmail.com (WooKasZ) at January 01, 2009 09:14 PM
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
by lukas.stachowiak@gmail.com (WooKasZ) at December 14, 2008 12:07 AM
<h:panelGrid columns="2">I to wygeneruje taki kod HTML:
<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>
<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>
by lukas.stachowiak@gmail.com (WooKasZ) at December 11, 2008 10:50 PM
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.
Już jest…
…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...
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 lukas.stachowiak@gmail.com (WooKasZ) at December 04, 2008 11:01 AM
--laf [klasa L&F]


--laf [klasa z L&F] -cp:p [ścieżka do JARa]
by lukas.stachowiak@gmail.com (WooKasZ) at December 04, 2008 07:51 AM
package com.blogspot.wookasz.j2mecwsclient;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.
import javax.ejb.Stateless;
import javax.jws.WebService;
@Stateless
@WebService
public class MultiplyingWS {
public int multiply(int a, int b) {
return a * b;
}
}
package com.blogspot.wookasz.j2mewsclient;I koniec! Jeśli wszystko wykonaliśmy poprawnie powinniśmy po odpaleniu emulatora otrzymać taki wynik:
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();
}
}
by lukas.stachowiak@gmail.com (WooKasZ) at December 02, 2008 07:07 PM
by lukas.stachowiak@gmail.com (WooKasZ) at November 30, 2008 09:38 PM
RowSet firmy = Firmy.findAll();I to wszystko:) Przeglądając zbiór firmy będą one uszeregowane malejąco wg kolumny nazwa.
firmy.sort("nazwa", RowSet.DESCENDING);
RowSet set = stocks.findAll();Wracam do pisania.... ;-)
set.applyFilter(new RowFilter() {
public boolean matches(Row row) {
return row.getString("name").indexOf(name) == -1 ? false : true;
}
});
set.packFilter();
by lukas.stachowiak@gmail.com (WooKasZ) at November 30, 2008 06:43 PM
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.
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!
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.

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.
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().
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 :)by lukas.stachowiak@gmail.com (WooKasZ) at November 19, 2008 07:53 PM
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ć.by lukas.stachowiak@gmail.com (WooKasZ) at November 18, 2008 10:15 PM
Chciałem posłuchać.. z radia internetowego... tylko tyle.....
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.
Database db = Database.create("TestDB");
db.start(); To chyba nie trzeba wyjaśnień.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);Row row = newTable.createRow();No i mamy dane w bazie:)
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);
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 ;-)by lukas.stachowiak@gmail.com (WooKasZ) at November 15, 2008 10:44 AM
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 lukas.stachowiak@gmail.com (WooKasZ) at November 09, 2008 08:37 PM
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 lukas.stachowiak@gmail.com (WooKasZ) at November 04, 2008 11:32 PM
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.

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 !