Miesięczne archiwa: Marzec 2011

Wyznaczanie przebytej trasy na urządzeniach z systemem Android

Poprzednim razem, gdy pisałem o moim nowym rowerze i pierwszej przebytej trasie, prezentowałem mapę z ręcznie „wyklikaną” trasą za pomocą strony bikemap.net. O ile sam serwis jest bardzo przyjazny w obsłudze, to sama czynność wyznaczania trasy wymaga przede wszystkim jej pamiętania i orientowania się w okolicy przebytej drogi. Zacząłem więc poszukiwać wygodniejszego rozwiązania.

QR Code: Move! Bike Computer

Zeskanuj i pobierz: Move! Bike Computer

Jako że od jakiegoś czasu mój HTC Touch Diamond pracuje codziennie na Androidzie, skorzystałem z dobrodziejstwa Android Marketu i znalazłem kilka aplikacji spełniających postawione przeze mnie zadanie. Najbardziej spodobała mi się aplikacja Move! Bike Computer, która jako jedyna z przetestowanych przeze mnie oferowała możliwość pracy aplikacji w tle tak, aby Android nie ubił jej procesu. Aplikacja prezentuje na głównym ekranie kilka parametrów wyliczanych w czasie rzeczywistym, takich jak:

  • aktualna prędkość,
  • maksymalna prędkość,
  • średnia prędkość,
  • całkowity czas przejazdu,
  • przejechany dystans,

oraz wiele innych. Mnie interesowało jednakże najbardziej zwinięcie aplikacji w tło i wsunięcie telefonu do kieszeni. To zadanie Bike Computer spełnił znakomicie. Przed jazdą testową uruchomiłem proces nagrywania trasy, w trakcie jazdy odebrałem kilka rozmów, po dojechaniu do celu zakończyłem nagrywanie. Przejechana trasa została zapisana w bazie programu, możliwy był również jej eksport do formatów csv, gpx oraz kml. Można też skorzystać z opcji pokazania trasy na mapie (wymaga połączenia z internetem), która powoduje wyświetlenie trasy w serwisie Google Maps.
Czytaj więcej »

Nowy rower i pierwsza trasa!

Mamy już wiosnę, dni stają się coraz dłuższe i cieplejsze. Czas odstawić samochód i rozpocząć miejskie podróże rowerem! Jako że wysłużony mój stary jednoślad spędził już dobre kilka lat w piwnicy (wychodził na zewnątrz może raz czy dwa na sezon), przeżył też już swoje lata świetności, przyszedł czas na nowy zakup. Po w sumie niedługich poszukiwaniach wybór padł na Cube LTD Comp, rocznik 2009. Rower jest więc używany, co głównie podyktowane było niższymi kosztami w stosunku do zakupu sprzętu nowego. Oryginalnie zamontowany powietrzny amortyzator Rock Shox Dart SL 100mm z blokadą skoku na kierownicy oraz reszta osprzętu pokroju Shimano Deore, Deore SLX i Deore XT zapewnia całkiem niezłe warunki jazdy. Poniżej zamieszczam przykładowe zdjęcie tego modelu w kolorystyce odpowiadającej mojemu egzemplarzowi:
Cube LTD Comp

Rower przetransportowałem w dniu wczorajszym z rodzinnego domu w Olecku, gdzie dotarł wpierw po zakupie, do Warszawy, gdzie mieszkam na co dzień. Po raz kolejny doceniam zaletę pojemności hatchback’a, który bez problemu pomieścił rower bez jakiegokolwiek rozkładania go, czy zdejmowania kół! :) Jako że w Olecku w weekend spadł śnieg, a wczoraj rano przyjechałem samochodem bezpośrednio do pracy, dopiero dzisiaj miałem okazję odbyć pierwszą jazdę nowym nabytkiem.
Czytaj więcej »

Implementacja Comet’a w GWT, czyli jak poradzić sobie z Atmosphere’m

W dobie dzisiejszych aplikacji webowych często wykorzystywanym rozwiązaniem jest technika „Server Push„, występująca również pod nazwą „Comet„. Jest to technika pozwalająca na sprawne przesyłanie komunikatów w kierunku serwer -> klient (przeglądarka). Jak zapewne wiesz, protokół HTTP nie umożliwia przesyłania danych w tą stronę bez zainicjowania połączenia ze strony klienta. Na jakiej zasadzie działa więc Comet? Istnieje kilka popularnych rozwiązań tego problemu.

