Tuesday, November 15, 2011

Is Eclipse Java7 ready?

I don't know as I actually don't use Java 7. I have Java 6 installed. But today I tried to create a switch(String) statement and I ran into this:



Wednesday, November 9, 2011

Debugowanie DLLi wywoływanych przez JNI z javy

Ku mojemu wielkiemu zaskoczeniu da się! I to bardzo łatwo.

Warunkiem koniecznym jest, naturalnie, jak to przy debugowaniu, posiadanie źródeł kodu DLLki.
Należy uruchomić oba środowiska (ulubione IDE Javy oraz ulubione IDE C/C++). Ja ulubionego C/C++ nie mam, ale użyłem Microsoft Visual C++ 2010 Express.

Zaczynamy od Javy. Stawiamy breakpoint przed wywołaniem kodu natywnego i uruchamiamy aplikację w javie.
Przełączamy się do IDE C/C++, stawiamy breakpoint wewnątrz natynwej metody i wybieramy Debug->attach to process. Wybieramy nasz proces (zapewne java lub javaw). Po podłączeniu się, w IDE Javowym puszczamy program dalej i w tym momencie IDE C/C++ łapie wywołanie. Dalej jest już prosta ścieżka, bo debugujemy program w C/C++.

Istnieje możliwość debugowania programu C/C++ w Eclipse CDT, wtedy należy stworzyć nową konfigurację debuggera "C/C++ Attach to a Local Application". Ale nie robiłem tego.

Polecam wpisy
Debugging Java Native Interface (JNI) DLLs using Microsoft Visual C++ 2008 Express and NetBeans 6.9
Debugging JNI C and Java code in Eclipse

Friday, October 28, 2011

Rooting Xperia X10 mini pro

I just did it. I've rooted my phone with SuperOneClick. Now I'm going to install CyanogenMod :D

Wednesday, October 12, 2011

TouK sponsorem Warsjawa 2011


TouK angażuje się w aktywności Warszawa JUG. W czerwcu sponsorował Confiturę 2011.
Tym razem wsparł Warsjawę, nie tylko finansowo, ale również fundując książki, które zostaną rozlosowane podczas warsztatów.

Warsjawa 2011 już w najbliższą sobotę, 15 X 2011, na Wydziale Elektroniki i Technik Informacyjnych PW.



Jedna z zasad Agile: zrób minimum by osiągnąć cel i nic poza tym.

Brzmi logicznie. I mimo, że ją znam i staram się stosować, to dziś dostałem w tyłek od samego siebie, bo ją złamałem. Spędziłem trochę czasu szukając przyczyny błędu (w tym wypadku regresji, bo funkcjonalność już działała). Błąd polegał na tym, że z wypełnionego formularza po operacji zapisu pobierałem stan flagi i emitowałem event z tą flagą w środku. Wszystko działało do niedawna prawidłowo. Przestało, bo ostatnio flaga zawsze była false. Prawidłowa sekwencja kodu była

eventBus.fireEvent(formSavedEvent);
display.hide();

Czyli najpierw informuję o zapisie (w evencie był stan flagi z formularza), a potem zamykam okienko.
Ale nie! Byłem mądrzejszy i w ramach jakichś innych zmian w klasie postanowiłem zamienić kolejność operacji 

display.hide();
eventBus.fireEvent(formSavedEvent);


Bo przecież lepiej najpierw schować okienko, a potem puścić eventa. Zrobiłem to zupełnie nieroztropnie, bez zastanowienia - niepotrzebnie! Nikt o to nie prosił. Żaden CR tego nie zakładał.

Przed chwilą odkryłem, że hide() czyści formularz (i flagę!), aby był gotowy na ponowne otwarcie. I tak sobie narobiłem do własnego gniazda. I wyobraźcie sobie, że testy też miałem i przechodziły, bo prezenter odpowiedzialny za tą logikę działał poprawnie. Czyszczenie następowało w display, a ten z kolei w testach był zamockowany. Powinienem zatem napisać testy integracyjne FE lub użyć selenium (tego nie stosujemy).

Warsjawa już prawie, prawie...


Za 3 dni IV Warszawskie Warsztaty Javowe. Ale fajnie! Nie wyobrażacie sobie jaka to frajda dostawać kolejne potwierdzenia na maila, o rejestracji na warsztaty. A dostaję ich kilkadziesiąt dziennie. Prawie wszystkie miejsca zajęte i aż szkoda, że nasi prowadzący nie są cyborgami, tak, aby ogarnęli większa ilość osób...





