Posts tagged Web
Libisemi, tvorba bookmarkletu
0Pro potřeby libisemi, "prvního asociálního sociálního serveru" jsem potřeboval vytvořit bookmarklet. Protože to však nešlo udělat jednoduše, jako odeslání adresy pomocí GETu, protože na straně serveru používám framework CakePHP a v něm user friendly URLs ve formátu http://domain/controller/action/param. V tomto případě bych jako parametr nemohl předat http adresu. Z toho důvodu jsem byl nucen poslat tuto informaci metodou POST. A když už takto, tak rovnou asynchronně a počkat si na výsledek. V tomto postu bych se chtěl podělit o získané zkušenosti vzniklé na základě vyřešení vzniklých problémů.
Začnu nejprve rozhraním na straně serveru. Dovolím si vypustit zbytečnosti a defakto celý zápis zobecnit. Vzhůru tedy do Controlleru. Následující funkce (vlastně spíš metoda, protože je umístěna ve třídě rozšiřující AppController, jen mi tohle vznostné oslovení u PHP nesedí ;-)) přijmě data zaslaná (asynchronně) pomocí metody post a pustí se do zpracování, které předá zobrazovací vrstvě.
function addajax(){
// prijeti dat
$formular = $this->params['form'];
$url = $formular['url'];
// vystupni layout chci xml a nechci zobrazovat debug informace
$this->layout = 'xml';
Configure::write('debug',0);
/*
* Dalsi akce, jako je napr. parsovani ziskaneho dokumentu
*/
// zapsani informaci a ulozeni do session
$output[0]['url'] = $url;
$this->Session->write('toSave',$innerHTML);
$sessId = $this->Session->id();
// zapisu jeste cislo session
$output[0]['sessionId'] = $sessId;
// a cele pole predam vrstve View
$this->set('output', $output);
}
Uvnitř předcházející metody vyžaduju zobrazení v layoutu xml, ten je definován následujícím způsobem, který mi vygeneruje dokument typu text/xml, zapíše do něj záhlaví a vloží vlastní strukturu, která je generovaná uvnitř vrstvy View. Celkový výstup je uveden na výpisu níže.
<?php
header('Content-type: text/xml');
echo $xml->header();
?>
<addInfo>
<?php echo $content_for_layout; ?>
</addInfo>
Další činnost prováděná uvnitř metody v Controlleru je vytvoření pole "output", které je předáno vrstvě View. Do prvního prvku tohoto pole ještě přidám požadované url (index "url"), celou tuto konstrukci uložím do session a následovně do toho stejného pole přidám i číslo této session (index "sessionId"). Samotný výstup v podobě XML je generován ve view, kterému předávám data pomocí posledního řádku ve výpisu kontrolleru. View je zhruba následující:
echo $xml->elem('sessId',null,$output[0]['sessionId']);
echo $xml->elem('url',null,$output[0]['url']);
. . .
Tato konstrukce za pomocí helperu Xml vygeneruje tagy sessId a url a vloží do nich dané hodnoty. Výstupem je potom následující XML, které je odesláno zpět skriptu na straně prohlížeče (klienta), který provedl volání.
<?xml version="1.0" encoding="UTF-8" ?>
<addInfo>
<sessId>4f40061d6ffa5e6a4a8f4b64b79eb4d3</sessId>
<url>http://domain/page.htm</url>
</addInfo>
Bookmarklet jsem definoval konstrukcí tzv. anonymní funkce – void((function(){ . . . }()), který provede kód umístěný vevnitř. Tímto kódem vytvářím nový element "script", který připojím ke stávající stránce.
javascript:
void((
function(){
var element=document.createElement('script');
element.setAttribute('src','http://www.libisemi.cz/send.js');
document.body.appendChild(element);
var http=getHttp();
sendPost(http,encodeURIComponent(location.href));
}()
)
Tento skript sestává z metody, která na základě typu prohlížeče vygeneruje tzv. HttpRequest objekt, který je použit pro připojení k serveru a odeslání dat. V prohlížečích Netscape Navigator, Apple Safari a Firefoxu se tento objekt vytváří pomocí konstruktoru objektu XMLHttpRequest(), který je součástí objektu window, takžestačí otestovat jeho existenci. Microsoft samozřejmě musí mít něco extra, takže tento objekt vytváří pomocí ActiveX komponenty, takže pokud nevyjde první testování, otestuju existenci ActiveXObject komponenty. Pokud ani tohle testování nevyjde, ohlásím chybu a uživatel má smůlu.
function getHttp(){
var http = false;
if(window.XMLHttpRequest){
http = new XMLHttpRequest();
}else if(window.ActiveXObject){
http = new ActiveXObject("Microsoft.XMLHTTP");
}else alert("nejde vytvorit request!");
return http;
}
Vytvořený HttpRequest objekt předám funkci, která pomocí něj metodou POST odešle data na server. Pomocí metody onReadyStateChange je ještě nastavena další anonymní funkce, která testuje přijatou odpověď serveru – stav požadavku (readyState), kdy čeká na požadavek, až je kompletní a současně na stavový kód protokolu HTTP 200 – OK. Pokud tato skutečnost nastane, pokračuje ve zpracování, rozparsuje přijaté xml a přesměruje stávající dokument na novou adresu, ke které přiloží získané informace (v tomto případě číslo session, které vygeneroval server na základě přijatých dat POST metodou). Jedná se o jednoduchý AJAX, spousta dalších informací se válí volně na síti, nebo někde v archívu mého blogu.
function sendPost(http,url){
http.open("POST","http://www.libisemi.cz/addajax");
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http.setRequestHeader("Connection","close");
http.onreadystatechange = function(){
if(http.readyState == 4 && http.status == 200){
var response = http.responseXML;
// … parsovani odpovedi a ziskani promenne 'id' – cislo session
window.location = "http://www.libisemi.cz/addform/"+id;
}
}
http.send("url="+url);
}
Tímto způsobem je vytvořen (polo-)funkční bookmarklet, který funguje po druhém kliknutí a pouze na stejné doméně. Nemám ale rád polovičatá řešení, tak už mám rozdělané řešení. Tohle bych si ale dovolil popsat až příště, tenhle post mi připadá už dost dlouhý ;-).
Webovosti
0http://www.nextdb.net/
http://aviary.com/tools/phoenix
http://www.roadsharing.com/
http://mobilizy.com/
http://www.icerocket.com/?tab=web
http://www.oswd.org/
http://opengoo.org/
http://www.howstuffworks.com/
http://earth-api-samples.googlecode.com/svn/trunk/demos/milktruck/index.html
http://remindr.info/
Webovosti
0Oukej, mám tu další nášup google-mapoidních zajímavostí. Asi nejzajímavější zajímavost, která by mohla zajímat 🙂 je streetview pro Francii, jednotlivé etapy Tour De France. Začít je vhodné ve městě nad Seinou a výhledem na Eifelovku a doufat, že záhy začnou přibývat i další části Evropy!
Jak je možno ve streetview pozorovat zloděje v akci, nebo prodavače cracku (bohužel, už jsou v systému nové fotky, takže např. tady je vidět původní), tak je možné i pomocí satelitních snímků pozorovat táhnoucí hejna ptáků, potápěče, slony a mnoho dalších věcí; a jako že to jsou mnohdy opravdu spectacularrrr fotky :-).
Ale teď už do jiných vod, nějaké to společenství, to je dneska moderní…
Mikroblogování je dneska docela rozšířená věc, stejně tak internet v mobilu a jejich spojení taktéž. Ale možnost spojení ještě s dalšími lidmi v dané lokalitě, informací, kdo je nejblíž, co se dá nalézt za rohem… to sice někdo vytvořil jako aplikaci pro Androida, ale kolik lidí má dneska Androida plně běžícího v mobilu? Proto je tu služba Plazes, nyní navíc zabraná Nokií, takže by za něco stát mohla ;-), případně my.loki dělající totéž, navíc nezabraná nokií, takže by taky za něco stát mohla :-D.
Dnešní internetový člověk se nechává šmírovat kdečím – dobrovolně sděluje aplikacím při registraci svoji mejlovou adresu i s heslem, rodné příjmení své matky, nechává obří společnosti jako je google čmuchat u sebe na pevném disku a indexovat tajné soubory ze sobotní pařby, tak proč by v reálném čase nemohl naprášit i svoji polohu? Stačí telefon s GPSkou a datovým připojením a samozřejmě registrace na ipoki.
Asi nejsem sám, kdo zjistil, že zjišťovat počasí pomocí pocasi.cz je uplně na ho*no a začal používat např. pohled z okna, wunderground, pluginy do prohlížeče, případně widget na nějakém osobním portálu, jako je netvibes, či iGoogle, nebo rovnou v systému. Nevím proč to sem píšu, ale přijdou mi zajimavé novinky, že wunderground či FOX weather news používají na mapách nově vrstvu se zobrazením aktuální teploty, samozřejmě všechno pěkně scrollovatelné a zoomovatelné, enjoy!
No a na závěr si nechám pomocníka s cestováním, když už dneska byla řeč o dobrovolném bonzování informací – tripit. Tento pomocník funguje tak, žese mu pošlou veškeré mejly ohledně cesty – letenky, booky aut, hotelů… a on na jejich základě postaví itinerář, navrhne trasy a všechno přehledně zobrazí… Užitečná věc. Jen bych se potom moc nedivil, kdyby místo mě nasttupoval do letadla nějaký mr. Anderson :-). (Jen mě vrtá v hlavě, proč tato aplikace, tvářící se jako regulerní web2.0 nepoužila italskou topdoménu? Aha, ono trip.it už funguje a má v záhlaví docela praktickou radu :-)).
Moderní webové aplikace
0Dovoluji si prilozit k nahlednuti mou bakalarku. Anotace je uvedena dale, prace je ke stazeni ve formatu PDF, mirne oklestena od smlouvy…
Anotace
Tato práce se zabývá analýzou dostupných systémů pro správu dokumentů a obsahu, výběrem vhodného systému a realizací základní funkčnosti portálu pro správu multimediálních dat. V úvodní části se zabývá využívanými technologiemi a druhy systémů pro správu obsahu, v další části je provedeno srovnání používaných systémů a výběr vhodného kandidáta pro realizaci portálu pro uchování multimediálních dat, v závěrečné fázi části je popsána realizace základní funkčnosti komponent tohoto systému. Jedná se o součást Projektu MPO ČR evid. č. FT-TA3/121 „Výzkum a ověření systému pro záznam a dlouhodobou archivaci multimediálních dat s inteligentním vyhledáváním“.
Klíčová slova
CMS, DMS, Java, JSF, Alfresco, Portal, Multimedia
Abstract
The objectives of this project are to analyse systems for content or data managing, and to find suitable systém for realisation base functions of multimedia content portal. The project contains comparison of systems in use, selection of suitable candidate and parts of realization of this project – multimedia content portal. This portal is a part of Ministry of Industry and Trade of the Czech Republic project evid. nr. FT-TA3/121 „Research and verification system for record and longtime archiving multimedia data with intelligent searching“.
Keywords
CMS, DMS, Java, JSF, Alfresco, Portal, Multimedia
Smrdi.com konečně ve 100% provozu
0Jak tak koukám, tak první příspěvek "spouštím betu" na smrdi.com jsem psal už před téměř třemi měsíci!!! Od té doby systém zahálel, jen jsem sem tam koukl, jestli se někdo zaregistroval… A neopravil jsem ani problemy se zbrazovani v IE, tomu je teď ale konec!
Dnes jsem díky deiwimu na fóru grafika.cz tento problém dořešil a i ten debilní IE už zobrazuje stránky korektně. Takže asi začnu pomalu s kampaní a nějakými úpravami, které mám už nějakou dobu namyšlené, snad to vyjde a web začne žít, zatím tam je sotva pár rezidentů (a samozřejmě smrdící komunisti).
Možná by ještě nebylo od věci zmínit, proč jsem dal dohromady web, na kterým si uživatelé můžou vzájemně nadávat a plivat jeden na druhýho… Je to jednoduchý, stal se ze mě pěknej parchant, kterej nemá v sobě už ani kapku slušnosti či úcty ke svým bližním a tak podobně… Kecám, jen jsem prolízal diskuzní fóra a různé blogísky a podobně a uvědomil si, že lidi především na všechno nadávají, vzájemně si nadávají… Tak proč jim nevyjít vstříc? Proto www.libisemi.cz nechám ještě chvíli zaparkované a uvidíme, jestli budu mít chuť, náladu a čas na tom začít dělat.