Najprostszą i najmniej wydajną implementacją jest po prostu cykliczne odpytywanie serwera w celu sprawdzenia, czy istnieją na serwerze nowe komunikaty, jeśli tak to są one zwracane wraz z odpowiedzią zapytania. Jak można się domyślić, odpytań będzie dużo, tym więcej im więcej użytkowników połączy się z aplikacją. Można nieco usprawnić ten mechanizm wprowadzając po stronie serwera pewien czas oczekiwania na nowe komunikaty, jednak nadal dużym narzutem będą same nagłówki HTTP odpytań serwera.

Można też skorzystać z technologii typu Adobe Flash, czy Aplety Java. Za ich pomocą można w łatwy sposób zbudować komunikację serwer -> klient, jednak trzeba się liczyć z tym, że przeglądarka użytkownika nie będzie ich obsługiwała. O ile Flash’a jeszcze da się przeżyć, to aplet Javy może skutecznie zniechęcić użytkownika do dalszego oglądania naszej strony. Często jednak wymagania projektu wykluczają też użycie Flasha, czy innych technologii nie obsługiwanych natywnie przez przeglądarkę, musimy skorzystać więc z innego rozwiązania.

Czytaj więcej »

Zapamiętywanie i walidacja danych w formularzu logowania GWT + JAAS

Widząc rosnące zainteresowanie tematyką bezpieczeństwa w GWT, postanowiłem jak najszybciej dostarczyć Ci kolejną przydatną dawkę informacji. Pamiętasz pewnie wpis o uwierzytelnianiu i autoryzacji w GWT – powstał wtedy mały projekt pokazujący, w jaki sposób połączyć aplikację napisaną w GWT z autoryzacją poprzez mechanizm Javy, a dokładniej użyliśmy JAAS (Java Authentication and Authorization Service). Tamten projekt miał jednak pewne wady, m. in. brak walidacji danych na formularzu logowania oraz nie obsługiwał zapamiętywania tych danych przez przeglądarkę. Pierwszy problem wynikał z użycia przycisku „submit”, który automatycznie wysyłał formularz, nie było więc momentu na sprawdzenie poprawności wysyłanych danych. Natomiast drugi problem jest bardziej złożony i związany z naturą samego GWT. W poszukiwaniu rozwiązania będziemy więc kontynuowali rozpoczęty wcześniej projekt.

Przeszukałem najpierw zasoby internetu, aby sprawdzić, czy występują już jakieś znane rozwiązania wyżej wymienionych problemów. Praktycznie wszystkie przykłady implementacji formularza logowania używają GWT RPC do przesyłania danych, więc nie było w czym przebierać. Jeśli zaś chodzi o zapamiętywanie danych logowania, problemem jest brak bezpośredniej możliwości skorzystania z mechanizmów przeglądarki, bo do tego potrzebny jest formularz wraz z polami loginu i hasła oraz przyciskiem „submit”, który musi znajdować się bezpośrednio w pliku html, a żaden z jego elementów nie może być wstrzykiwany javascript’em. Wszystkie moduły GWT są wstrzykiwane javascript’em w treść strony, dlatego przeglądarka nawet nie proponuje możliwości zapamiętania danych. Czytaj więcej »

Nowy, krótszy, lepszy adres!

Dzisiaj rano zarejestrowałem nową domenę, która stała się głównym adresem mojego blogu. Stary adres oczywiście również działa, jednak zachęcam do korzystania z nowego: yuppy.pl. Serwer został ten sam, więc oprócz adresu nic się nie zmieni.

Będę musiał ponownie czekać na zindeksowanie nowego adresu przez Google’a, ale jakoś to przeżyję. Cieszy mnie natomiast to, że pomimo krótkiego okresu istnienia tego blogu, pewne frazy w wyszukiwarce powodowały zwrócenie starego adresu na pierwszej stronie wyników. Pierwsze odwiedziny z wyszukiwarki zostały zarejestrowane pod słowami kluczowymi „gwt bezpieczeństwo”. Mam nadzieję, że szukający znalazł tu to co chciał, a jeśli nie, zapewniam, że w tym temacie pojawi się jeszcze wiele.

