Entradas

Mostrando entradas de 2008

Poema XIII Y mi conciencia ¿Me escucha?

Creo q has perdido tu tiempo Te he comprado flores Me he formado esperanzas y te he llegado a engañar A que son hermosas Sinceramente yo confié en ellas, pero no suficiente Voy a ponerlas en un jarrón Y ahora aquí me confieso, no sé, arrepentido, dolido, aturdido o qué pero me confieso Este jarrón creo que le quedará perfecto Aunque tal vez ya no encuentre sentido, al final ella me comprende más Y que es esto sino la búsqueda de la comprensión De que te acepten, o que te vuelvas socialmente útil No es más que integrarte, ser parte de algo y para ellos se necesitan dos Y para mí, lo jodido es que no lo acepto, Y si lo acepto no lo comparto Y si lo comparto no lo asimilo, Bueno es mi culpa, y me estoy quejando, de no ponerle solución De no querer asumir la solución Me estas escuchando ¿Dónde pongo el jarrón?

Google Maps API y el geoposicionamiento

Luego de salir del II congreso de Webmasters una de las csas más interesantes que se me ocurrió fue el de utilizar el API de Google Maps para incluirle en mi proyecto de cine y dió como resultado ¿donde se rodó mi película favorita? . Es muy sencillo de utilizar el API do google y sobre todo la cantidad de documentación al respecto aunque puede ser un poco lioso al principio, por ello se deben seguir unos pequeños pasos: Tener las direcciones que queremos localizar (no son necesarias las coordenadas pues se encarga el de traducirlas con javascript a coordenadas) En caso de tener muchas direcciones lo bueno es crear un archivo kml (un tipo de archivo XML con estructura especifica para geocoding) Lo malo de esto es que como no tengas las coordenadas tienes que hacerlo con google y aunque el mismo te proporciona el código para hacerlo ( enlace ) tienes sus limitaciones en una cuenta gratuita more than 15,000 geocode requests in a 24 hour period are received from a single IP address,

Por qué Google lo da casi todo gratis?

Es una pregunta interesante y me ha surgido a raiz del II Congreso de Webmasters, sé que este blog estaba pensado más para scripts y cosas de programación pero al final he decidido comentar de todo un poco lo que encuentre así que volviendo al grano. Hay multitud de servicios que ha google le ha costado una pasta adquirir y que aún no se le ven ventajas reales o viables económicamente según el modelo actual de negocio, servicios como maps, digitalización de contenidos como los de la revista Life, códigos públicos, street view, etc. Todos estos actualmente están disponibles de forma gratuita para cualquiera y mi pregunta es ¿por qué? Realmente no creo que Google sea un alma caritativa y me doy cuanta del poder en información que realmente maneja esta empresa, no soy un paranoico que creo que nos van a dominar, pero si realmente creo que al paso que van diversificándose con satélites de alta resolución tal vez para futuros proyectos GPS, plataformas de SO para móviles - sin lugar a dudas

Tratamiento de respuestas xml con ajax

Bien veamos como tratar elementos que recibimos de respuesta como XML al ejecutar AJAX, para ello existen varios métodos del objeto XMLHttpRequest, veamos en un ejemplo: // obtenemos el tag con el nombre deseado xmlhttp.responseXML.getElementsByTagName('nombre_tag') // obtenemos la cantidad de tags con este nombre xmlhttp.responseXML.getElementsByTagName('nombre_tag').length // sacamos el objeto del tag i de este nombre xmlhttp.responseXML.getElementsByTagName('nombre_tag').item(i).firstChild // el valor de este elemento xmlhttp.responseXML.getElementsByTagName('nombre_tag').item(i).firstChild.data Con estos valores podremos recorrer el archivo XML y realizar cualquier roceso con los datos que recibamos, asignarlo a valores de formularios, ssacarlos en pantalla, etc, etc.

Error con la codificación de la respuesta

algo que me trajo de cabeza era un error con una respuesta generada al llamar a un documento en el server que ejecutaba un script para crear un archivo XML y es que aunque definas el archivo XML como: $xml_response = new XmlWriter(); $xml_response->openMemory(); $xml_response->startDocument('1.0', 'ISO-8859-1'); o sea defines que es codificación ISO-8859-1, para internet explorer esto no importa, con firefox si funciona pero explorer ni caso y es que hay que definir además el header de esta respuesta, o sea que la primera línea del código de esta url que queremos ejectar del lado del servidor tiene que ser: header("Content-Type: text/xml; charset=ISO-8859-1"); y es que si no te darían errores como (aclaro que el problema es IE como siempre): IE error: Automation server can't create object - JavaScript

