db4o

Bez kategorii Komentarze (0) »

Parę dnie temu przypadła moja kolej na zaprezentowanie tematu na seminarium. Wybrałem obiektową bazę db4o. Trafiłem na nią czytając javaExpress i zainteresowała mnie jej prostota :)

Poniżej prezentacja, niestety nie udało mi się (brak czasu) porównać jakiegoś większego zapytania z Hibernate’em. Jestem przekonany, że db4o spisałoby się lepiej ;)

Db4o

View more presentations from kedziorski.

Jak narazie planuje używać db4o jako storage’u w małych studenckich aplikacjach ale może jak poznam jej możliwości i ograniczenia pokuszę się o wykorzystanie jej w jakimś większym projekcie.

2-gi monitor i GWT Designer, SmartGWT

Bez kategorii Komentarze (0) »

W środę kurier przyniósł mi kolejnego 22 calowego Benq G2220HD. Zdecydowałem się na zakup tego samego modelu co poprzednio z 2 powodów. Po pierwsze jestem z niego bardzo zadowolony, a wiadomo że jak coś się dobrze sprawuje to nie ma potrzeby eksperymentować z innymi. Po drugie ze względów estetycznych - jednak lepiej wygadają 2 identyczne monitory niż każdy inny. Teraz mam do dyspozycji rozdzielczość 3840×1080px i myślę,  że już na tym pozostanę (w sensie nie kupie trzeciego jak planowałem na początku:P)

Od początku tygodnia mam przyjemność pracować z wtyczką GWTDesigner i muszę przyznać, że  sporo przyspiesza tworzenie aplikacji w GWT - wiadomo wszystkiego nie da się wyklikać ale do prostszych formatek dobrze mieć taką możliwość. Przy okazji ogarniania nowej wtyczki zacząłem też korzystać z biblioteki smartGWT (GWTDesigner ma również do niej wsparcie) - bardzo fajnie uzupełnia podstawowe widgety z GWT.

Javarsovia2010

Bez kategorii Komentarze (1) »

Wczorajszy dzień spędziłem w Warszawie na konferencji Javarsovia 2010. Tak jak w poprzednim roku do Wawy jechałem pociągiem co wymagało wczesnej pobudki i dało się we znaki na końcowych prelekcjach. W tym roku zebrałem nieco więcej kolegów niż w poprzednim. Ogólnie nasza grupa liczyła 5 osób + Majki odnaleziony w trakcje konferencji :) Ustawka miała miejsce na dworcu - ja, Robak i Łukasz jechaliśmy jednym pociągiem z Torunia , Bartek jechał z Poznania, a Michał jeszcze innym pociągiem z Siedlc. Wsiedliśmy w autobus i po około 25minutach byliśmy już na miejscu. Najpierw trzeba było wystać swoje w kolejce po materiały. Gdy już mieliśmy materiały poszliśmy do sali Double (świetny pomysł z tymi nazwami), gdzie zaczynało się właśnie powitanie uczestników, przypomnienie poprzednich edycji itp. Trzeba przyznać, że stawiła się masa koderów. Jestem pewny, że Javarsovia2010 przekroczy liczbę 500 uczestników. Sama organizacja konferencji tak jak w tamtym roku na najwyższym poziomie. Sale były na tyle spore, że bez większych problemów każdy miał miejsce. Firma cateringowa również spisała się świetnie - obiad był bardzo smaczny, od rana mieliśmy bułeczki, ciastka,soki no i oczywiście kawę :) Ok może teraz napisze coś o prezentacjach w których uczestniczyłem. O to moja ścieżka:

  • Jak zapobiegać biodegradacji kodu. Jakub Nabrdalik
  • Jak można zarobić na uczciwości, przejrzystości i szacunku dla klienta - kontrakty agile w praktyce. Wojciech Seliga
  • Refaktoryzacja kodu testowego. Piotr Jagielski
  • Software Craftsmanship - Język wzorców językiem profesjonalistów. Sławomir Sobótka
  • “Clean Tests” by Unkle Paul, czyli jak pisać testy, żeby dobrze Ci służyły. Paweł Lipiński

Jak zapobiegać biodegradacji kodu. - bardzo fajna prezentacja. Tu po raz pierwszy padło, że piszemy kod minimum 10 razy rzadziej niż go czytamy. Jakub pokazywał co zrobić żeby jakość kodu nie spadała wraz z upływem czasu. Co wyniosłem z prezentacji ? To że jak czytamy kod w którym musimy dokonać jakiś modyfikacji, lub też z niego skorzystać tworząc nowy moduł / funkcjonalność powinniśmy spojrzeć na niego również pod kątem refaktoryzacji - czasem wystarczy Extract Method, by kod stał się już sporo czytelniejszy.

