2010-08-08

Google App Engine

Google App Engine (for Java) umożliwia uruchamianie aplikacji webowych na serwerach Google. Używając jednego konta można zarejestrować do 10 aplikacji, każda z nich może wykorzystywać do 1GB przestrzeni dyskowej, po 1GB transferu wychodzącego i przychodzącego oraz 6.5 godziny znormalizowanego 1) czasu procesora na dobę. I to wszystko za darmo. Całkiem nieźle, prawda? Jest jednak jedno ale: Google'owa maszyna wirtualna Javy i serwer aplikacji mają trochę ograniczeń, na które można trafić próbując uruchomić coś więcej niż "Hello World".

Nie wnikając w zbędne szczegóły: moja aplikacja miała rejestrować obiekty w bazie danych (za pośrednictwem JPA) oraz udostępniać je w postaci zserializowanej do XMLa. Trafiłem na kilka mniej lub bardziej poważnych problemów.


[1] Klasa utrwalana za pomocą JPA nie może być powiązana z kilkoma obiektami tego samego typu. W poniższej sytuacji:
@Entity
class A {
}

@Entity
class B {
@ManyToOne
A pole1;
@ManyToOne
A pole2;
}
dostaniemy wyjątek:
Error in meta-data for B.pole2: Class B has multiple relationship fields of type A: pole1
and pole2. This is not yet supported.


[2] Nie jest obsługiwana strategia dziedziczenia SINGLE_TABLE. W przykładzie:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
class A {
}

@Entity
class B extends A {
}
dostaniemy wyjątek:
Found inheritance strategy 'SINGLE_TABLE' on B.  This strategy is not supported in this
context.

[3] Google App Engine dopuszcza jako identyfikatory obiektów typy Long, String oraz własny typ com.google.appengine.api.datastore.Key. Jednak gdy obiekt ma być powiązany z innym:
@Entity
class A {
@Id
Long id;
}

@Entity class B {
@ManyToOne
A a;
}
jego klucz nie może być typu Long. W powyższym przykładzie dostaniemy wyjątek:
Cannot have a java.lang.Long primary key and be a child object


[4] Nie jest obsługiwane zachłanne wczytywanie powiązanych obiektów. Przy mapowaniu:
@Entity
class A {
}

@Entity
class B {
@ManyToOne(fetch = FetchType.EAGER)
A a;
}
serwer zapisze do logu ostrzeżenie:
WARNING: Meta-data warning for B.a: The datastore does not support joins and therefore
cannot honor requests to eagerly load related objects.
The field will be fetched lazily on first access.
i zgodnie z jego treścią, obiekt powiązany trzeba będzie jawnie doczytać.


[5] Niedostępna jest klasa sun.reflect.ReflectionFactory, która wbrew nazwie nie jest specyficzna dla Sunowskiej implementacji JVM (jest dostępna także w maszynach wirtualnych IBMa i Apple). Co prawda nie próbowałem jej używać bezpośrednio, ale pośrednie owszem. Próba wykorzystania biblioteki XStream do serializacji obiektów do XMLa kończy się wyjątkiem:
java.lang.NoClassDefFoundError: sun.reflect.ReflectionFactory is a restricted class.


[6] W niektórych przypadkach uprawnienia nie pozwalają na akcje, które w typowych maszynach wirtualnych są dopuszczalne. Przykładem może być dziedziczenie z klasy java.io.ObjectOutputStream (wykorzystywane np. przez Apache Wicket i XStream) - App Engine zgłasza wyjątek:
java.security.AccessControlException: access denied
(java.io.SerializablePermission enableSubclassImplementation)


(*)Znormalizowana jednostka zużycia mocy obliczeniowej jest - dość mgliście - określona jako wydajność 1.2 GHz procesora z serii x86 Intela.
Share:

2010-06-22

iPhone OS 4