Método onreadystatechange del objeto XMLHttpRequest

Con este método lo que hacemos es tratar la respuesta recibida por parte del servidor, ¿Cómo sabemos cuando se ha ejecutado correctamente? Para ello utilizamos: ajaxNEW.readyState Este devolverá los siguientes valores: 0 - Sin inicializar 1 - Abierto (acaba de llamar open) 2 - Enviado 3 - Recibiendo 4 - A punto por ejemplo: ajaxNEW.onreadystatechange=function() { if (ajaxNEW.readyState==4) // pongo la rspuesta tal y como la recibo dentro del contenedor // la propiedad responseText me devuelve la respuesta tal y como se genera en el server. contenedorLugar.innerHTML = ajaxNEW.responseText; } Si ademas queremos compreobar que se ejecutó correctamente la página una vez llegado as readyState == 4 nos bastaría con hacer otra comprobación: if (xmlhttp.readyState==4) { if (xmlhttp.status==200) alert("URL Exists!") else if (xmlhttp.status==404) alert("URL doesn't exist!") else alert("Status is "+xmlhttp.status) } La propiedad status almacena

Método open del objeto XMLHttpRequest

Una vez que ya hemos creado el objeto XMLHttpRequest (ver entrada anterior) entonces podemos realizar las llamadas al servidor sin necesidad de recargar la página al completo. estas llamadas se hacen a través de la función open y tiene los siguientes parámetros: ajaxNEW=makeAJAX(); ajaxNEW.open("GET",url,true); el primer parámetro es el tipo de llamada y puede ser GET, POST o HEAD, luego veremos cada uno en detalle. el segundo es la url que vamos a ejecutar y de la cual obtendremos la respuesta. el tercero es si queremos hacerlo de forma asíncrona o no, generalmente es TRUE para que así no se recargue la página. esta función tiene otros 2 parámetros para el acceso de páginas restringidas por usuario y contraseña pero nunca los he utilizado, los parámetros serían : usuario y password. veamos ahora las distintas llamadas al método open. GET Esta función carga la respuesta generada de ejecutar la url en el div contenedor: function carga(contenedor,url){ var contenedorLugar;

Código para crear un objeto XMLHttpRequest

function makeAJAX() { var xmlhttp=false; // Entre estos ids podemos obviar comodamente // la versión Msxml2.XMLHTTP.7.0 var ids = ["Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, // we can cope with old IE versions. // and security blocked creation of the objects. for(var i=0; !xmlhttp && i < ids.length; i++) { try { xmlhttp = new ActiveXObject(ids[i]); } catch(ex) { xmlhttp = false; } } @end @*/ if (!xmlhttp && typeof XMLHttpRequest!='undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp=false; } } /* * Esta condición es realmente obsoleta pues * actualmente todos los navegadores modernos * ya viene

Introducción a AJAX y el objeto XMLHttpRequest

Este artículo es una recopilación de datos provenientes de varias fuentes en internet y varios códigos que poco a poco he ido aplicando en el transcurso del tiempo. La mayor parte de este documento es una actualización y traducción de un artículo que podéis encontrar en la siguiente dirección http://www.jibbering.com/2002/4/httprequest.html con fecha de enero de 2006. Las cosas desde ese momento no han cambiado mucho en AJAX aunque si se han actualizado algunos componentes del objeto XML HTTP Request sobre todo para Internet Explorer, siendo el cambio más novedoso que desde IE8 ya existe compatibilidad innata con el objeto XMLHttpRequest no siendo ya necesaria la creación de ActiveXObject, esta compatibilidad se había venido testeando por parte de Microsoft desde IE7 pero la compatibilidad innata sólo la han alcanzado en IE8. ¿Qué es el objeto XMLHttpRequest y por qué utilizarlo? Tanto IE, Safari, Mozilla, Konqueror, Ice Browser, Opera como todos los navegadores que se basen en los mo

Encriptar sesiones utilizando mcrypt en php

Bueno por todos es conocido que las sesiones en php tienes sus vulnerabilidades, vaya que no son 100% efectivas en cuanto a seguridad, pues estas se almacenan en unas cookies en el servidor en cuyo caso si se tiene acceso a esta carpeta se podrían leer. Para evitarlo hay diversas maneras una es almacenando los datos de sesión en un servidor de bases de datos o codificando estas cookies. La desventaja del primero aunque es más seguro es la saturación del servidor SQL en caso de que existan muchas variables y muchos usuarios, por eso me parece una forma segura y fiable la codificación de estas cookies. Este código es una modificación del código de Martin Sarsale (martin@n3rds.com.ar) en el cual utiliza funciones ya deprecadas en php. Además le aumento la seguridad utilizando constantes definidas en otros archivos y el vector de inicialización. define("INIT_VECTOR","36452318"); function sess_open($sess_path, $session_name){ global $_SEC_SESSION; $sess_sec=ini_get(

Encriptar con php usando mcrypt

Primero que nada de debemos instalar esta libreria en php, yo utilizo WAMP donde con un solo click lo podemos hacer pero en caso de que sea manualmente debemos ir al php ini y cambiar lo siguiente: ;extension=php_mcrypt.dll ;extension=php_mcrypt_filter.dll a extension=php_mcrypt.dll extension=php_mcrypt_filter.dll Importante Asegurarnos que en la ruta de extensions_dir esté el directorio donde están estas dos librerias. Anteriormente se utilizaban las funciones mcrypt_ecb, etc. Pero estas están en desuso y suelen dar errores del tipo: Warning: mcrypt_ecb(): Attempt to use an empty IV, which is NOT recommend in (url) PHP Warning: mcrypt_ecb(): Size of key is too large for this algorithm in El primero indica que no hemos puesto el valor del vector de inicialización pero este valor no está pasado a la función. En el manual de php los parámetros de la función son los siguientes: String mcrypt_ecb ( int $cipher, string $key, string $data, int $mode ) Aunque hay algunos blogs que ponen que

Tu propio gestor de correos con PHP

Ya hemos visto como enviar correos con PHP utilizando phpmailer, correos con adjuntos y con todas las posibilidades, ahora veamos como recibir y leer los correos que nos envían a nuestro buzón con la clase receivemail. Incluimos la clase include_once '../clases/receivemail.class.php'; // Creamos el objeto receivemail, es importante en esta función poner solo los 4 parámetros siguientes, en la mayoria de servidores de correo da fallo si incluimos el 5 parámetro el cual en teoría es para servidores que requieren autentificación, pero en la práctica no es necesario. // Algunos de los errores que nos pueden dar son los siguientes: Warning: imap_open() [function.imap-open]: Couldn't open stream {(host):(puerto)/(protocolo)}INBOX in (url_codigo) on line (linea) Certificate failure for (host): self signed certificate: (url_certificado) $obj= new receiveMail(USUARIO,CLAVE,DIRECCION_DE_CORREO,SERVIDOR); // Connectar al buzon de correo por defecto pop3 y puerto 110 $obj->connect()

Enviar archivos PDF creados dinámicamente

Gracias a las clases DOMPDF y PHPMailer podemos crear un archivo PDF dinámicamente y enviarlo como adjunto en un correo electrónico. Actualmente el método que utilizo es crear el archivo PDF, adjuntarle al mail y borrarlo. Reconozco que lo ideal sería crear el archivo en memoria y enviarlo así evitamos tener que crearlo y borrarlo, pero aún no he encontrado una función que me tome al archivo como cadena lo convierta en un documento sin crearlo físicamente en el disco duro, o sea que sea todo temporal; por ello si alguien lo sabe que lo comparta. // incluyo las dos clases dompdf y php mailer include_once '../class/class.phpmailer.php'; include_once '../dompdf/dompdf_config.inc.php'; // creo el objeto phpmailer $mail = new phpmailer(); // asigno el envío por SMTP mucho más rápido y fiable $mail->Mailer = "smtp"; // mi servidor requiere autentificación $mail->SMTPAuth = true; // utilizo constantes almacenadas fuera del script para darle más seguridad a los

HTML 2 (F)PDF VS DOMPDF

Yo utilizo ambas clases pero dependiendo para que escojo una u otra, veamos las ventajas que veo en cada una de ellas. HTML2FPDF tiene una velocidad de creación de los documentos un poco más rápida pero no es algo realmente a considerar para diferenciar una de otra. Lo cual no es el caso para crear páginas horizontales para lo cual DOMPDF es perfecta pues con HTML2FPDF hay que hacer ciertos apaños como poner manualmente el ancho de la página para que te coja los márgenes correctamente sino te cra una página horizontal pero con los márgenes de una vertical, o sea que solo tienes espacio útil la mitad de la página prácticamente. El uso de CSS en ambas es realmente muy precario aunque si has de escojer debes utilizar DOMPDF que soporta unos cuantos más y según ellos lee archivos CSS, realmente no te va a cojer del archivo css ni la mitad de las propiedades. En cuanto a cabeceras, pies de página e imágenes ambos lo soportan en teoria. El uso de tablas es otro de los factores a tener en cue

Errores en Zend Development Studio

Sin lugar a dudas Zend Development Studio es una de las herramientas más completas para implementar código PHP aunque como todo buen hijo de vecino no está excento de algunos pequeños detalles. Si alguno ha programado con el ZDS le habrán molestado sobre manera estos dos warnings que suele poner: include-var : Unsafe use of variable in call include()/require() bool-assign : Assignment in condition Son realmente 2 warnings que implican en cierta medida una ayuda al programador, el primero evita cualquier posible fallo de seguridad incluyendo en un archivo una url que es variable, lo cual podría (y digo podría) ser un fallo de seguridad. El segundo nos previene por si acaso se nos ha olvidado poner la doble = en una instrucción booleana, lo cual en muchos casos no es cierto pues realmente queremos que se asigne NO que se compare. Si queremos evitar estos warnings es de una forma sencilla aunque realmente tonta. Para el primero el ZDS considera inseguro que se incluya desde una variable p

Validar fechas con javascript

No se las miles de veces que he tenido que validar fechas con javascript y la verdad es que siempre es un verdaddero encordio, aquí os dejo una pequeña funcion con la cual se crea un objeto fecha muchomás fácil de comparar si una fecha es menor que otra que con los if - else if - else. Espero que realmente os sirva de ayuda, a mi me viene genial function compruebaFechas(){ fecha_inicio =new String(document.frm_nuevo.fecha_inicio.value); hora_inicio = document.frm_nuevo.hora_inicio.value; minuto_inicio = document.frm_nuevo.minuto_inicio.value; fecha_fin =new String(document.frm_nuevo.fecha_fin.value); hora_fin = document.frm_nuevo.hora_fin.value; minuto_fin = document.frm_nuevo.minuto_fin.value; dia_inicio = parseInt(fecha_inicio.substr(3, 2),10); mes_inicio = parseInt(fecha_inicio.substr(0, 2),10) - 1; ano_inicio = parseInt(fecha_inicio.substr(6, 4)); dia_fin = parseInt(fecha_fin.substr(3, 2),10); mes_fin = parseInt(fecha_fin.substr(0, 2),10) - 1; ano_fin = parseInt(fecha

Envío de boletín a listas de correos pirateadas

Este estudio es totalmente empírico y solo muestra para este caso el comportamiento de los internautas respecto al envío masivo de boletines electrónicos a personas que no lo han solicitado. Tomando una lista de 18 mil correos electrónicos como muestra enviaremos un boletín semanal durante 3 meses. Los resultados son los siguientes: solo recibiras confirmaciones de lectura o de envío de un 14 % de los correos enviados. el 27% son direcciones inválidas, que no existen ya los usuarios o que han cambiado de dirección. de los correos recibidos son útiles solo el 86 %, el resto o es spam generado a nuestra cuenta de correo o es correo duplicado proveniente de algunos servidores de correo. solo son realmente leídos el 5% de los boletines, para un negocio esta cifra no está mal pues implica un 5 % más de posibles clientes y el envío del boletín es un medio de propaganda realmente barato, pues solo es la inversión inicial de programar la herramienta. de este 5 % que realmente lee el correo (ba

Boletín electrónico VS RSS

Sin lugar a dudas el envío de boletines es una de las herramientas fundamentales para la comunicación de eventos y novedades de un sitio web. Las ventajas del boletín irán decayendo con el paso del tiempo con el uso cada vez más extenso de fuentes RSS, ¿por qué? fundamentalmente porque una fuente RSS te tienes que suscribir obligatoriamente tú (evitando de esta forma el envío de boletines usando listas de correo extraidas de internet mediante robots). Actualmente la mayoría de los internautas siguen muy familiarizados con el mail antes que las fuentes RSS pero poco a poco y esto gracias fundamentalmente al boom de los blogs está cambiando. En próximas entradas publicaré un estudio realizado por mi sobre el envío de boletines utilizando listas de correo de personas que no se han suscrito, algo ilegal y penalizado, pero muy utilizado por varias empresas para transmitir a miles de correos electrónicos información sobre sus productos.

Bug Firefox

En realidad no sé si es un bug o no, pero de que es algo curioso realmente lo es. Tengo un codigo que genera un excel a partir de una tabla, pues bien, si este codigo que está en una página aparte lo llamo desde un enlace o un lo llamo desde un formulario las respuestas no son la misma. Por ejemplo en IE ambas me lo carga rapidísimo pero sin embargo en firefox si lo llamo desde un enlace tarda realmente una eternidad, casi un minuto!!! mientras que si lo hago desde el formulario lo hace en menos de 5 segundos. ¿Las llamadas a las páginas serán distintas?¿Porque en IE y otros navegadores funciona pero en Firefox no?

Validar formularios sin CAPTCHA

No sé si os pasa a todos pero cada vez que tengo que rellenar un formulario y tengo que poner el puñetero código CAPTCHA me las deseo, a veces es realmente complicado y creo a mi modo de ver innecesario. Ahora veamos como validar nuestros formularios y no morir en el intento. Eso sí, más complicado y más trabajo ya lleva, pero creo que el usuario realmente lo agradece. Esta entrada es la suma de todo lo que he ido encontrando en internet más una aportación mia. Primer paso: todo lo que validemos con javascript validarlo del lado del servidor tambien. Los robots se saltan estan validaciones javascript por eso es necesario validar todos los campos del lado del servidor, y no con ajax sino realmente antes de insertarse en la BD o enviarse el mail. Ojo cuidado con las comillas simples y dobles, palabras reservadas de sql y etiquetas html. Paso dos: Utilizar variables aleatorias y de sessión en campos hidden. O sea podemos incluir este script en nuestro formulario 1 $numeroaleatorio =

Extraer url de un texto o cadena

Siguiendo la línea de la entrada anterior el siguiente script es para sacar las url de un sitio web, en este estaría bien si alguien colabora y me comenta porque url del tipo dominosinwww.extension no las detecta, de echo (y no lo he comprobado) url con www.dominio.extensión creo que tampoco, detecta eso cualquier url con http, https o ftp, con cuantas subcarpetas, subdominios tenga. Aquí os dejo el script: 1 function tieneUrls( $cuerpo ){ 2 stripslashes( $cuerpo ); 3 $exp_url = '(ftp|http|https)://(w+:{0,1}w*@)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?' ; 4 if (preg_match_all ( "/ $exp_url /i" , $cuerpo , $urls , PREG_SET_ORDER)) 5 return TRUE ; 6 return false ; 7 } Para ver la explicación ir a la entrada anterior de Extraer emails de un texto que es idem, lo que cambia es la expresión regular.

Extraer emails de un texto

He buscado mucho por internet para sacar direcciones de correo de una cadena y he encontrado algunas funciones utilizando expresiones regulares pero siempre se me han quedado cortas, en esta que os muestro la he modificado y admite todo tipo de email, de subdominios, con extensiones de 4 letras como las .info, etc. Las aplicaciones son varias puedes leer un fichero en una cadena, un email de un buzón de correo, en fin cualquier cadena de cualquier longitud está soportada. 1 function tieneEmails( $cuerpo ){ 2 stripslashes ( $cuerpo ); 3 $exp_email = '[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})+' ; 4 if ( preg_match_all ( "/ $exp_email /i" , $cuerpo , $emails , PREG_SET_ORDER)) 5 return TRUE ; 6 return FALSE ; 7 } La variable $exp_email contiene la expresion regular y es el motor de la función. La función preg_match_all busca todas las coincidencias y las almacena en el arry $emails, con ellas po

Comportamiento de los internautas

Un 60 % de los usuarios solamente ve una página de resultados en los buscadores. Un 40 % refina su búsqueda si en la primera página no encuentra lo que precisa. Un 10 % sigue buscando resultados en la tercera o posteriores páginas de resultados. Un 55 % de las usuarios pincha en una sólo resultadoUn 80 % deja de buscar tras pinchar en tres resultados. El 84 % de los internautas usan buscadores. El 92% de los que utilizan buscadores dicen que están convencidos con sus capacidades de búsqueda, y más de la mitad de ellos, el 52 %, están plenamente convencidos. El 87 % de los que buscan algo, dicen estar muy satisfechos con sus experiencias en búsqueda la mayoría de las veces, incluyendo a ese 17 % que dicen que siempre encuentran la información que están buscando. El 50 % de los que buscan algo dicen que podrían volver a otras formas de búsqueda de información; el 32 % afirma que no pueden vivir sin los buscadores; el 17 % dice que lo pueden dejar para otra vez. El 47 % de los que buscan

Pagar o no pagar

¡Eh allí el dilema! En este mundo de las empresas del posicionamiento he escuchado de todo, incluso atrocidades tales como aconsejar a las empresas a que se olviden del posicionamiento natural y sólo se dediquen a pagar por clicks. Aclaremos conceptos: Posicionamiento natural u orgánico: Es el posicionamiento que se obtiene en los buscadores, fruto de los propios contenidos de nuestra web, tras la consulta realizada por el usuario. De pago o patrocinados:Es el posicionamiento en los buscadores mediante la contratación de “enlaces patrocinados”, es el caso de Google Adwords. Una vez que ya sabemos que es cada cosa nos preguntamos lo siguiente: si yo pago y aparesco donde yo quiero y cuando yo quiero, entonces ¿por qué esperar a que los robots se den cuenta que mi página vale y me pongan en la primera posición? y aclaro, la espera puede ser muy muy lenta. La respuesta es sencilla, si tenemos nuestra web bien construida (siguiendo las pautas de mis otros artículos) garantizamos lo siguien

¿Cómo posicionarse en Internet?

Si bien he comentado anteriormente que no existe ninguna regla básica para llegar a las primeras posiciones en cualquier buscador salvo el trabajo diario y el probar cosas nuevas, también es cierto que algunas técnicas pueden ayudar más o menos a lograr una mejor puntuación en los mismos. Técnicas comunmente llamadas SEO (Optimización para robots de búsqueda): Definir las palabras claves de nuestro sitio web y potenciar su aparición el los tags de título y descripción de nuestras páginas. Si una página es distinta a otra sus atributos también tiene que serlo. Las palabras claves introducirlas en el contenido de nuestra web y decirle a los robots que son importantes mediante etiquetas de énfasis o negrita. Utilizar correctamente la jerarquía de etiquetas. No maquetar ni diseñar nuestra web con tablas (para los boletines electrónicos si). Utilizar hojas de estilos. Crear los archivos robots.txt y sitemaps.xml Darse de alta en directorios (Dmoz) y en cuanto foro exista y que se hable de n

¿Sólo importa Google?

Por supuesto que no, pero veamos porque si hay que hacerle un incapie especial a este buscador tan particular. Hace unos años la teoría comercial de las empresas referente a internet era muy clara ¿Si no estas en Internet no existes? con el paso del tiempo y la feroz lucha por conseguir tráfico y clientes estos parámetros han cambiado y ahora cabría preguntarse ¿Si no estas en Google, existes? ¿Por qué? porqué darle tanta importancia a otro de los tantos buscadores que existen en internet por encima de cualquier criterio, muy sencillo, porque Google ha sabido adaptarse a los usuarios y logrado abarcar campos de investigación y de marketing online poco atribuibles a sus competidores más cercanos “Organizar la información del mundo y hacerla accesible y útil universalmente”. Algunos datos interesantes: En 7 años logró indexar 33 mil veces más páginas que su base de datos incial. De 8 empleados en 1999 en el 2007 cerró está cifra con 16 805. Más de 2 mil búsquedas por segundo. En el 2002

Pautas para un posicionamiento web

A la vista saltan la cantidad de sitios webs en los que se informa y se prometen posiciones y ranking en los buscadores a la par que existen otras en las que advierten del peligro de técnicas poco ortodoxas para lograr los mismos objetivos, pero en realidad ¿el posicionamiento web es una ciencia, y de serlo es exacta? Considerarlo una ciencia sería tal vez un insulto a la mátemática o la física, sin embargo no podemos negar que implica un estudio muy intenso y digno de estas materias, pero exacta eso sí nunca sería. Para lograr un posicionamiento influyen miles de factores, entre ellos: Qué quieres lograr posicionar? Qué ha hecho tu competencia? Quién tienes por delante? Sábes realmente a qué público diriges tu web y que quieres lograr con ella? Definitivamente y aunque parescan obvias todas estas preguntas, muchos webmasters solo consideran que crear la web es dominar el código y lanzarlo al mundo. Quién espere por la buena fe de los Internautas, que tenga mucha paciencia.