To co w tej chwili widzę, to 
Warsjawa 2011 - warsztaty Android: 45/45
Warsjawa 2011 - warsztaty DDD i CqRS: 60/60
Warsjawa 2011 - warsztaty GWT: 56/60
Warsjawa 2011 - Obiektowa gimnastyka: 33/60

...czyli prawie osiągnęliśmy maksymalne obłożenie. To daje w sumie już 194 uczestników, ale spodziewam się więcej.

Wednesday, September 21, 2011

Zabawy zespołowe: ćwiczenie głosu - RYBA!

Ćwiczenie ma za zadanie ośmielić osoby do mówienia głośno i wyraźnie. Ma też pomóc ustawić głos. Bardzo przydatne przy spotkaniach typu stand-up, gdzie "mruki" opowiadają pod nosem, co ostatnio robiły. Z mojego doświadczenia - działa!

Osoby biorące udział w ćwiczeniu stają w okręgu. Wybieramy sobie słówko do powtarzania. Proponowana jest ryba, ale może to być dowolne inne, proste w wymowie słowo.
Prowadzący ustala kierunek i jako pierwszy mówi szeptem ryba. Następnie, kolejne osoby powtarzają rybę, aż do donośnego"RYBA. Jeśli warunki pozwalają, można nawet krzyczeć, ale nie wrzeszczeć, bo wtedy wymowa jest niewyraźna. Po osiągnięciu maksymalnego (w pewnym sensie, ustalonego poziomu), zaczynamy ściszać głos, aż do szeptu. Naturalnie zabawę można powtórzyć dowolną ilość razy.

Jako szept warto przećwiczyć szept aktorski, czyli używanie szeptu, ale głośnego i wyraźnego, bez tembru głosu.

Mając jedno ustalone słowo, fajnie jest potem mobilizować kogoś kto mówi zbyt cicho wołając tylko "ryba!" i wtedy wszystko wiadomo.

Wednesday, September 7, 2011

Browser caches user authorities when using Waffle security

When using Waffle security (with Spring security, in my case) I discovered that both Internet Explorer (9) and Firefox (5) caches authorities bounded to user. I discovered this when I've chagned required user group to access my application and then I added current user to required group but no change. I couldn't gain access. After some debugging it appeared that Waffle returns unchanged set of authorities for current user.
Reloading browser, tomcat and clearing all caches and data didn't work. I'm sure that Chrome would work neither.
Firefox has convenient way to clear active logins. Click Tools-> Clear recent history -> [check]active logins

Finally I got the solution - user should logout and login again into windows box...

Tuesday, September 6, 2011

Szykujemy Warsjawę - C4P otwarte

W tym roku najprawdopodobniej Warsjawa odbędzie się 15 X 2011.
Będzie warsztat i to być może nie tylko jeden (!) oraz wykłady. No i pizza, czyli katalizator wiedzy ;)

Obecnie otwarliśmy ;) C4P. Piszcie do mnie na bartek.zdanowski[Shift-2] gmail .com

Uczymy się AI

Uniwersytet w Stanford organizuje eksperymentalnie klasę AI (sztucznej inteligencji). Właśnie się zapisałem. Zostały 3 dni.

http://www.ai-class.com/

Monday, September 5, 2011

Piotr Burdyło na Agile By Example

Już za 10 dni Agile By Example. Pierwsza warszawska konferencja o tematyce szeroko pojętego "Agile". Na dwudniowej konferencji można posłuchać ludzi, którzy od dawna tworzą ten ruch. Będzie też i "nasz człowiek", Piotr Burdyło, który przedstawi Kontrakty Agile'owe, w których TouK i Piotr w szczególności ma duże doświadczenie.
Pogodzenie "zwinności" i "stałości" korporacji jest bardzo trudnym zadaniem. Piotr opowie jak pogodzić te dwie strony - Software House wytwarzający zwinnie oprogramowanie i korporacje, dla których kwestie prawne i ścisłe trzymanie się ustaleń umów są kluczowe.
Piotr nie jest prawnikiem. Jest praktykiem, który potrafi skutecznie połączyć te nie-połączalne strony :)

Do zobaczenia na ABE 2011.

Tuesday, August 30, 2011

Kolejność budowania aplikacji w GWT i odpalanie testów (maven)

Nie umiałem dobrać tytułu. Wydaje mi się mylący, ale pościk jest o tym, że warto tak skonfigurować plugin GWT do mavena, aby aplikacja była kompilowana do JS dopiero po testach.
Wiadomo, że jeśli testy nie przechodzą, to nie ma sensu budować aplikacji. Jeśli omijamy testy (bywa i tak), to opisana niżej zmiana jest przeźroczysta.