Wczoraj pojawił się w sieci update do iPhone OS 4 (czy według nowej nomenklatury iOS 4). W pierwszym odruchu chciałem poczekać z aktualizacją - wiadomo: problemy wieku dziecięcego, zawsze bezpieczniej jest instalować drugie wydanie nowego systemu. Jednak po krótkim wahaniu uznałem, że trzeba być twardym a nie miętkim i zainstaluję. Zerknąłem tylko pobieżnie na forum MyApple.pl i nie znalazłszy żadnych niepokojących sygnałów (właściwie nie znalazłszy wiele ponad "jakie mam wolne łącze", "a u mnie jeszcze 5 minut" i "czy zadziała po jailbreaku?") kliknąłem przycisk "Update" w iTunes.
Niby wszystko poszło ok: backup danych z telefonu, ściągnięcie nowej wersji systemu, instalacja i synchronizacja danych już z iOS 4. Po restarcie iPhone'a zaniepokoił mnie fakt, że zaczął do mnie mówić po angielsku. Gdy po wpisaniu PINu połączył się z siecią 3G zaniepokoiłem się trochę bardziej - w moich ustawieniach 3G było wyłączone. Na ekranie domowym co prawda były kupione aplikacje, ale w kolejności zdecydowanie losowej. Niedobrze. Kontakty - ok, ale to akurat się zsynchronizowało z systemową książką adresową. Historia SMSów - pusto. Aghrrr. W tym momencie zrobiłem się bardzo nerwowy. Niby nic takiego, ale jakoś tak mam że nie kasuję SMSów i nie chciałbym ich w tak głupi sposób stracić. Wykonanie "Restore" w iTunes (przywrócenie ustawień fabrycznych, a następnie odtworzenie danych z backupu) też nic nie dało - najwyraźniej backup robiony przed aktualizacją nie całkiem się udał, a iTunes nie uznał za stosowne poinformować o tym...
Kopia danych telefonu znajduje się w katalogu domowym w /Library/Application Support/MobileSync/Backup. Niestety przechowywana jest tylko ostatnio zrobiona, a więc nie na wiele się zdała. I nagle - one blinding flash of sense! Trzeba wyciągnąć backup z backupu tzn. z Time Machine. Tutaj muszę sobie pogratulować zapobiegliwości: przed aktualizacją telefonu kliknąłem "Backup Now" w Time Machine ot tak, na wszelki wypadek. Dzięki temu miałem zachowany jak najbardziej aktualny stan telefonu jeszcze z systemem 3.1.3. Po skasowaniu uszkodzonej kopii w katalogu ../Backup, nadpisaniu jej wersją z Time Machine i wykonaniu "Restore" (jestem genialny! mój plan zadziałał! jestem wybrańcem! no chodź, robimy performance!) iPhone przywitał się po polsku i cała zawartość była na swoim miejscu. Czego i Państwu życzę.
Share:

2010-05-26

Amazon bardziej dostępny w Polsce

