Biott Blog . Desarrollo Libre.

2006 - Apr - Wed

¿ Qué es Web 2.0 ?

Filed under: Software Libre

Cuando el web inició, nos encontrábamos en un entorno estático, con páginas en HTML que sufrían pocas actualizaciones y no tenían interacción con el usuario.

Web 2.0La Web 2.0 es la transición que se ha dado de aplicaciones tradicionales hacia aplicaciones que funcionan a través del web enfocadas al usuario final.   Se trata de aplicaciones que generen colaboración y de servicios que reemplacen las aplicaciones de escritorio.

Todo inició cuando Dale Dougherty de O’Reilly Media utilizó este término en una conferencia en la que compartió una lluvia de ideas junto a Craig Cline de MediaLive en la que hablaba del renacimiento y evolución de la web.   Constantemente estaban surgiendo nuevas aplicaciones y sitios con sorprendentes funcionalidades.   Y así se dio la pauta para la Web 2.0 conference de 2004.  Esta conferencia no solo fue exitosa sino que ya tuvo seguimiento en la Web 2.0 Conference del 2005 celebrada en Octubre.

En la charla inicial del Web Conference se habló de los principios que tenían las aplicaciones Web 2.0:  

  1. La web es la plataforma
  2. La información es el procesador
  3. Efectos de la red movidos por una arquitectura de participación.
  4. La innovación surge de características distribuidas por desarrolladores independientes.
  5. El fin del círculo de adopción de software ("Servicios en beta perpetuo")

La Web 2.0 con ejemplos

La forma más fácil de comprender lo que significa la Web 2.0 es a través de ejemplos.  Podemos comparar servicios web que marcan claramente la evolución hacia el Web 2.0:

Web 1.0 > Web 2.0

Doubleclick –> Google AdSense (Servicios Publicidad)
Ofoto –> Flickr (Comunidades fotográficas)
Akamai –> BitTorrent (Distribución de contenidos)
mp3.com –> Napster (Descargas de música)
Britannica Online –> Wikipedia (Enciclopedias)
Sitios personales –> Blogs (Páginas personales)
Especulación con dominios –> Optimización en motores de búsqueda
Page views  –> Cost per click
CMSs  –> Wikis (Manejo de contenidos)
Categorías/Directorios  –> Tagging

¿Qué tecnologías apoyan a la Web 2.0?

El Web 2.0 no significa precisamente que existe una receta para que todas nuestras aplicaciones web entren en este esquema.   Sin embargo, existen varias tecnologías que están utilizándose actualmente y que deberíamos de examinar con más cuidado en busca de seguir evolucionando junto al web.

Algunas tecnologías que dan vida a un proyecto Web 2.0:

  1. Transformar software de escritorio hacia la plataforma del web.
  2. Respeto a los estándares del XHTML.
  3. Separación de contenido del diseño con uso de hojas de estilo.
  4. Sindicación de contenidos.
  5. Ajax (Asincronical javascript and xml).
  6. Uso de Flash, Flex o Lazlo.
  7. Uso de Ruby on Rails para programar páginas dinámicas.
  8. Utilización de redes sociales al manejar usuarios y comunidades.
  9. Dar control total a los usuarios en el manejo de su información.
  10. Proveer APis o XML para que las aplicaciones puedan ser manipuladas por otros.
  11. Facilitar el posicionamiento con URL sencillos.

¿En qué nos sirve la Web 2.0?

El uso de el término de Web 2.0 está de moda, dándole mucho peso a una tendencia que ha estado presente desde hace algún tiempo.  En Internet las especulaciones han sido causantes de grandes burbujas tecnológicas y han hecho fracasar a muchos proyectos. 

Además, nuestros proyectos tienen que renovarse y evolucionar.    El Web 2.0 no es precisamente una tecnología, sino es la actitud con la que debemos trabajar para desarrollar en Internet.

Tal vez allí está la reflexión más importante del Web 2.0 y como los webmasters deberían de prepararse. Yo ya estoy trabajando en renovar y mejorar algunos proyectos, no por que busque etiquetarlos con nuevas versiones, sino por que creo firmemente que la única constante debe ser el cambio, y en Internet, el cambio debe de estar presente más frecuentemente.

Más información del Web 2.0

2006 - Apr - Wed