Zachęcam też Ciebie do komentowania moich wpisów, szczególnie tych bardziej technicznych. Jeśli masz jakieś uwagi i zastrzeżenia odnośnie formy przekazu, poinformuj mnie o tym, abym mógł się bardziej dostosować do Twoich potrzeb. Może masz jakiś problem z GWT i chciałbyś, abym go opisał? Jeśli tak, pisz do mnie śmiało.

Nowości w Java 7

Java w wersji 7 zbliża się wielkimi krokami, choć idzie jej to bardzo powoli. Termin wydania pełnej wersji był już kilkukrotnie przekładany, co wynikło również z faktu przejęcia firmy Sun przez Oracle’a. Postanowiono również rozłożyć w czasie wydanie pewnych nowych funkcji języka, dlatego część z nich ukaże się dopiero w wersji 8-mej. Jako że niedawno ukazał się kolejny kamień milowy (M12) 7-ki, który zawiera pełną funkcjonalność nowej wersji języka, a w internecie jest już sporo nieaktualnych informacji o nowościach, jakie mają się w niej ukazać, postanowiłem napisać kilka szczegółów na ten temat.

Zaczęło się od tego, że zainstalowałem dzisiaj środowisko IntelliJ IDEA. Eclipse czasem mnie drażni, ale o konfrontacji tych dwóch IDE opowiem innym razem. Po otworzeniu istniejącego projektu w pierwszej kolejności postanowiłem pogrzebać trochę w opcjach. Tak też dotarłem do ustawień struktury projektu, gdzie obok wyboru SDK można było sprecyzować, jakiej wersji języka chcemy używać. Co ciekawe, przy każdej wersji IDEA wypisuje kilka słów kluczowych związanych z danym wydaniem. Przy wersji 7-mej były to: „Diamonds”, strings in switch, etc. Jako że do tej pory nie byłem na bieżąco z nową Javą, postanowiłem to nadrobić i zobaczyć, co ciekawego kryje się w Javie 7.

Czytaj więcej »

Obsługa transakcji JTA w projekcie GWT + Hibernate

Czasami bywa tak, że mamy gotowy już produkt, bądź większą jego część, ale w pewnym momencie musimy do niego dorobić coś, do czego nasz projekt od początku nie był przystosowany. Zazwyczaj pojawiają się wtedy dwa wyjścia. Pierwsze z nich zakłada głębsze zmiany w kodzie i architekturze aplikacji, aby dostosować ją do nowych potrzeb. Niestety jest to proces pracochłonny, czasochłonny, a ponadto będzie wymagał dogłębnego przetestowania aplikacji w zakresie praktycznie całej jej funkcjonalności. Jeśli nie możesz sobie na to pozwolić, zostaje jak zwykle drugie wyjście, czyli dorobienie czegoś „na szybko”, „na sztywno”, itp. Nie jest to ładne, ale jeśli klient czeka na gotowy produkt, czasem trzeba tak zrobić.

Dzisiejszy artykuł po części dotyka tematu wspomnianego „drugiego wyjścia”, gdyż to, co chcę Tobie zaprezentować, nie często występuje w przyrodzie w takiej właśnie postaci. Świadczy o tym chociażby ilość trafnych odpowiedzi w wyszukiwarce Google’a na zapytanie „GWT + JTA”. Oczywiście jeśli znasz temat, zaproponujesz Spring’a, bądź EJB. I słusznie! O wiele łatwiej jest skorzystać z mechanizmu transakcji JTA, gdy posiadamy wspomniane frameworki. Jeśli jednak masz już gotową, monolityczną aplikację napisaną w samym GWT, a musisz obsługiwać w niej transakcje poprzez JTA, być może zaoszczędzę Ci trochę czasu na rozpoznawanie tematu :) Oczywiście nic nie stoi na przeszkodzie, aby używać JTA w projekcie GWT już od samego początku, dzięki czemu uzyskamy kilka zalet płynących właśnie z wykorzystania tego mechanizmu transakcji.

Czytaj więcej »