Posts tagged Web
Google I/O Extended Brno
0Jsa pln dojmů z dvouhodinové návštěvy akce Brněnské GUG s promítáním live streamu z Google I/O si asi budu nucen ublognout nějaké postřehy a komentáře, i když je jasné, že zítra toho bude plné podhoubí (twittosféra je nasycena už teď). Protože ale paralelně sleduju další stream, tak to bude jen velmi stručně.
Akce začala v 18 hodin našeho času, dostali jsme k ní nějaké doughnuty, pitivo a heslo na wifi, pak se již mohlo začít. Nutno poznamenat, že slibovaní hosté zřejmě nedorazili (utekl jsem dřív pryč a koukám, že Jakub Čížek se nechecknul na Gowalle, spot jsem dokonce musel vytvářet já :-)).
První uvedenou novinkou byly Google Movies (pokud se to fakt tak jmenuje) – služba umožňující pronájem videa a jeho spuštění na jakémkoliv zařízení svázaném s vaším google accountem. Pronájmem mám na mysli opravdu pronájem – za pár dolarů si koupíte práva na zkouknutí filmu, na což dostanete nějakých 30 dní, po započetí sledování 24 hodin. Pro android by měla existovat nová aplikace Movies a jak se dalo čekat, je to US only.
Dalším uvedeným produktem byl Google Music, v betaverzi. Funguje stejně, jako Amazon cloud player – (pouze ve státech) nedá se nakupovat hudba, ale je možné hudbu si tam skrze aplikaci (zmíněna platforma Windows a Mac) nahrát a odtud z jakéhokoliv zařízení se stejným google účtem streamovat. Ano, streamovat – aby se prostor nedal využít k pirátským aktivitám. (pouze bych rád dodal, že doufám v brzké chcípnutí Sony, EMI a dalších ne zkostnatělých institucí, ale rovnou zkamenělých, které by si měly uvědomit, že hudbu nezabíjí kopírování, ale ony!) Pro streaming opět existuje aplikace na marketu, ale na žádném mém zařízení nejde stáhnout :-(.
Vývojáři také byli ujištěni, že svoje aplikace budou vyvíjet pouze jednou pro všechna zařízení – i Google TV bude mít android market. Znamená to teda zřejmě, že se vývoj neforkne pro tablety (a další zařízení) a telefony, jak to vypadalo doteď. Neznamená to ale samozřejmě zpětnou kompatibilitu, pořád bude samozřejmě existovat minimalSDK v manifestu.
Další peckou je vydání Accessory development kitu založeného na Arduinu (samozřejmě je vše otevřené, takže je možné očekávat boom hardwarových serepatiček, jako příklad bylo uvedeno sportovní náčiní) a vůbec větší podpora dalšího hardwaru, mimo jiné bude USB fungovat jako host, takže bude možné připojit klávesnice, gamepady a další věcičky. Demonstrace proběhla na gigantickém bludišti ovládaném tabletem s akcelerometry.
S tím souvisí představení dalšího produktu – Android@home – Androidu jakožto centrálního bodu pro ovládání inteligentních domů. A to počínaje nastavováním termostatu, zhášením světel, ale také multimédii – demonstrována byla výše zmíněná služba Music, kdy zakoupenou hudbu bylo možné pomocí telefonu pustit a jako výstupní zařízení nastavit hifi v obýváku a přehrávač v kuchyni.
To je víceméně vše, na co si z úvodu vzpomínám a teď mi běží ve streamu další android novinky a jsou to takové pecky, že se omlouvám a jdu sledovat! Jasné je, že je možné se v dohledné době těšit na obrovský boom gadgetů a všemožných více či méně praktických zařízení připojitelných k androidu a také samozřejmě S androidem. Jako třeba tablet Galaxy Tab, který dostali účastníci konference jako dárek.
PS. pomocí Moderátoru je možné pokládat otázky pro jednotlivá témata.
Jak se dostat na zabezpečené služby státní správy?
0Pod mírně bulvárním názvem tohoto blogpostu nehledejte žádný návod na hákování webů státních institucí. Pouze jsem se snažil vytvořit klienta (v Javě) pro komunikaci s webovými službami nalézajícími se na serveru, který je zajištěn certifikátem vydaným certifikační autoritou PostSignum a aby to nebylo tak jednoduché, tak uživatel je autentikován na základě osobního certifikátu.
Každý slušný člověk začne nejprve googlením, kdy najde nejeden příklad navazování spojení pomocí https (řekněme HTTP over TLS), další googlení potom poodkryje další příklady, tentokrát jak použít klientský certifikát. Na tomto základě už je možné začít stavět, nejprve tedy metoda pro získání ssl socket factory, kterou použijeme pro kontrolu identity:
private SSLSocketFactory getFactory(File pKeyFile, String pKeyPassword) throws...{ KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509"); KeyStore keyStore = KeyStore.getInstance("PKCS12"); InputStream keyInput = new FileInputStream(pKeyFile); keyStore.load(keyInput, pKeyPassword.toCharArray()); keyInput.close(); keyManagerFactory.init(keyStore, pKeyPassword.toCharArray()); SSLContext context = SSLContext.getInstance("TLS"); context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom()); return context.getSocketFactory(); }
Tato factory se předá do vytvářeného zabezpečeného spojení, kdy je tímto způsobem poskytnut údaj pro autentikaci uživatele na straně serveru. Tedy metoda vracející toto spojení:
public HttpsURLConnection getConnection() throws ...{ URL url = new URL("https://server:844/"); HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); con.setSSLSocketFactory(getFactory(new File("cert_sign.p12"), "heslo")); return con; }
Teď je možné se pomocí zavolání connect() připojit, ale protože nejsou v úložišti důvěryhodných certifikátů vložené certifikátu serveru, snaha o připojení skončí s výjimkou:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Nejprve jsem se snažil mezi důvěryhodné certifikáty importovat certifikát kořenové autority PostSignum pomocí nástroje keytool
sudo keytool -import -alias gwc.cpost.cz -keystore /etc/java-6-sun/security/cacerts -file root.pem
což však nevedlo nikam, potřeboval jsem konkrétní certifikáty konkrétního stroje a s tím mi pomohla utilitka InstallCert (zdrojový kód, takže je to důvěryhodné ;-)). Vytvořený soubor jssecacerts je vlastně původní cacerts s přidanými certifikáty požadovaného serveru, takže je možné jej nakopírovat na odpovídající místo, pomocí keytool -list se podívat, jestli je vše v pořádku a opět vyzkoušet spojení.
Spojuje se, ale to je tak celé, takže se teď zabývám následujícími odkazy:
Spanish inquisition
0I stala se mi taková nemilá věc, jako před dávnými časy. Dostal jsem banán na věhlasném českém serveru novinky.cz. Důvod? Není mi známý, pouze jsem zmínil Španělskou inkvizici. Holt asi měl někdo špatný den, nebo zaměstnávají paní Pohlovou, takže jsem jim pro jistotu napsal zpět. Odpovědi se mi bohužel nedostalo, asi to posílal automat. Škoda, docela by mě zajímalo, o co šlo.
Proč vyhazovat peníze za čtyři náměstí?
0Řekl bych docela slušné peníze na to, že je to taková hovadina. Ano, Yahoo zvažuje koupi location based sociální sítě FourSquare. Mluví se o 80 milionech dolarů. Opravdu má tahle síť takový potenciál? Opravdu další Twitter, jak tvrdí Daniel Dočekal na Lupě?
Troufám si tvrdit, že se bude jednat o vyhozené peníze (pokud teda Yahoo nemá v plánu celý tento projekt uzavřít), uživatelská základna nemůže být tak veliká, aby šplouchla do moře Yahoo uživatelů a případně rozšířila FireEagle. Nebo je dneska prostě moderní mít svoje uživatele a vědět, kde se nacházejí? Jasně, Google rozdal (i prodal) hromady telefonů s androidem, pomocí Latitude o sobě uživatel pravidelně „práská“ svoji polohu, geotagované fotky vkládané na Flickr, Picassu či kamkoliv jinam už dneska nejsou k divení, stejně tak automatické sdílení polohy při Twitování. Uživatelé na sebe rádi žalují, proto se svou troškou do mlýna spěchá i Facebook. Ok, žádná křeč. Ale že by bylo opravdu tohle odvětví tak lukrativní?
Ano, cíleně mířená reklama – víme, kam uživatel chodí, co tam dělá, s kým se stýká… Ale opravdu to uživatelé budou tolerovat? A pokud ano, opravdu na sebe budou žalovat po pravdě? Když si vezmu na paškál zmíněný FourSquare – jedná se defakto o hru, kdy se uživatel přihlašuje na konkrétním místě. Ovšem máme tu (minimálně) dvě ALE: uživatel se musí přihlásit manuálně – nastavení automatiky by bylo už moc velké čenichání do soukromí a asi by to neprošlo. Je to tedy docela otravný proces – provádět znovunačítání, dokud se neobjeví, co hledám, potom check… Je to na dlouho, opravdu; dokonce i nerd potom vypadá ještě více nerdovitě. Druhou věcí je potom „fíčurka“ Foursquare klienta: je možné se odkudkoliv checknout kamkoliv (narozdíl od Gowalla klienta). Čili uživatel může proležet sobotní odpoledne v posteli a „procestovat“ půlku Evropy, poloha není nijak hlídána. Tohle může být kámen úrazu – pokud uživatelé budou brát tuto aplikaci jako hru a ne jako platformu pro doručování reklamy. Přece jde o to, ve kterých podnicích jsem „mayor“ a ne o to, že mi přijde o něco spamu navíc.
Když tak mluvím o „platformě pro doručování reklamy“ nedá mi to, abych nezmínil podobnou službu – Gowalla. V tomto případě mi tato síť přijde opravdu jako hra. Pěkné placky, líbivý design, výlety, klient, který opravdu bere v úvahu polohu… prostě v tom má jasno. No a když se podívám na rozhraní FourSquare, připadne mi, že se čeká, až se na ně „něco naroubuje“. Proto mě udivuje, že má tato síť takové množství uživatelů a především, že je někdo ochotný za ni nabídnout takovou sumu.
Libisemi, tvorba bookmarkletu podruhé
0Minule 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ě :-).