Validar spamer de la función mail en php

Filed under: Code

function ValidarDatos($campo){
//Array con las posibles cabeceras a utilizar por un spammer
$badHeads = array("Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:");

//Comprobamos que entre los datos no se encuentre alguna de
//las cadenas del array. Si se encuentra alguna cadena se
//dirige a una página de Forbidden
foreach($badHeads as $valor){
if(strpos(strtolower($campo), strtolower($valor)) !== false){
header("HTTP/1.0 403 Forbidden");
exit;
}
}
}

2006 - Apr - Tue

Funcion para crear un xmlDoc para IE y FF

Filed under: Code

function loadXML(sXML){
    //load xml file
    // code for IE
    if (window.ActiveXObject){
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async=false;
        xmlDoc.loadXML(sXML);
//        getmessage();
    }
    // code for Mozilla, etc.
    else if (document.implementation && document.implementation.createDocument){
        var domParser = new DOMParser();
        xmlDoc = domParser.parseFromString(sXML, "text/xml");
    }
    else{
        alert("Tu browser no sirve para este script");
    }
    return xmlDoc;
}

Consumir SOAP WebService con AJAX

Filed under: Code

Aca paso el código para poder consumir webservices con ajax. Espero que les sirva.

<script type="text/javascript" src="js/soap.js"></script>
function consumir_soap()
{

    var url = URL_DEL_WSDL;
    var pl = new SOAPClientParameters();
    pl.add("param1","value1");
    pl.add("param2","value2");
    pl.add("param3","value3");

    pl.add("paramN","valueN");
 

    SOAPClient.invoke(url, "NOMBRE_METODO", pl, true, func_callback);
}

function func_callback(r){

    alert(r);
}
 

 soap.js => ==========================================

 function SOAPClientParameters(){
     var _pl = new Array();
    this.add = function(name, value){
        _pl[name] = value;
        return this;
    }
    this.toXml = function(){
        var xml = "";
        for(var p in _pl){
            if(typeof(_pl[p]) != "function")
            xml += "<" + p + ">" + _pl[p].toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") + "</" + p + ">";
            }
        return xml;
    }
   
}

function SOAPClient() {}

SOAPClient.invoke = function(url, meth, parameters, async, callback){
    this.busy = new lyBusy();
    this.busy.start();
    if(async)
        SOAPClient._loadWsdl(url, meth, parameters, async, callback);
    else
        return SOAPClient._loadWsdl(url, meth, parameters, async, callback);
}

 SOAPClient._loadWsdl = function(url, meth, parameters, async, callback){
    // load from cache?
    var wsdl = SOAPClient_cacheWsdl[url];
    if(wsdl + "" != "" && wsdl + "" != "undefined")
        return SOAPClient._sendSoapRequest(url, meth, parameters, async, callback, wsdl);
        // get wsdl
    var xmlHttp = SOAPClient._getXmlHttp();
    xmlHttp.open("GET", url + "?wsdl", async);
    if(async) {
        xmlHttp.onreadystatechange = function()    {
            if(xmlHttp.readyState == 4)
                SOAPClient._onLoadWsdl(url, meth, parameters, async, callback, xmlHttp);
        }
    }
    xmlHttp.send(null);
    if (!async)
        return SOAPClient._onLoadWsdl(url, meth, parameters, async, callback, xmlHttp);
}

 SOAPClient_cacheWsdl = new Array();

 SOAPClient._onLoadWsdl = function(url, meth, parameters, async, callback, req){
//    var wsdl = req.responseXML;
    var wsdl = loadXML(req.responseText);   
    SOAPClient_cacheWsdl[url] = wsdl;    // save a copy in cache
    return SOAPClient._sendSoapRequest(url, meth, parameters, async, callback, wsdl);
}

 SOAPClient._sendSoapRequest = function(url, meth, parameters, async, callback, wsdl) {
    // get namespace
    var ns = (wsdl.documentElement.attributes["targetNamespace"] + "" == "undefined") ? wsdl.documentElement.attributes.getNamedItem("targetNamespace").nodeValue : wsdl.documentElement.attributes["targetNamespace"].value;
     // build SOAP request
    var sr = "<\?xml version=\"1.0\" encoding=\"utf-8\"?>" +
        "<soap:Envelope " +
        "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
        "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
        "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
        "<soap:Body>" +
        "<" + meth + " xmlns=\"" + ns + "\">" +
        parameters.toXml() +
        "</" + meth + "></soap:Body></soap:Envelope>";
    // send request
    var xmlHttp = SOAPClient._getXmlHttp();
    xmlHttp.open("POST", url, async);
    var soapaction = ((ns.lastIndexOf("/") != ns.length - 1) ? ns + "/" : ns) + meth;
    xmlHttp.setRequestHeader("SOAPAction", soapaction);
    xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    if(async) {
        xmlHttp.onreadystatechange = function(){
            if(xmlHttp.readyState == 4)
                SOAPClient._onSendSoapRequest(meth, async, callback, wsdl, xmlHttp);
        }
    }
    xmlHttp.send(sr);
    if (!async)
        return SOAPClient._onSendSoapRequest(meth, async, callback, wsdl, xmlHttp);
}