W nowszych wersjach GWT (okolice 2.1.0) plugin buduje aplikację właśnie po testach, ale we wcześniejszych domyślnie odbywa się to w fazie compile. I to jest właśnie rozwiązanie. Należy przypiąć kompilację do JS w fazie po testach, ale przed budową paczki. Jeśli spojrzymy na pełną listę faz, to jest ich kilka "pomiędzy". Ja wpiąłem się w prepare-package i osiągnąłem zamierzony efekt. Poniżej typowa konfiguracja plugina mavenowego, w której określamy fazę uruchomienia (pominąłem konfigurację plugina):

                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>gwt-maven-plugin</artifactId>
                        <version>${gwt.maven.plugin.version}</version>
                        <executions>
                            <execution>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>compile</goal>
                                </goals>
                            </execution>
                        </executions>



Dzięki temu oszczędziłem sporo czasu, bo zajmuję się projektem w którym budowanie aplikacji (8 permutacji!) zajmuje 4-5 minut. Do niedawna przy domyślnej konfiguracji najpierw kompilował się JS, a dopiero potem uruchamiały się testy. Szkoda tego czasu, tylko po to, aby w trakcie testów (które też trwają ok minuty), dowiedzieć się, że wysiłek był na marne.

A Mockito catch

Suppose we have such classes and interfaces

public class AddOrganizationAction implements Action {}
public class AddPersonToOrganizationAction implements Action {}


public interface DispatchAsync {
     void execute( Action action, AsyncCallback callback );
}


We're using the best mocking framework ;) Suppose we want to verify that code under test will call execute() with proper Action - AddOrganizationAction.
I found that many developers (including me!) check such condition with

verify(async).execute(any(AddOrganizationAction.class), any(AsyncCallback.class));

In such case AsyncCallback is not important for us. We just want to ensure that AddOrganizationAction will be passed. We run test and it's green. But suddenly if we put the code below into test it will be green too!

verify(async).execute(any(AddPersonToOrganizationAction .class), any(AsyncCallback.class));

Why? Because any() matcher doesn't check the instance of passed object to be equal to declared class (AddOrganizationAction in this case). Any() checks if passed object conforms to method signature. In this case any Action's child will do. And we have an erroneous test!
The proper matcher we'd like to use is isA() matcher that checks if passed object is instance of declared class (which means instance of class or it's children).

So the proper test should contain

verify(async).execute(isA(AddOrganizationAction.class), any(AsyncCallback.class));

Go now and search for any() usages and think about changing it to isA(). In 1 of 10 cases whenever I change all tests in a testcase to isA() usage, I find an error in implementation of logic under test. Luckily I know the catch and now you do :)

Ok. It's not really a catch but ignorance of all us developers that we don't read entire documentantation :)

Wednesday, August 3, 2011

Nowe wydanie Technology Radar z ThoughtWorks!

Jeśli zastanawiasz się czy technologie i narzędzia, z którymi pracujesz są trendy, akceptowalne, a może są przeżytkiem, to koniecznie zajrzyj do najnowszego, lipcowego wydania Technology Radar wydawanego co jakiś czas przez ThoughtWorks.
Może czas zmienić technologie? A może pracę...

Wednesday, July 20, 2011

W tym roku w końcu obejrzycie wszystkie prezentacje z Confitura 2011 :D

Dzięki mądrym decyzjom kolegów z Kapituły (nie pamiętam kto to wymyślił :)) w tym roku zupełnie inaczej zorganizowaliśmy udostępnianie wideo z konferencji. I to był świetny ruch. Już w tej chwili dostępna jest połowa prezentacji na vimeo.com, a kolejne są uploadowane. Tym razem będzie można obejrzeć wszystkie prezentacje.

Ja również czekam na nie, bo nie obejrzałem żadnej podczas samej konferencji. To niestety minus bycia organizatorem tego typu imprezy...

Zapraszam!

Thursday, July 14, 2011

Korki w google maps

Wczoraj odkryłem, że Google udostępnił korki na żywo oraz historyczne. Póki co danych jest mało, ale myślę sobie, że google to zrobi dobrze - wszak mają doświadczenie.
Z drugiej strony, jak zauważył dzisiaj mój pracowy kolega Arek, mamy specyficzną sytuację w Polce i google wcale nie musi być liderem. Jest jeszcze targeo z bardzo dobrymi danymi i oni tworzą swój system w oparciu o dane mobilne (z pojazdów i użytkowników). Takie dane też google kupuje od polskich dostawców, ale podejrzewam, że google na zachodzie mocno się opiera o dane z kamer i pętli indukcyjnych (czujników pod asfaltem), czego u nas prawie nie ma. Stąd ich algorytmy mogą być niedostosowane właśnie do polskich realiów.
W poprzedniej pracy zajmowałem się tematem korków, zbudowałem nawet pierwszy prototyp, a potem moi koledzy zrobili z tego magię. Niestety nie znam dalszych losów tego projektu, bo AutoGuard dostarcza produkty bezpośrednio klientom, a nie publicznie, stąd mój brak wiedzy.

