niedziela, 30 listopada 2008

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 !

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.... ;-)

środa, 19 listopada 2008

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 :)

wtorek, 18 listopada 2008

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 !

sobota, 15 listopada 2008

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...

niedziela, 9 listopada 2008

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!! ;-)

środa, 5 listopada 2008

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.

poniedziałek, 3 listopada 2008

Map reduce, Hadoop oraz co nowego w Java 1.6 update 10 na Poznań JUG

Już za dwa dni kolejne spotkanie JUG Poznań. Tym razem dowiemy się czegoś o tym jak przetwarzać ogromne ilości danych w teorii i praktyce. Opowie nam o tym Pan Dawid Weiss pracujący na Politechnice Poznańskiej. Przed samą prezentacją czeka nas jeszcze krótkie (ok. 15min.) wystąpienie Pana Tomasza Parkoły (PCSS) który opowie co nowego w Java 1.6 update 10.

Spotkanie odbędzie się 5 listopada (środa) o godzinie 18:00 w siedzibie Cognifide ul. Aleje Wielkopolskie 4.
Więcej szczegółów na stronie Poznań JUG.
Zapraszam!

niedziela, 2 listopada 2008

No more Zend Studio.... NetBeans incoming !

Od kilku dni testuję NetBeans w kobinacji z PHP. Przeniosłem do niego mój projekt z pracy. Wcześniej korzystałem z Zend Studio 5.5 którego mam już serdecznie dość! Wersja 6.0 zrobiona na Eclipsie mnie nie przekonała, jakoś nie mogłem się w niej odnaleźć, zwłaszcza korzystając z SVN. No a że w moim ulubionym środowisku ukazała się funkcjonalność której poszukiwałem no to nie mogłem sobie odmówić przyjemności testowania.
Krótko wypisałem zalety i wady który przez te kilka dni zauważyłem.

Zalety:
- todo list (jednak boję się na nią zaglądać, bo ciągle rośnie a nie maleje).
- filtry w todo list - świetne! Bardzo się przydają:)
- wstawianie elementów HTML z palety komponentów
- wskazuje zmiany w pliku jeśli korzystamy z systemu do wersjonowania już w trakcie edycji kodu
- znajduje błędy w HTMLu
- NetBeans jakoś wygląda ;P
- nie muszę się przełączać na inne środowisko żeby pisać coś w Javie
- możliwość pisania samemu wtyczek
- trochę bardziej inteligentne auto uzupełnianie. Np. gdy auto uzupełniałem __construct() automatycznie zostałem przeniesiony do nowej linii, dodane zostały klamry a także znak ; za pozycją kursora. Inne: gdy dane wyrażenie pasuje tylko do jednej metody/zmiennej to automatycznie jest wstawiane, nie trzeba wybierać z jedno elementowej listy
- ładniejsze czcionki i kolorowanie składni (wiem, że to można zmieniać ale leniwy jestem :P)
- podpowiadanie składni czasami pokazuje funkcje jakby były przeciążane. Dzieje się tak gdy parametry funkcji mogą przyjąć wartość domyślną.
- wsparcie dla javascript - nareszcie !!
- dedukcja typu zmienne na podstawie phpdoca (to akurat też miał ZF ale bez tego jak bez ręki)
- nowość w 6.5 RC1 - Quick Search oczywiście także obsługuje źródła PHP

Wady:
- wydajność todo list. Mogłoby być jakieś cachowanie a nie co uruchomienie NetBeans sprawdza cały projekt. Mam kilka set plików w projekcie i trochę to trwa (na szczęście zawsze hibernuję komputer, więc tego nie odczuwam za bardzo)
- usunięcie pliku z projektu = usunięcie pliku z SVN. Nie podoba mi się to z tego względu, że trzymam kilka plików które służą mi do testów a nie należą bezpośrednio do projektu. Można to obejść przez 'ignore' dla pliku ale dla plików już istniejących trzeba chwilę poklikać.
- nie ma wsparcia dla phpdoc ? Nie znalazłem jak dotąd
- chyba coś nie działają bookmarki ;/
- no i największy minus - cała zakładka refactor nie działa dla plików PHP;/ Mam nadzieje, że to zostanie dodane w wersji finalnej, bo bez tego nie można po prostu żyć;/

Ogólnie patrząc to zalety odnoszą się do całego IDE NetBeans a nie tylko do obsługi PHP :P No ale brakowało mi kilku tych funkcji w zendzie. Oczywiście, już nie wrócę do niego (chyba, że kolejne podejście do wersji Eclipsowej mnie przekona do siebie), nie mogę już na niego patrzeć. Na tę chwilę najbardziej mi brakuje tego refaktoringu kodu;/ Ta opcja jest dla mnie najważniejsza i musi się pojawić w wersji finalnej.

NetBeans <3