Jak można zarobić na uczciwości, przejrzystości i szacunku dla klienta - kontrakty agile w praktyce. - kolejna ciekawa prezentacja. Wojtek opowiadał w zasadzie o tym jak prowadzone są kontrakty w jego firmie. Kontrakty agile polegają na zaufaniu klienta do firmy która ma zakodować dany soft. Są bardzo elastyczne - klient w każdym momencie może zmienić zdanie co do funkcjonalności, w każdym momencie może zrezygnować z dalszej współpracy. Co zyskuje zespół ? Mniejszy stres, brak problemu niedoszacowania ilości osobo godzin potrzebnych na dostarczenie produktu. Kiedy agile nie przejdzie ? W inwestycjach unijnych gdzie potrzebne są przetargi i z góry ustalona funkcjonalność. Ciężko tez będzie z dużymi korporacjami ze względu na ich wewnętrzną biurokracje.

Refaktoryzacja kodu testowego. - Testy powinny być użyteczne, aktualne i czytelne - wymagają, więc refaktoryzacji. Piotr zaprezentował kilka przykładów testów i “na żywo” je reaktoryzował. Z dość nieczytelnych stawały się przejrzyste. Zaprezentował również ciekawy sposób tworzenia obiektów za pomocą buildera. Bardzo ciekawa prezentacja.

Software Craftsmanship - Język wzorców językiem profesjonalistów. - prezentacja dotycząca wzorców projektowych. Sławek opowiedział czym jest profesja, pokazał przykłady łatwo rozszerzalnych klas prezentując kilka wzorców.

“Clean Tests” by Unkle Paul, czyli jak pisać testy, żeby dobrze Ci służyły. - ostatnia prezentacja na której byłem. Fajnie prowadzona :) Sporo wiedzy o testach. Co jest okej a co nie do końca - Paweł sporo korzystał z książki Clean Code gdzie również dało się znaleźć trochę informacji o wysokiej jakości testach.

Dlaczego nie byliśmy na ostatnim wykładzie ? Chcieliśmy zdążyć na wcześniejszy pociąg, niestety mimo zerwania się z wykładu pociąg nam uciekł :( Do następnego mieliśmy jakieś 2,5h więc poszliśmy na piwo (10zł za półlitrowego Żywca :O), potem na kebab (słaby był :(). Na sam koniec oczywiście pociąg był opóźniony +-25 minut. W pociągu przy piwku dyskutowaliśmy w zasadzie cały czas a to o tematach z konferencji a to innych programistycznych tematach. To tyle jeśli chodzi o moją relacje. Podsumowując Javarsovia2010 wyszła znakomicie - brawa dla organizatorów - na 100% spotykamy się w przyszłym roku.

javarsovia2010

reCAPTCHA na blogu

Bez kategorii Komentarze (0) »

Od dziś aby dodać komentarz do wpisu musicie wpisać tekst z obrazka. Wiem, że to okropnie denerwujące, ale dostaję tygodniowo około 20 maili z prośbą o sprawdzenie komentarza ze SPAMem. Wybrałem silnik reCAPTCHA bo jako bonusik pomagamy (a w zasadzie Wy pomagacie) w digitalizacji książek (szkoda ze głównie po angielsku :( ). Jak wiemy systemy OCR nie radzą sobie za dobrze i często trzeba je poprawiać. No i mądrzy ludzie wpadli na to aby zastosować Human Computing, czyli wykorzystać naszą “moc obliczeniową”.

Gdy chcemy dodać komentarz na blogu musimy przepisać poprawnie dwa* wyrazy. W ten sposób mamy zabezpieczenie przed automatycznym spamem. A przy okazji do bazy reCAPTCHA “tłumaczymy’ jeden z wyrazów. System podając nam 2 wyrazy do odczytu tak na prawdę zna “tekstowo” tylko jeden wyraz i ten MUSIMY wpisać poprawnie drugi wyraz, jest tym słowem na którym wywalił się OCR :)  System zapisuje sobie naszą propozycję i jeśli potwierdzi ją kilka osób to zapisuję ja jako znaną i kawałek jakiejś książki zostaje przetłumaczony na tekst, dzięki naszej pomocy.

Nowa maszyna

Bez kategorii Komentarze (3) »

Jakieś 2 tygodnie temu zafundowałem sobie stacjonarkę. Głównym powodem zakupu był masakrycznie długi czas kompilacji projektu napisanego w QT, który współtworzę w godzinach pracy ;]. Na moim laptopie kompilacja zajmuje około 9minut (czasem więcej). Na nowym sprzęcie czas ten spadł do 1 min i 8 sec. I o to mi właśnie chodziło. No dobra przejdźmy do porównania parametrów obu komputerów.

Laptop:

  • Procesor DUAL CORE T3400 @ 2.16Ghz
  • 3 GB RAM DDR2 (transfer 3.2GB/s)
  • cała reszta jest nieistotna :)