Tuesday, June 7, 2011

Confitura już za 4 dni

Przez te przygotowania w ogóle nie piszę na moim blogu, a tu przecież tłumy czekają na moje wynurzenia ;)
Ale tak na serio. Na cztery dni przed

* drukują się vouchery z nagrodami :D
* potwierdzamy catering
* koszulki i smycze są w drodze do CK (na Bobrowiecką)
* 200 zaproszeń na SPOINĘ jest już w Polsce - były drukowane w Estonii! - wszystko się wyjaśni w sobotę...
* 737 osób ostatecznie potwierdziło, z tego połowa ludzi z Warszawy - dobrze!
* muszę przygotować prezentację na zakończenie konferencji

Pozostało jeszcze tylko wydrukować listy uczestników i jazda.
Do zobaczenia w sobotę.

Wednesday, May 18, 2011

Rejestracja na Confitura 2011 otwarta!

Z wielkimi emocjami otworzyliśmy w końcu... :)
Największą przyjemność sprawia mi odświeżanie listy uczestników, która prawie za każdym razem jest dłuższa! Nagroda za wkład w przygotowywanie :-D

Zapraszam do rejestracji

GeeCON za nami, Confitura przed nami

Miałem przyjemność być na GeeCON 2011. Bardzo fajna konferencja. Poznałem dużo ludzi i jeszcze więcej nowych technik, technologii i pomysłów na rozwój oprogramowania.
 Dla mnie - piątka z plusem.
Na GeeCONie byłem po raz pierwszy i na pewno nie po raz ostatni. Mam zamiar regularnie odwiedzać kolegów z Krakowa i Poznania i podpatrywać ich konferencję i czerpać inspirację do jeszcze lepszego tworzenia "mojej".
Jestem też wdzięczny organizatorom za wspieranie Confitury w postaci publicznego zaproszeni uczestników GeeCONa na Confiturę.

A właśnie - co słychać "u Confitury"? Otóż został niecały miesiąc. Za chwilkę otworzymy rejestrację i mam nadzieję, że widok będzie jak przy otwarciu Media Smarktu lub innego Satyrna. Ludzie będą się przepychać i tratować chcąc się zarejestrować :) Domykamy też  kwestie związane ze sponsorami, więc jak grzybki po deszczu będą pojawiali się nowi partnerzy. Strasznie to dla nas ważne, bo ponieważ Confitura jest bezpłatna, tylko od sponsorów zależy to co możemy Wam zaoferować.
A to właśnie ulegnie w tym roku zmianie. Mogę na pewno zdradzić, że obiad będzie płatny, ale dofinansowany. Tzn. postanowiliśmy przerzucić część ciężaru kosztów na uczestników, ale tylko tych, którzy postanowią skorzystać z zamówionego kateringu. Zrobimy tak, jak na większości konferencji - skupimy się na merytoryce konferencji.

TouK sponsorem Confitura 2011 (dawniej Javarsovia)


Jak co roku TouK postanowił wesprzeć największą bezpłatną konferencję w Polsce. Konferencja o tematyce około-javowej oraz o technikach software crasftsmanship i agile, z roku na rok jest coraz większą i coraz bardziej rozpoznawalną w społeczności imprezą. W zeszłym roku zgromadziła 650 uczestników, w tym roku spodziewamy się jeszcze więcej osób.
Organizatorzy ogłosili uczestnictwo TouK na swojej stronie.

Tuesday, May 10, 2011

Witamy SII w gronie sponsorów Confitura 2011 (dawniej Javarsovia)


Firma Sii jako pierwsza dołączyła do grona sponsorów tegorocznej edycji konferencji Confitura, organizowanej przez Warszawski JUG. Nie jest to jedyny sponsor, bo rozmowy toczą się z wieloma, natomiast na pewno jest to pierwszy :)

Dziękujemy za wsparcie naszej konferencji!

- Fajnie?
- Sii! :D

Friday, April 29, 2011

Using Eclipse snippets for faster JUnit test creation (with Mockito!)

I'm using this snippet to create a template of new unit test method supporting BDD mockito tests. This is a good example for adding static imports to a class from snippets.

@${testType:newType(org.junit.Test)}
public void should${testname}() {
 ${staticImport:importStatic('org.mockito.BDDMockito.*', 'org.mockito.Matchers.*', 'org.mockito.Mockito.*', 'org.junit.Assert.*')}// given

    // when
    ${cursor}
    // then

}

The result is astonishing ;)

import static org.mockito.BDDMockito.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;


(...)

 @Test
    public void shouldTestSomething() {
        // given

        // when
        CURSOR_LANDS_HERE
        // then

    }

Friday, April 22, 2011

Spring security authentication-success-handler-ref and authentication-failure-handler-ref does not work with KerberosServiceAuthenticationProvider

I'm using SpringSecurity with KerberosServiceAuthenticationProvider which is Kerberos security extension. You can read how to use it on extension author's blog.
But you cannot use handler on form-login to catch authorization result. It's because of inner construction of authorization filter chain calls. Maybe it can be considered a bug?
The workaround is to implement ApplicationListener<AuthenticationSuccessEvent> and ApplicationListener<AbstractAuthenticationFailureEvent> to catch proper events.

package pl.touk.app.fe.server.security;

import org.springframework.context.ApplicationListener;
import org.springframework.security.authentication.event.AuthenticationSuccessEvent;

public class UserSuccessfulLoginLogger implements ApplicationListener<AuthenticationSuccessEvent> {

    @Override
    public void onApplicationEvent(AuthenticationSuccessEvent event) {
        //do something here
    }
}

package pl.touk.app.fe.server.security;

import org.springframework.context.ApplicationListener;
import org.springframework.security.authentication.event.AbstractAuthenticationFailureEvent;

public class UserFailedLoginLogger implements ApplicationListener<AbstractAuthenticationFailureEvent> {

    @Override
    public void onApplicationEvent(AbstractAuthenticationFailureEvent event) {
       //do something here
   }
}

Then you init beans in Spring configuration
<bean id="userSuccessLoginLogger" class="pl.touk.app.fe.server.security.UserSuccessfulLoginLogger" />

<bean id="userFailedLoginLogger" class="pl.touk.app.fe.server.security.UserFailedLoginLogger" />


A drawback is that one cannot have access to request and response as could have when using authentication-success-handler-ref and authentication-failure-handler-ref.
But in my case I didn't need that.

Tip! If you cannot receive AuthenticationEvents look at this page.

Магистраль M1, WTF?!

Google maps ma nazwy ulic i miejscowości w języku natywnym danego kraju. Luz. Ale czemu kurza stopa u nas są po rusku?! Skrzyżowanie Połczyńskiej i Powstańcow Śląskich w Warszawie. Do zobaczenia na google maps.



Tuesday, April 19, 2011

Rozpoczeliśmy Call for papers na Confitura 2011 (dawniej Javarsovia)

Dzisiaj w samo południe opublikowaliśmy posta z zaproszeniem do zgłaszania się z prezentacjami na Confitura 2011. W dwanaście godzin później mamy już 11 zgłoszonych prelegentów! Nie chcę przesadzać, ale... sukces mamy gwarantowany ;)
Nie mogę nic zdradzać, ale widzę same dobre i rozpoznawalne w środowisku nazwiska, co gwarantuje, że prezentacje będą na wysokim poziomie.

Ustaliliśmy deadline na 8go maja. Dużo to i mało, bo do tego czasu należy zgłosić abstrakt prezentacji, na tyle atrakcyjny i czytelny, aby stworzył szanse na kwalifikację do konferencji.

Wyboru dokona grono niezależnych ekspertów czyli Kapituła Confitura 2011 :)

Sunday, April 17, 2011

We wtorek (19 04 2011) dowiemy się co dobrego można znaleźć w JDK7.

Na Warszawa JUG, we wtorek, 19go kwietnia 2011, o godz 18, wystąpi Maciek Próchniak. Z Maćkiem pracuję już prawie pół roku i bardzo go cenię za wiedzę i chęć dzielenia się tym co potrafi. Bardzo zachęcam do przybycia na spotkanie. Spotykamy się na MIMUW, Banacha 2, sala 5440.

Oficjalna zapowiedź:


JDK7 - czy na pewno nic nowego?
W lipcu ma ukazać się długo (od ponad 4 lat...) oczekiwana nowa wersja Javy. Oczekiwanie były duże, a wyszło... No właśnie? Jak wyszło? Nie będzie domknięć, nie będzie modularności, a co zostało? O tym chciałbym trochę opowiedzieć.
Może nie będzie to takie fascynujące jak JBison, Hadoop czy SpringSecurity, ale czasami chyba warto wrócić 'do podstaw'.  Ponieważ jest już dostępna wersja 'Developer Preview' oraz dostępne jest wsparcie naszych ulubionych IDE, to pewnie także trochę pokodujemy.