Dostałem wczoraj mailing z Amazona informujący o rozszerzeniu grupy towarów wysyłanych do Polski. Oczywiście najbardziej zainteresowała mnie elektronika - kliknąłem w link "Learn more" i trafiłem na stronę "Super Saver Delivery in the UK". Trochę nie na temat. Jednak po sprawdzeniu w tabelkach "Delivery Rates" dla naszego regionu okazało się [tada!], że rzeczywiście dla polaków już są dostępne kategorie "PC" i "Electronics", przy czym koszty przesyłki nie są wyższe niż były dotąd dla książek. Ponieważ ceny w angielskim Amazonie zawierają angielski VAT a koszt przesyłki nie zawiera VATu wcale, to najprostszym sposobem na sprawdzenie rzeczywistej ceny jest wrzucenie towaru do koszyka i kliknięcie na "Proceeed to Checkout".
Jako że trochę zastanawiam się nad wymianą notebooka, to sprawdziłem MacBooka Pro 13" (model MC374) i 15" (MC375). Z przesyłką i VATem ten pierwszy kosztuje 970 GBP a drugi 1166 GBP, co przy dzisiejszym kursie funta w mBanku daje odpowiednio 4823 i 5797 PLN. Oficjalne ceny to 4999 i 6499 PLN, więc rzeczywiście jest taniej (w przypadku 13" nie jakoś powalająco, ale jednak), a gdyby funt wrócił do poziomu sprzed dwóch miesięcy to byłoby rewelacyjnie. Na pohybel polskim dystrybutorom Apple.
Share:

2010-05-11

Emoji w iPhone

Jednym z efektów ubocznych niedawnej imprezy rodzinnej była wymiana doświadczeń z kuzynem będącym - szczęśliwym oczywiście - posiadaczem iPhone. Dowiedziałem się m. in. jak włączyć klawiaturę zawierającą japońskie emoticony emoji. Jestem pewien, że jest to jedna z najbardziej pożądanych funkcji iPhone'a więc niniejszym dzielę się instrukcją How to enable emoji emoticons on your iPhone. Sposób jest iście magiczny, ale działa co widać na obrazku poniżej.

BTW: jak można przeczytać w Wikipedii Apple i Google proponują dodanie emoji jako części standardu Unicode. Dokument ma nieco ponad rok i nie został jeszcze zatwierdzony. Zapewne szacowne Konsorcjum Unicode zastanawia się czy aby na pewno świat potrzebuje standaryzacji symboli typu "woman with bunny ears" (kod 1f356).
[aktualizacja 2010.05.12]
Obrazek powyżej chyba nie oddaje całej powagi sytuacji. Oto przegląd wszystkich emoji dostępnych w iPhone (po kliknięciu otwiera się w pełnej rozdzielczości).

Share:

2010-05-03

Novatron NTR 81

Gdy liczba poniewierających się w okolicy telewizora płyt z filmami dla dzieci osiągnęła liczbę kilkudziesięciu pomyślałem "ja to muszę skomasować" i zacząłem przegląd dostępnych na polskim rynku NMT. Wcześniej słyszałem tylko o dwóch: Popcorn Hour i Xtreamer, ale okazało się że wybór jest znacznie szerszy. Większość tego typu urządzeń jest stosunkowo nowa i produkowana przez mało znane firmy, więc można się spodziewać mniejszych lub większych niedoróbek. Dlatego ważnym kryterium przy wyborze była dostępność na miejscu - za stary jestem na zabawę w reklamacje sprzętu kupionego wysyłkowo. We Wrocławiu dwie firmy specjalizują się w NMT: Human Media i iCroon, Human Media ma bogatszą ofertę i postanowiłem wybrać coś u nich. Z bardziej zaawansowanych urządzeń najlepszy wydaje się Popcorn Hour C200, ale po pierwsze jego cena jest dość wysoka a po drugie wygląda dość siermiężnie (a nie mam możliwości umieszczenia odtwarzacza w szafce na przykład). Niedrogi i o przyzwoitych możliwościach jest Xtreamer, ale dla mnie zdyskwalifikował go brak wyjścia component (jedyne HDMI w telewizorze mam zajęte przez PS3). Ostatecznie wybór padł na NTR Novatrona. Poszczególne modele 81, 82 i 83 różnią się tylko obudową, a ponieważ najbardziej pasowała mi pionowa kupiłem NTR 81.
Po kilku dniach użytkowania wrażenia są pozytywne, ale nie jest idealnie.
+ Bardzo dobra jakość obrazu, nawet przy podłączeniu przez kabel composite filmy HD wyglądają wyraźnie lepiej niż DVD.
+ Wygodny i estetyczny interfejs. Zarówno część służąca do przeglądania i odtwarzania filmów, jak i konfiguracyjna są logicznie zaplanowane i działają szybko i stabilnie.
+ Wygodny pilot, szczególnie porównując z tymi które są dodawane do odtwarzaczy innych firm.
- Wentylator jest zdecydowanie za głośny. Wieczorem, przy zamkniętych oknach słuchać go bardzo wyraźnie. W czasie filmu brzęczenie trochę ginie, ale w cichszych scenach jednak jest słyszalne. Być może to kwestia tego konkretnego egzemplarza - postaram się porównać w sklepie z innym.
- Pilot wymaga dokładnego celowania - wystarczy go odchylić (szczególnie w pionie) i przestaje reagować.
- Serwer FTP jest zbyt wolny: transfer (przez gigabitowy router) do NTRa to 5.7 MB/s, z NTRa 6.4 MB/s. Dodatkowo w czasie kopiowania reakcja na naciśnięcie klawiszy pilota jest wyraźnie opóźniona, choć na odtwarzanie transfer w tle nie ma wpływu.
- Drobne błędy przy obsłudze obrazów ISO - podświetlenie opcji menu DVD niekiedy jest w niewłaściwym miejscu.
Nie sprawdzałem jeszcze nagrywania - we Wrocławiu nie ma telewizji w standardzie DVB-T. Pewnie dla przetestowania spróbuję kiedyś podłączyć Wii przez wejście composite, ale tak można nagrywać tylko w rozdzielczości PAL.
Podsumowując: jest dobrze, odtwarzacz jak najbardziej spełnia funkcje do których jest przeznaczony, a do pełni szczęścia brakuje cichszego chłodzenia. Panowie w Human Media wydają się chętni do współpracy, więc liczę na to że gdyby trafił się mniej hałaśliwy egzemplarz to uda się wymienić.
[aktualizacja 2010.05.06]
+ Pomimo że w instrukcji nie ma nic na ten temat NTR 81 obsługuje Makowy system plików. Przydatne bo dysk zewnętrzny mam sformatowany w HFS właśnie.
Share: