Další doteky s G1

Minule jsem nastínil některé drobné vady na kráse a nařknul telefon z vlastností, které jsem myslel, že nemá. Teď už ho mám přece jenom 14 dní, takže bych mohl některé nesrovnalosti uvést na pravou míru a vytáhnout na světlo další problémy a zkušenosti, o kterých se moc nemluví ;-).

Minule jsem nastínil některé drobné vady na kráse a nařknul telefon z vlastností, které jsem myslel, že nemá. Teď už ho mám přece jenom 14 dní, takže bych mohl některé nesrovnalosti uvést na pravou míru a vytáhnout na světlo další problémy a zkušenosti, o kterých se moc nemluví ;-).

Začal bych multitaskingem – reptal jsem, že není možné aplikace jednoduše sestřelit, jako v Symbianu. A reptám dál, pořád jsem ten způsob nenašel. Android totiž handluje s běžícími procesy sám, na základě volné paměti ukončuje nepoužívané aplikace a naopak ty často používané nechává načtené. Myšlenka dobrá, ale nejsem její zastánce, někdy mi nevyhovuje a rád mám přehled o tom, co zrovna běží. Bohužel, mám asi smůlu. Každopádně jakýsi jednoduchý Task manager je v rámci prohlížeče „Linda File Manager“ – zobrazí všechny momentálně načtené třídy (nebo alespoň něco jako public procesy, protože jich tam momentálně vidím 15, což se rozhodně málo) a velikost zbývající volné paměti. Jedná se ale o betu, takže tu existuje možnost, že do budnoucna přibude možnost „kill this task“.

Image Hosted by ImageShack.us

V jednom odstavci jsem taky nařknul Androuše, že není schopen se přihlásit do U2B accountu, není to tak zcela pravda. V prohlížeči webu je možné se přihlásit do účtu na YouTube a spravovat tak videa. Jen video není přehráváno v rámci prohlížeče, ale při jeho otevření se otevře externí aplikace – YouTube player. Právě na tuto aplikaci jsem v minulém blogpostu narážel – Android má mnoho aplikací, pomocí kterých je možné se přihlásit ke svému účtu na tom či tom webu a v rámci té které aplikace využívat služeb daného webu. Aplikace YouTube tohle ovšem neumí, pouze nabízí NEJ videa a případně vlastní Favorites (ovšem nesvázané s účtem na U2B, ale zazáložkované přímo v telefonu). Dalším velice podstatným faktem je ten, že na YouTube jsou některá videa nahrána v HiRes (zřejmě H264 kodek), tudíž je není možné přehrát (fw. 1.1) a je zobrazeno pouze „This video is not available for your device“. Škoda; doufám, že v budoucích releasech firmwaru to bude napraveno a tento kodek přidán, zařízení na dekódování imho kapacity má. Tolik k YouTube videím.

Image Hosted by ImageShack.us

Dalším problémem pro mě bylo přehrávání videí. Resp. ne ani tak samotné přehrávání a úprava videa (na to jsem si zvykl na Symbianu), ale absence přehrávače zvládajícího titulky. Na Symbianu jsem používal SmartMovie, který velmi jednoduše vložil titulky přímo do videaa zárověň video enkódoval, na Androuše jsem našel mnoho dekodérů, ale ani jeden neuměl vkládat titulky. Rozpoutal jsem krátkou diskuzi na cz AndroidFóru, ovšem bez výsledku, nabízený sw nefunguje, funguje špatně… V každém případě dnes vyšel článek na toto téma na blogu „Můj Android, popisující Avidemux na Winblozí platformě. Ještě jsem nezkoušel, ale když už je napsáno, tak by mělo fungovat ;-). Jinak ještě doplním sw, který používám mpro konverzi: AnyVideoConverter pro enkódování a FairUseWizard 2 pro převod dvd do DivX včetně titulků.

Teď bych si dovolil trošku prudy: tlačítko menu občas vůbec nereaguje, nebo reaguje přehnaně. V praxi to vypadá tak, že na něj člověk v dobré víře klikne a nic se nestane. klikne na ně ještě jednou, dvakrát, třikrát… a až po několikátém pokusu si to rozmyslí a zareaguje. Nebo naopak na druhou stranu je možné kliknout jen jednou a menu vyjede a zase zajede, jako při dblclicku. Nelíbí se mi tohle chování.

Dalším mínusem je podsvícení klávesnice. Při určitém druhu osvětlení není vůbec nic vidět, takže je nutné psát opravdu poslepu. Nepříjemné. Bohudík, je tu řešení.

GPS – hnus. Měl jsem externí bluetooth modul se SirfStar III. Nechytal se nějak extra rychle, ale když se chytl, signál si podržel, i když jsem jej hodil do kapsy nebo do batohu. G1 v kapse nebo v batohu se mi vůbec nechytá. Chtěl jsem si zaznamenat běžkařskou trať pomocí MyTracks, ale pomalu jsem začínal mrznout, když jsem stál na místě a čekal, až se chytne GPSka. Nakonec jsem to vzdal a hodil ji (stále hledající) nahoru do batohu, jen pod zip. Po půlhodině jsem telefon vytáhl a stále nic. Když jsem to zkoušel pěšmo (vlastně úplně poprvé), chytla se docela rychle, ale signál si neudržela (v kapse), takže jsem byl nucen nést telefon v kapuci, potom fungovala bez problémů a velmi přesně, vzhledem k rychlosti pohybu.

Velmi rád bych také zmínil vyhledávání na marketu: google vlastní největší vyhledávač na světě a není schopen vyvinout aplikaci, která dokáže vyhledávat? Nevěřím!! Hledal jsem aplikaci , jejíž název byly dvě spojená slova (už si nevzpomenu na název, tak budu používat NejakaAplikace). Search nebyl schopen aplikaci najít, když jsem zadal Nejaka nebo Aplikace. Musel jsem napsat celý název – NejakaAplikace, potom se uráčil nabídnout mi výsledek. Nepříjemné!

Jako poslední bod, který bych v tomto blogpostu rád zmínil je podpora J2ME aplikací.Vlastně spíš nepodpora. Před koupí jsem někde četl, že telefon zvládá J2ME (teď to nemůžu dohledat, ale recenze na mobilmanii i oficiální T-Mobile stránky uvádí „Java: Ano“. Asi měli na mysli Dalvika, protože telefon nativně J2ME nepodporuje. Jsou tu dvě možnosti: Využít „J2ME MIDP Runner“ nabízený na marketu a v rámci něj stahovat midlety z webu a instalovat přímo v telefonu, nebo pomocí MicroEmulatoru překonvertovat jar na instalační balíček androidu – .apk, krásný návod je tady. A moje vyjádření zní: obě možnosti jsou na prd a nefungují. Nepovedlo se mi zprovoznit jedinou hru, kterou bych chtěl. Možná na jednoduché midlety by mohlo být tohle řešení funkční, ale na složitější aplikace rozhodně ne.

V každém případě ovšem pořád z telefonu převažuje spíše pozitivní pocit, i přes zmíněné masařky (a věřím, že jich ještě mnoho dalších najdu, stejně tak, jako že v budoucích verzích budou tyto krpy odstraněny) a využívám jej téměř nonstop.

T-mobile G1

Po předchozích touhách ohledně Koolu a poté HTC Touch HD jsem se včera rozhoupal a definitivně vyrazil do kaufu pro T-Mobile G1 aka HTC Dream s předinstalovaným Androidem. Teď po cca jednom dni používání zkusím shrnout pár věcí, které jsem vykoumal, nebo které bych rád vytkl. (Note that že jsem opravdu naprosto nestranný recenzent, ne jak jinde ;-)).

Po předchozích touhách ohledně Koolu a poté HTC Touch HD jsem se včera rozhoupal a definitivně vyrazil do kaufu pro T-Mobile G1 aka HTC Dream s předinstalovaným Androidem. Teď po cca jednom dni používání zkusím shrnout pár věcí, které jsem vykoumal, nebo které bych rád vytkl. (Note that že jsem opravdu naprosto nestranný recenzent, ne jak jinde ;-)).

Telefon je v pěkné krabici, byl jsem tak natěšenej, že jsem nenásledoval dnešního trendu a nenatáčel, jak jej z krabice vytahuju :-D. Každopádně k prvnímu spuštění jsem se dostal poměrně rychle. Výtka č. 1: když otevírám kryt, pod kterým sídlí baterka a simka, tak tak nějak podivně visí a měl jsem dojem, že jej snad ulomím (je opravdu tenoučký). Ale trocha cviku to hádám napraví. Na druhou stranu pochybuju, že ten kryt budu ještě někdy oddělávat (u mého předchozího Siemense SX1 jsem jej taky neoddělával do doby, než jsem si na cesty koupil další baterku a potřeboval jsem je občas prohodit).

 

 

Nastartováno, krása. Displej vypadá docela ostře, až mě to překvapilo. Neznám rozlišení na SX1, ale když jsem pokukoval po HTC Touch HD a jeho božském rozlišení, tak při srovnání s tímto Drýmem, který má rozlišení skoro poloviční jsem dostával strach, ale body do plusu. Krátké hraní si s prostředím, mnoho wooow situací a jako třešnička spuštění youtube aplikace a natažení jednoho z oblíbených videí – ostrost perfektní, z "hloubky obrazu" jsem si téměř cvrkl do kalhot. Rozčarování přichází se zjištěním, že se nemůžu přihlásit na můj U2B account. (V rámci browseru je to možné, podrobné info v dalším blogpostu)  Body dolů (ale když uvážím, že mi nevyhovuje ani standardní webové rozhraní na webu YT, tak se ani nedivím – mám dojem, že Google má prostě YT na háku).

Pokračujeme v krasojízdě: spouštím sync, protože dle návodu mě měl hned po startu být nabídnut box pro zalogování na můj google acc, což se nestalo, a ejhle: už tu je přihlášený uživatel htcroger a systém po mě chce heslo k jeho účtu. Co s tím? Možnost jednoduchého odhlášení nenacházím nikde kolem, ani v settings. Hodně mínusbodů!! Chvíle googlení a nacházím řešení – "Reset device to factory settings". Třikrát fuj!

Zresetováno, teď se opravdu po startu hned můžu nalogovat na svůj google acc a hned jsou natahovány kontakty, mejly… (v telefonu frčí Gears) Koukám do adresáře, jsou v něm pouze lidé z mých kontaktů na googlu, kteří mají uložené telefonní číslo. Do mínusu připisuju fakt, že telefon mi nenabídl import kontaktů ze simky (sice tuto možnost rozhodně nevyužívam a kontakty na simce jsou opravdu outdated a mám je v csv na kartě), ale určitě by mě tato možnost potěšila.

Nořím se do zkoumání prohlížeče, ale především map – na street view v telefonu jsem se nemálo těšil. Nádhera, funguje jak má. Jenom panáčka na silnici vždycky umisťuju až na druhý pokus, když ze street view přepnu do jiné aplikace, po návratu jsem na pozici, kde jsem začínal a ne, kde jsem končil.

S tím souvisí další věc – multitasking. Je tam, nebo není tam? V Symbianu jsem si zvykl, že můžu vyvolat menu běžících aplikací a ručně je killnout, tady otevřu pouze menu recent apps, ale nevím, jestli běží, nebo neběží. Asi běží a paměť je uvolňována podle potřeby, takže přístup k těm běžícím (=více používaným)  je rychlejší.

 

 

Tohle je opravdu "first touch" post, takže první dojmy z dalších věcí shrnu do dalšího, abych to tu neprodlužoval a nenutil to nečíst celé :-).

Libisemi, tvorba bookmarkletu podruhé

Minule jsem popsal způsob vytvoření bookmarkletu a částečně řídicí a zobrazující (odpovídající) logiku na straně serveru s tím, že se nejdená o finální řešení a má svoje mouchy. Tyto mouchy jsem vychytal a vyzkoušel opravené řešení v praxi a zjistil, že jsem zapomněl na poměrně podstatnou věc – zabezpečení a neumožnění croos domain AJAX požadavků, alespoň u slušných prohlížečů: stávající skript totiž přidal k cizí stránce můj kus kódu, který se snažil připojit na můj (=cizí) server. Takže jsem si naběhl a končil na výjimce "Access to restricted URI denied" code: "1012" nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)". Když už jsem ale minule slíbil pokračování stávajícího způsobu, dokončím popis a potom se pokusím problém vyřešit nejjednodušším možným způsobem.

Minule jsem popsal způsob vytvoření bookmarkletu a částečně řídicí a zobrazující (odpovídající) logiku na straně serveru s tím, že se nejdená o finální řešení a má svoje mouchy. Tyto mouchy jsem vychytal a vyzkoušel opravené řešení v praxi a zjistil, že jsem zapomněl na poměrně podstatnou věc – zabezpečení a neumožnění croos domain AJAX požadavků, alespoň u slušných prohlížečů: stávající skript totiž přidal k cizí stránce můj kus kódu, který se snažil připojit na můj (=cizí) server. Takže jsem si naběhl a končil na výjimce "Access to restricted URI denied" code: "1012" nsresult: "0x805303f4 (NS_ERROR_DOM_BAD_URI)". Když už jsem ale minule slíbil pokračování stávajícího způsobu, dokončím popis a potom se pokusím problém vyřešit nejjednodušším možným způsobem.

Protože je člověk od přírody tvor lenošný a já nedělám výjimku svému druhu, nechtělo se mi hrát si httpRequestem a ručně dolaďovat bezpečnostní chybky, optimalizovat… Vzal jsem si proto na pomoc js framework jQuery, který Ajax zvládá za mě a věřím tomu, že mnohem lépe a efektivněji. Hned jsem tímto přístupem zabil dvě mouchy jednou ranou: první moucha je zmíněna na předchozím řádku (nebo spíše hejno much) a ta druhá – v původní verzi bookmarklet fungoval až po druhém kliknutí, což je samozřejmě neomluvitelné. Tuším, že je to způsobeno tím, že při prvním klepnutí se sice skript připojí k dokumentu, ale volané metody se neprovedou s tím, že jsou momentálně neznámé. Divné, ale je tomu tak, po druhém klepnutí na bookmarklet je už všechno v pořádku. Stačí samozřejmě na konec vkládaného skriptu vložit volání potřebných rutin a při jeho přiložení k dokumentu se okamžitě provedou.

javascript:
    void((
        function(){
            var element=document.createElement('script');
            element.setAttribute('src','http://www.libisemi.cz/send.js?i='+new Date().getTime());
            document.body.appendChild(element);
        })()
    )

Stejným způsobem využívám i nové volání pomocí jQuery, které zveřejňuji na následujícím výpise. Do dokumentu pomocí bookmarkletu vkládám tento skript (viz. výše) a zároveň i komprimovanou verzi knihovny jQuery, která se nachází v tomtéž souboru, takže stačí jedno klepnutí na bookmarklet a na lokálním stroji vše funguje jako švýcarské hodinky. Co se týká obsahu bookmarkletu, oproti minulé verzi tam přibyl "parametr" getTime(). Ten je tam proto, aby prohlížeč vzal v potaz změny ve skriptu send.js a nenačítal jej z cache; s getTime() je totiž požadovaná adresa vždy jedinečná, čili načítána znovu.

 /*
 * jQuery JavaScript Library v1.3.1
 * http://jquery.com/
 *
 * zde je vložená komprimovaná verze jQuery knihovny
 */

var u=encodeURIComponent(location.href);

$.ajax({
    type: "POST",
    url: 'http://www.libisemi.cz/addajax',
    data: 'url='+u,
    success: function(s){
        . . .
        window.location = "http://www.libisemi.cz/addform/"+id;
        . . .
    }
});

 V tomto případě ovšem pořád přetrvává výše zmíněná chyba z důvodu cross site requestů. Stačí chybu nacpat do googlu a pár řešení vyjede. Našel jsem ovšem efektivnější možnost posílání url a to tak, jak jsem původně chtěl, takže směle skvěle se vrhnu do něj, je to jednodušší a hlavně pohodlnější, než několik skriptů a využívání třeba JSONu.

edit: Chyba lávky! Ještě jednodušší to je. Nepředával jsem parametr url, takže ono zmíněné řešení mě pokoplo správným směrem – CakePHP dokáže využívat parametry u metody get!!! Takže jsem do controlleru přidal jednoduchou bezparametrickou metodu add(), ve které tyto parametry přečtu:

function add(){
        if(isset($_GET['vstup']))
            $vstup = $_GET['vstup'];
   . . .

A teď můžu tento controller bez problému volat i s adresou jako s parametrem (např. http://www.libisemi.cz/add?vstup=http%3A%2F%2Fshmoulicek.unas.cz/ ) . Aneb potvrzuji moje oblíbené rčení i chování: proč dělat věci jednoduše, když jdou dělat i složitě :-).