Maciek Próchniak jest matematykiem, od 5ciu lat zajmuje się szeroko pojętym JEE - najpierw w Javatech, a od prawie 2ch lat w TouK. Obecne zainteresowania to integracja (Servicemix, Drools, BPM), GWT oraz (po dłuższej przerwie...) programowanie funkcyjne. Jest oficjalnym kontrybutorem projektu Activiti.
Ostatnio wziął się za pisanie własnego bloga.

Monday, April 11, 2011

Po 33rd degree

W minionym tygodniu odbyła się konferencja 33rd degree. Bardzo mi się podobała, bo zostało na nią zaproszone wielu znakomitych prelegentów. Sama forma - zapraszanie prelegentów, zamiast Call for papers (prośba o składanie propozycji prezentacji), to fajny pomysł. Udało się złowić sporo gwiazd.
W sieci jest mnóstwo relacji. Ja jestem zbyt zmęczony i leniwy żeby to robić. Napiszę tylko swoją ocenę, również z perspektywy organizatora największej bezpłatnej konferencji w Polsce, poświęconej około-jvm, agile i rzemiosłu programistycznemu (to chyba najdłuższy link-reklama).

Dobre
* prezentacje ciekawe, poza kilkoma nudnymi, np. pan Freeman, który pokazał kilka tabelek, albo prezentacje sponsorskie o PRowskim sposobie prezentowania - np Tieto, przedstawiło problem (to fajne) i jako rozwiązanie podało zewnętrznych konsultantów (to niefajne).
* o'reilly z książkami -40% cieszył się zainteresowaniem
* konkursy z nagrodami, w tym iLoop, który zrobił zabawę z geekowymi zagadkami i to mnie bardzo wciągnęło. Oczywiście to nie zasługa konferencji, tylko twórczych ludzi z iLoop, ale akurat tam miałem okazję wziąć udział w zabawie.
* 4 równoległe sesje - było w czym wybierać. Aż żal było nie pójść na pozostałe.
* miałem szczęście być wylosowanym i dostałem książkę o Groovym, a że autor (Venkat Subramaniam) właśnie siedział obok mnie, to dostałem nawet dedykację!

Słabe
* wifi nie dawało rady. Net był oparty o APki hotelowe, a ty przyjechało 200+ geeków z technologiami mobilnymi na kolanach. Na Javarsovii miewaliśmy własne AP, bo spodziewaliśmy się ruchu w sieci (BTW. na JV raz widziałem gościa, który oglądał mecz piłki nożnej podczas prezentacji Pawła Lipińskiego...)
* brak nagrywania. Rozmawiałem z Grzegorzem Dudą (organizatorem) i wiem, że to było zbyt kosztowne i kłopotliwe. Znowu, Javarsovia miała nagrywane, choć do dziś nie wszystkie zostały opublikowane, właśnie z powodu ogromnego kłopotu z obróbką, czego Grzegorz chciał uniknąć.
* brak mleczka do kawy ;) tu trochę się czepiam i to spaprał catering, ale serio na 5 stolikach bywało rzadko, a kawa szła jak woda przy takiej dawce wiedzy...

Udało mi się w końcu poznać Bartka Bańkowskiego i Szczepana Fabera, jednych z twórców Mockito. Poznałem też Oliviera White'a z Zeroturnaround, z którym korespondowałem tydzień wcześniej w sprawie licencji JRebel dla prelegentów WJUG.
Jednym ze sponsorów był TouK i prezentował się Jakub Nabrdalik.

Na końcu chciałbym przekazać moje uznanie dla Grzegorza Dudy, bo konferencję zorganizował sam. W Confiturze mamy kilka osób. W prawdzie my to robimy za darmo, więc z czego innego czerpiemy motywację, ale to nie zmienia faktu, że zorganizowanie tak dużej, trzydniowej, konferencji to kawał roboty. Dobrej roboty.

Dzięki Grzesiek i widzimy się za rok!

PS. Za miesiąc GeeCON, też w Krakowie (a ja cały czas myślałem, że w Poznaniu!) i obiecałem sobie, że tym razem pójdę na zapiekankę na Kazimierz :-D

Thursday, March 31, 2011

GWT Designer for Eclipse 3.6 can cause project compile freeze

Lately I installed GWT Designer for Eclipse Helios (3.6). I wanted to check it's features. They aren't so cool I've expected but that's other story. The problem was that suddenly my main GWT enabled project began to freeze during compilation.  The project is maven enabled also.
So it freezed in about half of compilation. All other features of Eclipse worked well. Restarting Eclipse and Windows didn't help anyway.
After about an hour of investigating I've found that GWT Designer caused this. After removing it all came back to order.