Stacjonarka:

  • Procesor core i5 750 @ 2,66GHz
  • 4GB RAM DDR3 (transfer 12.8GB/s)   (G.Skill Eco)
  • Hdd: Samsung 500GB
  • Karta graficzna: Radeon 4770 DDR5 512MB
  • Chłodzenie: Scythe Mugen rev2
  • płyta główna: MSI P55-GD65

Ale sam sprzęt byłby niczym gdyby nie jego odpowiedni overclocking.

Overclocking:

  • Zegar procesora na co dzień pracuje z częstotliwością 4.2GHz (WSZYSTKIE 4 RDZENIE) [fabrycznie 2.66GHz]. Daje to średnio około 56 - 58 GFlops. Rekord jaki udało mi się uzyskać to 4477MHz
  • Pamięć śmiga na 1960MHz i daje transfer około 18GB/s (fabrycznie 1333MHz i 12.8GB/s)
  • Kręcona jest również karta graficzna :) a co . . . czasem sobie w gierkę jakąś można zagrać.  GPU smiga bez problemu na 1000MHz (fabrycznie 750MHz) a pamięć 1100Mhz (fabrycznie 800Mhz). Daje to 1280GFlops mocy GPU i przepustowość pamięci 68.8GB/s

2 monitory

Bez kategorii Komentarze (0) »

Chciałem w tym wpisie podzielić się swoimi spostrzeżeniami odnośnie pracy na 2 monitorkach jako, że od kilku tygodni jestem szczęśliwym posiadaczem drugiego ekranu. Mój zestaw to laptopowe 15,4″ + Benq 22″. I musze przyznać, że mimo iż rozmiary matryc nie są jakoś mocno wygórowane to zysk komfortu pracy jest znaaaczny. Spora zasługa jest również rozdzielczości w samym lapku mam 1280×800 teraz doszło jeszcze 1920×1080.  Podczas pracy na benq wrzucam zwykle eclipsa albo Qt Creatora, a na lapku siedzi firefox z dokumentacja. W razie potrzeby (wczoraj takiej doświadczyłem) można zawsze rozciągnąć sobie okienko (u mnie byl to QtCreator z ustawionym podziałem na 4 widoczne piki na raz). Samo testowanie działania napisanej przez nas aplikacji też można usprawnić przez odpalenie kodu/debugera/logów na jednym monitorku a samej aplikacji na drugim wtedy mamy podgląd tego co się dzieje. Ogólnie zakup 2-giego monitora jest jak najbardziej wskazaną czynnością. Mi się wydaje, że mam dzięki temu znacznie lepszą wydajność. Szkoda, że moja karta w laptopie nie umiała sobie poradzić z 2 zewnętrznymi monitorami + martyca w laptopie ;] bo wczoraj miałem okazję w pracy takie centrum sobie stworzyć.  Jeśli już o sprzęcie mowa to jakiś czas temu zrozumiałem, że o ile do samej Javy laptop mi wystarcza, to kompilacja kodu w Qt wymaga ode mnie kupna stacjonarki (a do niej jeszcze z jednego monitora :D). Projekt nad którym pracuje kompiluje się u mnie około 10 - 12min, gdzie u kolegi na stacjonarce to < 2min. 4 rdzenie w laptopie to za duży koszt, więc pozostaje kupno stacjonarki.

Początek studiów itp

Bez kategorii Komentarze (0) »

Jak już pisałem w ostatnim poście (daaaaawno temu) skończyłem studia pierwszego stopnia. Nie pochwaliłem się jeszcze, że poszedłem na Informatyke II-stopnia :) Więc teraz się chwale. 1. października miałem immatrykulację, na której m.in wręczano dyplomy wyróżnionym zespołom z Programowania Zespołowego - a, że mój zespół znalazł się w tym gronie to wypadało pójść na uroczystość. Uczelnia poprosiła nas również o numery kont bankowych - mamy otrzymać jakieś skromne nagrody ale jak dotąd nic nie doszło :).

