2008-01-17

Znacznik <script> w IE7

Straciłem ładnych parę godzin szukając przyczyny dlaczego aplikacja GWT jest niewidoczna w IE7. Działała bez problemu w Firefoksie i Safari, a w Internet Explorerze wyświetlana była pusta strona. Ponieważ to GWT, to najpierw sprawdziłem kod w Javie, potem wygenerowane JavaScripty - nic podejrzanego nie było widać. Ostatecznie okazało się że problem tkwi w stronie, na której aplikacja jest umieszczona. IE7 poniższy zapis traktuje jako błędny i ignoruje go:
<script language="javascript" src="gwt.js"/>
Wystarczy dodać znacznik zamykający:
<script language="javascript" src="gwt.js"></script>
i skrypt jest poprawnie wczytywany. Po tej historii sprawdziłem stronę walidatorem W3C i rzeczywiście:
The sequence <FOO /> can be interpreted in at least two different ways, depending on the DOCTYPE of the document. For HMTL 4.01 Strict, the '/' terminates the tag <FOO (with an implied '>'). However, since many browsers don't interpret it this way, even in the presence of an HMTL 4.01 Strict DOCTYPE, it is best to avoid it completely in pure HTML documents and reserve its use solely for those written in XHTML.

2008-01-10

Groovy i Hibernate w jednym stali domu

Postanowiłem w pewnej Bardzo Dużej Aplikacji Webowej podnieść wersję Groovy z 1.0 na 1.5. Bo w 1.5 są adnotacje, typy generyczne, typy wyliczeniowe oraz jakże mile widziane w naszej korporacji "significant performance gains".

Sama zmiana wersji jest banalna. Projekt jest budowany Mavenem, więc zmieniamy w pom.xml wersję z 1.0 na 1.5.1 i przy okazji identyfikator grupy z groovy na org.codehaus.groovy (reorganizacja w centralnym repozytorium). Potem mvn install i za chwilę mamy gotową aplikację. Aplikację, która nie chce się deployować.

Okazuje się, że Groovy 1.5, a konkretnie znajdująca się w jego zależnościach biblioteka ASM 2.2 wywołuje konflikt z cglib 2.1_3. Cglib jest wykorzystywana przez Hibernate, a w rzeczonej aplikacji Hibernate jest kluczową technologią. Po zmianie ASM na wersję 1.5.3 działającą z cglibem przestaje działać Groovy, więc nie tędy droga. Rozwiązaniem jest użycie wersji cglib-nodep, która nie wymaga ASMa (a dokładnie klasy ASMowe, przeniesione do innych pakietów, ma włączone do swojego kodu).

Pewnym problemem jest Maven - artefakty cglib 2.1.3, asm 1.5.3 i asm-attrs 1.5.3 są w zależnościach Hibernate. O ile zmianę wersji ASMa możemy wymusić za pomocą dependency management:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm-attrs</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
</dependencyManagement>

to zmiana cglib na cglib-nodep wymaga wykluczenia cglib z zależności Hibernate i dodania cglib-nodep jako nowej zależności:
<dependencies>
<dependency>
<groupid>org.hibernate</groupid>
<artifactid>hibernate</artifactid>
<exclusions>
<exclusion>
<groupid>cglib</groupid>
<artifactid>cglib</artifactid>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupid>cglib</groupid>
<artifactid>cglib-nodep</artifactid>
<version>2.1_3</version>
</dependency>
</dependencies>

Nie jest to rozwiązanie do końca eleganckie. Konieczna jest modyfikacja (i późniejsze pilnowanie) zależności Hibernate we wszystkich projektach wchodzących w skład aplikacji. Jednak w następnej wersji (3.2.6) problem ma być załatwiony - Hibernate będzie wykorzystywać cglib 2.2 i ASM 2.2 (zgłoszenie HHH-2875).

[aktualizacja 2008.03.03]

8. lutego została wydana wersja 3.2.6, jednak nie ma w niej zapowiadanej poprawki - została przesunięta na wersję 3.3, czyli bliżej nieokreśloną przyszłość.

2008-01-09

ASUS A696

Od około czterech tygodni jestem szczęśliwym :-) posiadaczem ASUSa MyPal A696. Zabawka ma odbiornik GPS (to główny powód zakupu), kartę Wi-Fi i moduł Bluetooth, działa pod systemem Windows Mobile 6.0 (niespodzianka, bo na stronie producenta cały czas jest 5.0). Jednak nie obyło się bez problemów.

PDA od początku nie rozpoznawał karty SD - po każdym wyłączeniu i włączeniu pojawiał się irytujący komunikat o nieznanej karcie. Żeby było śmieszniej taki sam komunikat pojawiał się nawet wtedy, gdy karty w ogóle nie było w slocie. Po zerknięciu na stronę ASUSa okazało się że problem jest znany i występuje w firmware V03.0720.00. Do ściągnięcia jest patch który podnosi wersję do V03.0735.00 i łata przy okazji kilka innych dziur.
Po kilku dniach objawiła się rzecz poważniejsza: przestała działać karta Wi-Fi. Padała stopniowo - początkowo zdarzało się zrywanie połączenia (nawet bardzo blisko routera), potem połączenie znikło na dobre a system przestał w ogóle widzieć Wi-Fi. Szczęśliwie wada ujawniła się w ciągu 10 dni od zakupu - w takiej sytuacji ASUS wymienia sprzęt na nowy bez zbędnych pytań.

Drugi A696 miał od razu zainstalowany najnowszy firmware V03.0735.00 i jak dotąd (puk puk) działa idealnie: karta 2GB Extreme III jest rozpoznawana, Wi-Fi łapie sygnał w całym mieszkaniu. Nie miałem jeszcze okazji pojechać gdzieś dalej z GPSem, ale nie sądzę aby miały być jakieś problemy - wystawiony za okno bez problemu łapie fixa.

Generalnie urządzenie warte jest swojej ceny. Planując zakup brałem pod uwagę także Mio P560 - bardzo podobne możliwości do A696 i trochę tańszy. Na korzyść ASUSa przemawia czas pracy baterii (w testach, ale na czymś się trzeba oprzeć), trochę wydajniejszy procesor i - last but not least - wygląd zewnętrzny.

[aktualizacja 2008.01.27]

Sprawdziłem doświadczalnie jak sprawuje się bateria. Po pełnym naładowaniu wytrzymała ponad 4 godziny używania GPSa (AutoMapa, jasność ekranu około 40%), godzinę z włączonym Wi-Fi i 2 dni czuwania. Moim zdaniem zupełnie dobrze.

© The Useful Pot To Keep Things In
Maira Gall