SOAPClient._onSendSoapRequest = function(meth, async, callback, wsdl, req){
    this.busy.stop();
    var o = null;
//    var nd = SOAPClient._getElementsByTagName(req.responseXML, meth + "Response");
//    var nd = SOAPClient._getElementsByTagName(req.responseXML, "sResult");
    var nd = SOAPClient._getElementsByTagName(loadXML(req.responseText), "sResult");
    if(nd.length == 0){
        var reqq = loadXML(req.responseText);
/*        if(req.responseXML.getElementsByTagName("faultcode").length > 0){
            if(async || callback)
                o = new Error(500, req.responseXML.getElementsByTagName("faultstring")[0].childNodes[0].nodeValue);
            else
                throw new Error(500, req.responseXML.getElementsByTagName("faultstring")[0].childNodes[0].nodeValue);
        }*/
        if(reqq.getElementsByTagName("faultcode").length > 0){
            if(async || callback)
                o = new Error(500, reqq.getElementsByTagName("faultstring")[0].childNodes[0].nodeValue);
            else
                throw new Error(500, reqq.getElementsByTagName("faultstring")[0].childNodes[0].nodeValue);
        }
    }
    else
        o = SOAPClient._soapresult2object(nd[0], wsdl);
    if(callback)
        callback(o, loadXML(req.responseText));
//        callback(o, req.responseXML);
    if(!async)
        return o;
}

SOAPClient._soapresult2object = function(node, wsdl){
    return SOAPClient._node2object(node, wsdl);
}
SOAPClient._node2object = function(node, wsdl){
    // null node
    if(node == null)
        return null;
    // text node
    if(node.nodeType == 3 || node.nodeType == 4)
        return SOAPClient._extractValue(node, wsdl);
    // leaf node
    if (node.childNodes.length == 1 && (node.childNodes[0].nodeType == 3 || node.childNodes[0].nodeType == 4))
        return SOAPClient._node2object(node.childNodes[0], wsdl);
    var isarray = SOAPClient._getTypeFromWsdl(node.nodeName, wsdl).toLowerCase().indexOf("arrayof") != -1;
    // object node
    if(!isarray)    {
        var obj = null;
        if(node.hasChildNodes())
        obj = new Object();
        for(var i = 0; i < node.childNodes.length; i++)    {
            var p = SOAPClient._node2object(node.childNodes[i], wsdl);
            obj[node.childNodes[i].nodeName] = p;
        }
        return obj;
    }
    // list node
    else    {
        // create node ref
        var l = new Array();
        for(var i = 0; i < node.childNodes.length; i++)
            l[l.length] = SOAPClient._node2object(node.childNodes[i], wsdl);
        return l;
    }
    return null;
}
SOAPClient._extractValue = function(node, wsdl){
    var value = node.nodeValue;
    switch(SOAPClient._getTypeFromWsdl(node.parentNode.nodeName, wsdl).toLowerCase()){
        default:
        case "s:string":
            return (value != null) ? value + "" : "";
        case "s:boolean":
            return value+"" == "true";
        case "s:int":
        case "s:long":
            return (value != null) ? parseInt(value + "", 10) : 0;
        case "s:double":
            return (value != null) ? parseFloat(value + "") : 0;
        case "s:datetime":
            if(value == null)
                return null;
            else    {
                value = value + "";
                value = value.substring(0, value.lastIndexOf("."));
                value = value.replace(/T/gi," ");
                value = value.replace(/-/gi,"/");
                var d = new Date();
                d.setTime(Date.parse(value));
                return d;
            }
    }
}