W tym roku musiałem wybrać kilka przedmiotów na które chciałem chodzić (niestety nie było za bardzo w czym wybierać). Na “Zaawansowaną Javę” nie udało mi się dostać (kolizja z obowiązkowym przedmiotem - pójdę w przyszłym roku), ale za to postanowiłem chodzić na przedmiot “Constr. and implement. of the object query language” - Przedmiot dla mnie ciekawy z dwóch powodów - wykładany całkowicie po angielsku co uważam za plus (trochę bardziej osłucham się z językiem) oraz wymaga nauczenia się języka Python. Tematyka baz danych jest mi raczej obojętna ;) Inne PdW to praktycznie sama matematyka. Z ciekawszych przedmiotów w tym semestrze jest jeszcze “Modelowanie i Analiza Systemów Informatycznych” - ogólne przedmiot ma traktować o sposobie projektowania oprogramowania. Po pierwsze będziemy pracować w grupach 4 - 6 osobowych tak jak na PZ - tylko, że teraz sam projekt jest ważniejszy od aplikacji. Już z prowadzącym ustaliliśmy, że kontynuujemy projekt “Desty”, więc może tym razem doczeka się on ukończenia i wdrożenia :)

W sumie można powiedzieć, że czas w którym na blogu nic się nie działo obył się bez programowania. Z 2 małymi wyjątkami. Napisałem jakoś niedawno 2 “aplikacyjki” pomagające mi w pozycjonowaniu stron. I muszę przyznać, że spełniają swoje zadanie bardzo dobrze :) Zacząłem się również dobierać do biblioteki Apache POI, a w zasadzie do częście odpowiedzialnej za odczytywanie formatu .xls stosowanego przez Microsoft Excel ale jakoś mi się motywacja skończyła po godzince około :) Niemniej odczytać plik się udało w pewnym stopniu :)

No to może na tyle… Następny post(lub nawet seria postów) pewnie będzie o zmaganiach z Pythonem bo właśnie jestem w trakcje lektury “Python od Podstaw” - NIE POLECAM TEJ KSIĄŻKI - tylu błędów/literówek to chyba jeszcze nie widziałem w żadnej książce.

GWT + Google Maps API

Bez kategorii Komentarze (0) »

Od dawna miałem napisać już o połączeniu GWT z Google Maps API ale jakoś nigdy nie było czasu ani chęci. Ostatnio kolega miał parę pytań co do Google Maps no i tak mi się jakoś przypomniało o tym temacie : ) Na początek zrobimy najprościej jak się da po prostu stronka, na której jest mapka wycentrowana na jakimś punkcie. Więc do dzieła.

Najpierw utwórzmy projekt za pomocą wtyczki GWT do eclipse’a. Potem wywalamy z niego nie potrzebne klasy tak aby została nam tylko klasa o nazwie projektu (ta z EntryPoint’em):

Na początek wywalmy z niej całe wnętrze, tak aby zostało coś takiego:

[java]

package pl.kedziorski.gwtmaps.client;

import com.google.gwt.core.client.EntryPoint;

public class GWTMaps implements EntryPoint {

public void onModuleLoad() {
}
}

[/java]

Potem zabieramy się za uprzątnięcie pliku HTML - znajduję się on w katalogu war i też nazywa się tak jak projekt + .html : ) U mnie wygląda to tak:

[html]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="GWTMaps.css">
<title>GWT z Google Maps API</title>
<script type="text/javascript" language="javascript" src="gwtmaps/gwtmaps.nocache.js"></script>
</head>
<body>
<iframe src="javascript:”" id="__gwt_historyFrame" tabIndex=’-1′ style="position:absolute;width:0;height:0;border:0"></iframe>
</body>
</html>

[/html]

Jeszcze musimy wywalić info z pliku web.xml o servlecie, który usunęliśmy. U mnie po tym zabiegu plik wygląda tak:

[xml]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<!– Default page to serve –>
<welcome-file-list>
<welcome-file>GWTMaps.html</welcome-file>
</welcome-file-list>

</web-app>

[/xml]

Ok mamy już przygotowany “czyściutki” projekt. Potrzebujemy teraz liba z Google Maps API. Następnie dołączamy gwt-maps.jar do naszego Build Path. Ale to nie wszystko - żeby korzystać z Google Maps musimy jeszcze dodać odpowiedni wpis do pliku nazwaProjektu.gwt.xml :

[xml]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module rename-to=’gwtmaps’>
<inherits name=’com.google.gwt.user.User’/>
<inherits name=’com.google.gwt.user.theme.standard.Standard’/>
<inherits name=’com.google.gwt.maps.GoogleMaps’/>
<entry-point class=’pl.kedziorski.gwtmaps.client.GWTMaps’/>
<script src="http://maps.google.com/maps?gwt=1&amp;file=api&amp;v=2&amp;key=klucz_naszej_strony"/>
</module>