Ofcourse I suspect that something is wrong with my Eclipse for example I have too many bizzarre plugins installed but if I could have such problems you could have them too. So be warned :-)

Thursday, March 24, 2011

(Another) GWT exception in Development Mode

Lately I got a new kind of exception during GWT Development Mode startup.


java.lang.NullPointerException
        at com.google.gwt.dev.resource.impl.DirectoryClassPathEntry.descendToFindResources(DirectoryClassPathEntry.java:79)
        at com.google.gwt.dev.resource.impl.DirectoryClassPathEntry.findApplicableResources(DirectoryClassPathEntry.java:54)
        at com.google.gwt.dev.resource.impl.ResourceOracleImpl.refresh(ResourceOracleImpl.java:351)
        at com.google.gwt.dev.cfg.ModuleDef.refresh(ModuleDef.java:386)
        at com.google.gwt.dev.cfg.ModuleDefLoader.tryGetLoadedModule(ModuleDefLoader.java:150)
        at com.google.gwt.dev.cfg.ModuleDefLoader.loadFromClassPath(ModuleDefLoader.java:136)
        at com.google.gwt.dev.DevModeBase.loadModule(DevModeBase.java:963)
        at com.google.gwt.dev.DevMode.loadModule(DevMode.java:468)
...


This was because after I started Development Mode, my IDE cleaned compiled classes directory(target/classes/ in my case).
Rebuild project and I'll be back to game :)

Did you like the post? Was it helpful? Leave a comment!

Tuesday, March 22, 2011

Kolejne licencje IntelliJ Idea 10 rozdane!

Firma JetBrains wspiera Warszawa JUG licencjami na IntelliJ Idea 10. Ostatnio rozlosowaliśmy wśród uczestników licencje na to doskonałe IDE. Zapraszamy na nasze spotkania, bo można zarówno posłuchać ciekawych wykładów, jak i zdobyć licencję.

Monday, March 21, 2011

Wednesday, March 2, 2011

Javarsovia przeistacza się w...Confiturę!

Z dniem 1 marca 2011 oficjalna nazwa konferencji Warszawa JUG i polskiej społeczności javowej to Confitura. Zmiana podyktowana była prośbą firmy Oracle o uszanowanie ich prawa do znaku towarowego JAVA i nie bawiąc się w prawne interpretacje, przychyliliśmy się do tego stanowiska. Prosimy o zaprzestanie używania poprzedniej nazwy we wszelkiej komunikacji dotyczącej naszej konferencji.

Friday, February 11, 2011

Młyn ma Ochotę na Zimę!


Ochota na Zimę
Nie przegap malowania Owiec


Ochota na Zimę
Galeria&Cafe Stara Ochota
ul. Glogera 6

Już w tę sobotę Teatr Ochoty
i Teatr Młyn malują
Ochockie Owce!!!

Dołącz do nas w
Kawiarni Stara Ochota!

12.02 godz. 15:00-19:00


Kto chce, kto chce
malowane Owce ?
więcej...

Thursday, February 10, 2011

GWT exception in Hosted Mode

I work with GWT version 1.7.0. It's old but our product requires it. Recently I had to debug using Hosted mode. During Hosted mode startup I had an exception

2011-02-08 17:04:31,578 [FATAL] Uncaught Exception:
com.google.gwt.core.client.JavaScriptException:
(TypeError): Object doesn't support this property or method.
 number: -2146827850
 description: Obiekt nie obsługuje tej właściwości lub metody.
    at com.google.gwt.user.client.impl.DOMImplStandard.initEventSystem(Native Method)
    at com.google.gwt.user.client.impl.DOMImplMozilla.initEventSystem(DOMImplMozilla.java:39)
    at com.google.gwt.user.client.impl.DOMImpl.maybeInitializeEventSystem(DOMImpl.java:111)
    at com.google.gwt.user.client.impl.DOMImplStandard.sinkEvents(DOMImplStandard.java:140)
    at com.google.gwt.user.client.impl.DOMImplMozilla.sinkEvents(DOMImplMozilla.java:27)
    at com.google.gwt.user.client.DOM.sinkEvents(DOM.java:1221)


After some investigation I found the reason.
During development, for performance reasons I compile my GWT apps only for Firefox. So this was the case. You must know that in earlier versions of GWT (and so in 1.7.0), application is displayed in special window with embedded Internet Explorer. And now you might look closer to the stacktrace above and see that there are some Mozilla classes involved and that's wrong because for IE we should have only IE classes! So that's the cause I had exception.

So if you want to run Hosted mode you have to compile your GWT application at least with IE support. Add this to you *.gwt.xml config file



<set-property name="user.agent" value="ie6,ie8" />