SOAPClient._getTypeFromWsdl = function(elementname, wsdl){
    var ell = wsdl.getElementsByTagName("s:element");    // IE
    if(ell.length == 0)
        ell = wsdl.getElementsByTagName("element");    // MOZ
    for(var i = 0; i < ell.length; i++){
        if(ell[i].attributes["name"] + "" == "undefined") {   // IE
            if(ell[i].attributes.getNamedItem("name") != null && ell[i].attributes.getNamedItem("name").nodeValue == elementname && ell[i].attributes.getNamedItem("type") != null)
                return ell[i].attributes.getNamedItem("type").nodeValue;
        }
        else { // MOZ
            if(ell[i].attributes["name"] != null && ell[i].attributes["name"].value == elementname && ell[i].attributes["type"] != null)
                return ell[i].attributes["type"].value;
        }
    }
    return "";
}

SOAPClient._getElementsByTagName = function(document, tagName){
    try{
        // trying to get node omitting any namespaces (latest versions of MSXML.XMLDocument)
        return document.selectNodes(".//*[local-name()=\""+ tagName +"\"]");
    }
    catch (ex) {}
    // old XML parser support
    return document.getElementsByTagName(tagName);
}

SOAPClient._getXmlHttp = function(){
    try{
        if(window.XMLHttpRequest){
            var req = new XMLHttpRequest();
            // some versions of Moz do not support the readyState property and the onreadystate event so we patch it!
            if(req.readyState == null)    {
                req.readyState = 1;
                req.addEventListener("load",
                    function(){
                        req.readyState = 4;
                        if(typeof req.onreadystatechange == "function")
                            req.onreadystatechange();
                    },
                    false);
            }
        return req;
        }
        if(window.ActiveXObject)
            return new ActiveXObject(SOAPClient._getXmlHttpProgID());
    }
    catch (ex) {}
    throw new Error("Your browser does not support XmlHttp objects");
}

SOAPClient._getXmlHttpProgID = function(){
    if(SOAPClient._getXmlHttpProgID.progid)
        return SOAPClient._getXmlHttpProgID.progid;
    var progids = ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
    var o;
    for(var i = 0; i < progids.length; i++){
        try{
            o = new ActiveXObject(progids[i]);
            return SOAPClient._getXmlHttpProgID.progid = progids[i];
        }
        catch (ex) {};
    }
    throw new Error("Could not find an installed XML parser");
}
 

 

2006 - Mar - Mon

Aplicaciones que usan AJAX

Filed under: Software Libre

Tradicionalmente se ha considerado la primera aplicación AJAX al cliente Web que tiene la herramienta de trabajo en grupo Microsoft Exchange Server aunque sin lugar a dudas Google es uno de los grandes responsables de la popularización de AJAX, al usarla en varias de sus aplicaciones, entre las que se cuentan Google Groups, Google Suggest, Google Maps y el servicio de correo electrónico gratuito Gmail. Así como también empresas en crecimiento que actualmente están desarrollando aplicaciones basadas en AJAX.

  • A9, buscador de Amazon
  • Flickr. álbumes de fotos online.
  • Oddpost, servicio avanzado de webmail de Yahoo!
  • Basecamp, servicio de gestión de proyectos diseñado por 37Signals sobre plataforma Rails.
  • 24SevenOffice, ERP/CRM
  • Panoramio.com, Comunidad de fotos sobre Google Maps
  • Meebo, Sistema de mensajería web que utiliza los protocolos conocidos de hotmail, yahoo, jabber, etc. En una sola web
  • Trabber.com, Buscador de vuelos
  • Writely, Un procesador de texto web, estilo Word
  • gOFFICE, Un paquete de oficina como Open office o Microsoft office, ademas libre
  • Kiko, Un calendario web basado en AJAX
  • Gmail, el archiconocido correo web de Google
  • Openomy, Un sistema de ficheros online
  • AABHotel, Administración de reservas ONLINE (Desarrollo propio).

fuente Wikipedia

 

Get free blog up and running in minutes with Blogsome
Theme designed by Ian Main