</module>

[/xml]

Klucz do API możemy stworzyć na tej stronie (możliwe, że już nie ma obowiązku tworzenia API key). Jednak jeśli uruchamiamy stronkę na localhost nie ma potrzeby wpisywania klucza - może zostać tak jak w podanym wyżej listingu.

No ok teraz już możemy zacząć oprogramowywać naszą mapkę. Na początek stwórzmy mapę, która jest automatycznie centrowana na Toruń.

[java]

package pl.kedziorski.gwtmaps.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.user.client.ui.RootPanel;

public class GWTMaps implements EntryPoint {

public void onModuleLoad() {
MapWidget map = new MapWidget(LatLng.newInstance(53.023664, 18.636932),12);
map.setSize("600px", "500px");
RootPanel.get().add(map);
}
}

[/java]

MapWidget to nasza mapka. LatLng to klasa przechowująca długość i szerokość geogreficzną. Współrzędne 53.023664, 18.636932 leżą gdzieś w Toruniu. Konstruktor MapWidget wymaga też podania początkowego zoomu - ja wybrałem 12 bo widać wtedy cały Toruń. SetSize() wiadomo co robi : ) Miałem dopisać jeszcze jak robić trochę inne bajery ale może innym razem : )

Lombok

Bez kategorii Komentarze (3) »

Dziś rano czytając przy kawie RSSy znalazłem fajną bibliotekę. Mowa tu o narzędziu Lombok. Zdarzało Wam się pewnie nie raz pisać Klasy które mają tylko przechowywać jakieś informacje - nazywa się to chyba fachowo DTO. Weźmy sobie taki przykładzik z naszą osobą:

[java]

import java.util.Date;

public class Person {
private String name;
private String surname;
private Date birthdate;
private int pesel;
private int nip;
private double salary;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public Date getBirthdate() {
return birthdate;
}
public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
}
public int getPesel() {
return pesel;
}
public void setPesel(int pesel) {
this.pesel = pesel;
}
public int getNip() {
return nip;
}
public void setNip(int nip) {
this.nip = nip;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}

}

[/java]

Widzimy że nasz Person ma kilka pól żeby mieć do nich dostęp musimy napisać settery i gettery. Tylko że jak je dopiszemy to nasza klaska staję się bardzo/dość nieczytelna. O to jak wygląda kod dający ten sam efekt przy zastosowaniu biblioteki Lombok:

[java]

import java.util.Date;
import lombok.Getter;
import lombok.Setter;

public class Person {
private @Getter @Setter String name;
private @Getter @Setter String surname;
private @Getter @Setter Date birthdate;
private @Getter @Setter int pesel;
private @Getter @Setter int nip;
private @Getter @Setter double salary;
}

[/java]

Prawda że ładniej i czytelniej ? : ) Dzięki adnotacjom @Getter i @Setter tworzymy (albo Lombok za nas tworzy) gettery i settery do danego pola. Ale możemy jeszcze bardziej sobie życie ułatwić i napisać tak:

[java]

import java.util.Date;
import lombok.Data;

public @Data class Person {
private String name;
private String surname;
private Date birthdate;
private int pesel;
private int nip;
private double salary;
}

[/java]

Teraz to już chyba nie da się skrócić bardziej : ) Adnotacja @Data tworzy nam settery i gettery ale to nie wszystko - dostajemy również metody toString() , hashCode() oraz eguals().

Biblioteka oferuje nam następujące opcje:

@Getter

@Setter

@Data

@ToString

@EqualsAndHashCode

@Cleanup

@Synchronized

@SneakyThrows

Wydaje mi się, że to całkiem ciekawa biblioteka - brawa dla autorów za pomysł.

Spora przerwa

Bez kategorii Komentarze (0) »

Ostatnio byłem trochę zabiegany i nie było czasu by napisać coś nowego na blogu. Teraz mam nadzieje, że już będzie luźniej ; ) W sumie sesję mam już za sobą - ostatni egzamin (język D) zdawałem 24 lipca - został teraz tylko egzamin licencjacki :) ale to we wrześniu czyli jeszcze całkiem sporo czasu mi zostało : ) Kolejnym powodem braku czasu była ładna pogoda : ), która bardzo skutecznie wyciągała mnie z domu nad przepełnione jeziorka : ) Ale że uwielbiam pływać nie mam żalu do pogody : )  No to by było na tyle jeśli chodzi o usprawiedliwienie ; ) Zaraz napisze wpis o nowym znalezisku : )

Silnik: Wordpress - Theme autorstwa N.Design Studio. Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj








2zł Nordic Gold