Or leave it without declaring user.agent so it would be compiled for all supported browsers. Too shame that GWT doesn't warn if it was not compiled for current browser.


If you still have problems with mentioned exception look at an issue in GWT bug tracker.

Tuesday, February 8, 2011

Lady Zgaga

Odkryłem ciekawy feature na Last.fm. W sekcji Playground są różne testowe wersje narzędzi skojarzonych z Last.fm. Sposród wszystkich zaciekawiła mnie lista najczęściej usuwanych utworów z automatycznych list użytkowników. Inaczej mówiąc, gdy Last.fm proponował te utwory, to ludzie je usuwali z listy. Stan na dzień dzisiejszy jest następujący
Ranking najczęściej usuwanych piosenek
No Lady Gaga rządzi! Gdyby nie jakieś zagubione dziewuszki, uzbierałby się cały album na pierwszej stronie. Żeby nie byłą wątpliwości, pani Stefani Germanotta ma bardzo ładny głos i umie śpiewać. Szkoda, że poszła bardzo komercyjną drogą.




Thursday, February 3, 2011

Konkurs: I Ty możesz wymyślić nazwę naszej konferencji

Kapituła pracuje w pocie czoła nad organizacją 5-tej edycji wiosennej
konferencji dla miłośników technologii Java (znanej wcześniej jako
Javarsovia).

W tym roku z powodów formalno-prawnych postanowiliśmy zmienić nazwę
konferencji. Długo staraliśmy się wymyślić nową nazwę i mimo kilku
własnych propozycji, żadna z nich nie była na tyle dobra, abyśmy się w
niej zakochali od pierwszego spojrzenia.

Wierzymy, że społeczność javowa w Polsce to ludzie niezwykle pomysłowi
i kreatywni, dlatego chcemy Was prosić o pomoc w stworzeniu nowej
nazwy. Docenimy wszelkie propozycje, ale chcemy uprzedzić, że
wybierając tą jedyną będziemy kierować się następującymi kryteriami:

1. Nazwa nie może zawierać słowa "java" ani słowa bardzo do niej
podobnego np. "jva" czy "jav".
2. Nazwa nie może być nazwą firmy, produktu lub znakiem towarowym.
3. Atutem będzie, jeśli nazwa kojarzy się z Polską/Warszawą/JUGiem,
programowaniem, konferencją.
4. Atutem będzie, jeżeli nazwa da się w prosty sposób wymówić po
angielsku (choć nie jest to warunek konieczny).

Czekamy na Wasze propozycje, piszcie na adres
nazwa.konkurs@javarsovia.pl . Najlepsze z nich nagrodzimy.

Tuesday, January 11, 2011

Oracle ODBC dla Windows

Potrzebowałem dostępu do bazy Oracle przez ODBC. Niestety Oracle'owy driver odbc jest inny niż wszystkie :-), bo nie pozwala zdefiniować dostępu do bazy wprost, tylko należy użyć spójnego mechanizmu narzędzi Oracle'owych, definiującego połączenie. Mowa o TNS (Transparent Network Substrate), co ja bym nazwał definicją połączenia (zamiast Przeźroczystego Substratu Sieciowego ;-)). TNS może pochodzić z kilku źródeł - lokalnego (specjalnego pliku) i globalnego - np. LDAP. Dzięki temu we wszystkich narzędziach bazodanowych Oracle, podajemy tylko nazwę połączenia zamiast każdorazowo określać wszystkie parametry połączenia. Rozwiązanie zmyślne, ale patrząc przez pryzmat problemów z konfiguracją - nieintuicyjne. 

Aby połączyć się przez Oracle ODBC, należy pobrać sterowniki. Ja znalazłem cały pakiet zwany ODAC (Oracle Data Access Component). Po zainstalowaniu należy zdefiniować TNS naszego połączenia. Do tego celu służy plik tnsnames.ora, który zawiera specjalną składnię. Poniżej podstawowa konfiguracja:


my_conn =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = moj.serwer.pl)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = sid_uslugi)
 )
)


Ponadto należy poinstruować narzędzia Oracle w jaki sposób ma wyszukiwać definicji połączeń. Mowa tu o kolejności przeszukiwania oraz z których źródeł skorzystać (ww. lokalne i/lub globalne). Ustawiamy to w pliku sqlnet.ora. Tu potrzebujemy tylko:

NAMES.DIRECTORY_PATH= (TNSNAMES)

Oba pliki należy umieścić w (już istniejącym) katalogu
%KATALOG_INSTALACJI_ODAC%\product\11.2.0\client_1\Network\Admin

Teraz można już korzystać z ODBC. Jeśli mieliście otwarty program korzystający z połączenia, to dla pewności należy go uruchomić ponownie.