GPS Blaukpunkt Travel Pilot

Si decides realizar el proceso de “tuneo” debes saber que corres el riesgo de estropear tu GPS y que no vuelva a arrancar por lo que vosotros decidis si asumis este riesgo o no. En ningún caso quiero fomentar con este tutorial la instalación de software propietario ajeno al oficial que trae el GPS. Este post es meramente informativo y en él no hay ningún link de descarga de software ilegal.

Lo primero necesitamos un Blaupunkt Travel Pilot el cual puedes conseguir por 50€ siempre que tengas un Worten cerca.
Ahora tienes que conseguir una Tarjeta SD la cual modificaremos para crear una SD “mágica” con la cual accederemos al WIN CE5 que trae el GPS de serie y que está oculto.

Pasos a seguir:

  • Conectar el GPS al pc y renombrar el archivos de la memoria del navegador igolaunch.exe por Orig_IgoLaunch.exe
  • Copiar el contenido de la carpeta FlashDisk (solo el contenido) que tenemos en éste RAR a la raiz del navegador (son 4 pequeños archivos).
  • Formatear nuestra SD en FAT 32 y meter la carpeta TP Easy (en este caso la carpeta entera, no sólo el contenido)

Ahora si inicias el navegador con la SD mágica puedes acceder a las entrañas del navegador y si lo enciendes sin la SD el GPS arranca como viene de fábrica

Añadiendo otros navegadores a la SD mágica (por ejemplo, IGO8)
Para comprobar el proceso necesitamos un IGO8 , el cual podeis descargar -bajo vuestra responsabilidad- de varias WEBS , o más fácil aun, usad el que trae vuestro navegador, que es de vuestra propiedad.

Las fueron realizadas con la version del IGO8 8.3.2.80621
Los pasos exactos a seguir son los siguientes:

  • En la SD creada anteriormente mete (en la raiz de la misma) la carpeta IGO8 del navegador
  • Ahora inserta la SD mágica al navegador (para entrar al menú oculto) y enciéndelo
  • Abre el explorador de archivos (el dibujo de un PC que sale) e ir a esta carpeta:
    SDMMC/TPEasy/SHELL/WINCE5 (SDMMC es la tarjeta de memoria, no una carpeta dentro de ella)
  • Dentro de esta carpeta hay que ejecutar (hacer doble click) en EXPLORER.EXE
  • Una vez hecho esto vais a la ruta del IGO8 que metimos antes y hacéis doble click en IGO8.exe

Si has realizado correctamente todo el proceso, el navegador se ejecuta perfectamente desde la tarjeta SD:
Blaukpunkt Travel Pilot

Simplificando el proceso
Seguro que os parece una lata realizar todo el proceso este cada vez, ¿verdad? No pasa nada… hay una forma de simplificarlo un poco, que pasa por editar y modificar el archivo Navigator.ini que se encuentra dentro de \SHELL\SysInfo\ de nuestra SD. Si lo abris con un editor de texto (por ejemplo, notepad), podréis modificarlo.

Descarga mi archivo modificado (el que tengo en mi SD) si deseas ahorrarte trabajo. Contiene tres iconos (Miomap, WINCE, IGOSD). Son accesos directos al explorer WINCE y a los navegadores Miomap y IGO8 de prueba que meti en la raiz de la tarjeta SD , los cuales funcionan correctamente.

Es importante respetar las rutas de las aplicaciones ya que de lo contrario no funcionara la modificacion del archivo. Siendo SDMMC la raiz de la tarjeta SD:

La ruta de Wince5 (tal como la dejaron los italianos) es: SDMMC/TPEasy/SHELL/WINCE5
La del IGO8 (en mi SD): SDMMC/IGO8/
Y la del MioMap (en mi SD) :SDMMC/MioMap/

Las unicas pruebas realizadas con navegadores de forma satisfactoria hasta el momento fueron con el IGO8 y el miomap , lamentablemente el TomTom no carga.

Un ejemplo de lo conseguido: blaupunkt travelpilot tuneado

********* IMPORTANTE **********
Teneis que configurar el Igo8 que meteis en la SD con los datos correctos de configuracion original del GPS.
Es decir vais a ajustes GPS y poneis lo siguiente:
Puerto : 2
Baudios: 38400

En el MioMap 2008 no me hizo falta modificar nada , al minuto de encenderlo detecto la señal del GPS.

Versiones de Navegadores Testeadas.
IGO8 8.3.2.80621
Miomap 2008

Agradecimientos: a Ojancano, de forocoches, por la GRAN labor de investigación desarrollada con este GPS. Sin él nada de ésto habría sido posible.

Javascript: depurando errores

Depurar errores al programar en Javascript puede ser un verdadero engorro. Si no utilizas ningún debugger tienes que llenar el código de alerts, borrando las cachés del navegador, …

Por eso yo utilizo dos herramientas muy completas:
1. JSLint:
Es un parser Javascript. Verifica que el código es sintácticamente correcto, informa de las variables no declaradas, etc.
Modo de funcionamiento: copiar tu código fuente (encerrado en tags <html><head> ... </head></html>) y pulsar el botón JSLint (en la parte inferior de la página).
JSLint javascript

2. Firebug:
Es un plugin para Firefox. Permite ejecución paso a paso del código Javascript, la inspección de variables, …
Modo de funcionamiento: Instalar el plugin, reiniciar Firefox, ir a la página que aloja el código que deseemos ejecutar, pulsar la pestaña “Scripts” y, en el fuente, añadir los breakpoints (botón derecho). Más tarde, disparar el evento que ejecute el código y usar los controles de ejecución y el inspector de variables.

firebug -1

firebug - 2

Ajax (I): peticiones HTTP – HTTP Requests

A menudo es útil realizar peticiones HTTP al servidor, para, por ejemplo, invocar un programa (sea php, python, asp…).
El siguiente ejemplo muestra el código Ajax para realizar una petición de este estilo.
Los resultados se almacenarán en el div RESULTSDIV

<script>
         function fromServer(){
                 if( http_request.readyState==4 ){
                     if( http_request.status==200 ){
                           // results from call to the server appear here
                           // in http_request.responseText;
                           e = document.getElementById("RESULTSDIV");
                           e.innerHTML = http_request.responseText;
                     }
                     else{
                           // uncomment next line if you want to show any error messages
                           alert('error: ' + http_request.responseText);
                     }
                 }
         }

         function makeRequest(url,param){
               url = url + param;
               http_request = false;
               if(window.XMLHttpRequest){ // Mozilla, Safari,...
                  http_request = new XMLHttpRequest();
                  if (http_request.overrideMimeType){
                      http_request.overrideMimeType('text/html');
                  }
               }
               else if (window.ActiveXObject){// IE
                  try{ http_request = new ActiveXObject("Msxml2.XMLHTTP");}
                  catch (e){
                        try{
                           http_request = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e2) {}
                   }
               }
               if (!http_request){
                  // uncomment next line if you want to show any error messages
                  alert('Cannot create XMLHTTP instance');
                  return false;
               }
               //alert("makeRequest(): url='"+url+"'");
               http_request.onreadystatechange = fromServer;
               http_request.open('GET', url, false);
               http_request.send(param);
          }
</script>

Un inciso para comentar algo importante:
Ese último parametro de http_request.open() indica si la petición será síncrona o asíncrona.
Es fácil de entender.
SINCRONA: Significa que la funcion javascript no seguirá interpretandose hasta que la operacion ajax finalize.

Código PHP:
var algo = newajax();
algo.open(algo,algo,false);
algo... //blabla
#Este alert solo se ejecutara cuando todo lo de arriba se haya interpretado y finalizado.
alert(222)

ASINCRONA: Significa que la funcion javascript pasará de largo de proceso ajax sin necesidad de esperar a que esté finalizado para seguir interpretandose es por eso que se usa los onreadystatechange osea… en que estado va tu proceso.

Código PHP:
var algo = newajax();
algo.open(algo,algo,true);
algo... //blabla

#Este alert se ejecutará sin importar que el proceso ajax haya finalizado .. pasa de largo.
alert(222)

Otra definición.
ASINCRONA: le vale un pepino tu proceso ajax y continua el interprete javascript.
SINCRONA: espera a que todo termine para continuar.

En el caso que me ocupa utilizo la siguiente función para invocar el procedimiento makeRequest:


        function busca(pal){
               var valor=document.forms[0].group1y.checked;
               //alert("busca(): "+valor);
               if (valor!=true){
                  document.getElementById("RESULTSDIV").innerHTML = "";
               }
               else{
                  var base='http://olmo.unizar.es';
                  var param='/search?ln=es&sc=1&p='+pal;
                  makeRequest(base,param);
               }
           }

También puede hacerse interpretando los valores que devuelve en la función busca. Para ello el código sería:


          function fromServer(){
                 if( http_request.readyState==4 ){
                     if( http_request.status==200 ){
                           // results from call to the server appear here
                           // in http_request.responseText;
                           //e = document.getElementById("RESULTSDIV");
                           //e.innerHTML = http_request.responseText;
                           //alert('fromServer(): responseText='+http_request.responseText);
                           var salida=http_request.responseText;
                           return salida;
                     }
                     else{
                           // uncomment next line if you want to show any error messages
                           alert('error: ' + http_request.responseText);
                     }
                 }
         }

         function makeRequest(url,param){
               url = url + param;
               http_request = false;
               if(window.XMLHttpRequest){ // Mozilla, Safari,...
                  http_request = new XMLHttpRequest();
                  if (http_request.overrideMimeType){
                      http_request.overrideMimeType('text/html');
                  }
               }
               else if (window.ActiveXObject){// IE
                  try{ http_request = new ActiveXObject("Msxml2.XMLHTTP");}
                  catch (e){
                        try{
                           http_request = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e2) {}
                   }
               }
               if (!http_request){
                  // uncomment next line if you want to show any error messages
                  alert('Cannot create XMLHTTP instance');
                  return false;
               }
               //alert("makeRequest(): url='"+url+"'");
               http_request.onreadystatechange = fromServer;
               http_request.open('GET', url, false);
               http_request.send(param);
               return http_request;
          }
          function busca(pal){
               var valor=document.forms[0].group1y.checked;
               //alert("busca(): "+valor);
               if (valor!=true){
                  document.getElementById("RESULTSDIV").innerHTML = "";
               }
               else{
                  var base='http://olmo.unizar.es';
                  var param='/search?ln=es&sc=1&p='+pal;
                  var out=makeRequest(base,param);
                  if (out!==undefined){
                       document.getElementById("RESULTSDIV").innerHTML = out.responseText;
                  }
             }

Un ejemplo de todo ello funcionando a la vez como elemento programando en Python disponible para descarga [aquí]

Teoría: sistemas de codificación binaria y operaciones

Representación de ENTEROS POSITIVOS
BCD (binary coded decimal)
En BCD cada cifra que representa un dígito decimal (0, 1,…8 y 9) se representa con su equivalente binario en cuatro bits (nibble o cuarteto) (esto es así porque es el número de bits necesario para representar el nueve, el número más alto que se puede representar en BCD).
Por ejemplo, el número 36 codificado en BCD sería: 0011 0110
Sumando en BCD: si se produce desbordamiento se suma a ese grupo de bits 6, osea 0110 y se propaga el overflow. Por ejemplo:


   19 =       0001         1001
   29 =       0010         1001
              ------------------
                       (1) 0010   (se suma 0110 a esta parte y se propaga el 1 al siguiente grupo)
                           0110
              ------------------
              0001          |
              0010          |
             ---(1)         |
             -------------------
              0100         1000

Representación de ENTEROS CON SIGNO
Signo y magnitud
Se reserva el MSB (more significant bit) para el signo y el resto para la magnitud (módulo)
Desventaja: doble representación del 0 y no se puede sumar/restar directamente.
Para SUMAR: primero sumar módulos y fijarse si existe overflow. después añadir el MSB que determina el signo.
Por ejemplo, con n=4bits:
+6=0 110
-6 = 1 110

suma de dos números positivos (o dos negativos):
0 110 --> módulo = 110
0 110 --> módulo = 110
Suma (módulos) = 1100 --> EXISTE OVERFLOW --> hay que aumentar en uno el número de bits
Resultado: ambos son positivos, por lo que la suma es también positiva ---> 0 1100

sumando positivos y negativos
Regla: restar al módulo del mayor el módulo del menor y después colocar símbolo.

– si el módulo del número positivo > módulo del negativo –> resultado positivo –> MSB=0
2 = 0 010
-1 = 1 001
2 - 1 = 010 - 001 = 001 ---> como resultado>0 ---> 0 001

– si el módulo del número positivo < módulo del negativo --> resultado negativo –> MSB=1
-2 = 1 010
1 = 1 001
-2 +1 = 010 - 001 = 001 ---> como resultado<0 ---> 1 001

BCD con SIGNO
También conocido como BCD empaquetado. Se almacena, en los 4LSB’s, la información del signo (positivo=1100, negativo=1101)
Por ejemplo:
127 = 0001 0010 0111 1100
-127 = 0001 0010 0111 1101

Complemento a uno
Ca1(N)=(2^n)-N-1 siendo n el número de dígitos
N-->negado-->Ca1(N)

Problema: la duplicidad de representación del número 0
Operar: sumar el acarreo del MSB al resultado de la suma
Por ejemplo:
6 (base 10) = 0110
-6 (base 10) = 1001
Cuya suma es: 0110+1001 = 1111 y NO OVERFLOW ---> resultado = 1111 = 0000

2 (base 10) = 0010
-1 (base 10) = 1110
Cuya suma es:
0010
1110
------
(1)0000 --> se suma el acarreo=(1) al LSB---> 0001

Complemento a dos
Ca2(N) = (2^n) - N siendo n el número de dígitos
N-->negado-->+1-->Ca2(N)
Ventaja: no existe duplicidad en la representación del número 0.

Por ejemplo:
6 (base10) = 0110 (base2)
-6 (base10) = 2^4 - 6 = 16-6=10 = 1010 (base2)

bin neg +1
--> 0110 --->1001 ---> 1010

La suma de ambos es 0110+1010=0000

Algo más de información, como siempre, en Wikipedia.

VMWare ESX Server & Infraestructure Client

Imagina que tienes un servidor en producción y deseas tener instalados múltiples sistemas operativos en él, dando la sensación de que dispones de distintos servidores, con distintos SO’s.

virtualization scheme

Pues para ello podemos usar VMWare ESXServer. En mi caso tengo instalado VMWare ESXServer 3 con varias máquinas virtuales linux sobre él. ESXServer es un sistema que se instala directamente sobre el servidor, a modo de sistema operativo. En realidad es un linux Red Hat modificado. También encontramos ESXi, un software especial para máquinas que tienen un firmware específico.

Tras realizar la instalación del paquete descargado (desde aquí) procedemos a crear nuestras máquinas virtuales (o subirlas, si ya las tenemos en el disco duro de nuestra máquina local).

Una vez completada la instalación, abrimos un navegador en nuestra máquina local y vamos a la ip (o el nombre) de nuestro servidor. Si todo ha ido bien, veremos algo asi:

VMWare ESX Server 3

Aquí procedemos a descargar el cliente, VMWare Infrastructure Client (marcado en rojo en la imágen superior). Lo instalamos (muy fácil), lo ejecutamos y rellenamos los campos del formulario con la IP o el nombre de nuestro servidor, login=root y password de root.

vmware infrastructure client login

Pulsamos enter y nos aparecerá algo asi:
vmware insfrastructure client 2

Ya podemos empezar a importar máquinas virtuales o crear algunas nuevas. Para subir contenidos al disco físico de la máquina servidor, vamos a la pestaña Configuration – Storage y hacemos doble click en el icono de nuestro disco duro.

Yo, como véis, me he creado varias máquinas con distintos sistemas.
vmware insfrastructure client manage datastores

Have fun! 😉

Instalando VMWare Tools en Debian 5 (Lenny)

Si no sabes qué es la virtualización de máquinas échale un ojo a Wikipedia.

VMWare es el software de virtualización más extendido. Tras llevar a cabo la instalación del sistema operativo guest uno de los problemas más habituales suele ser la instalación de VMWare Tools.

Vamos a ver cómo instalarlas, paso a paso:
Sistema operativo host: Windows XP SP3
Sistema operativo guest: Linux Debian5 (2.6.26-1-686)
Versión de VMWare: Workstation 6.0.2

Paso 1: montando la ISO
Supongamos que NO tenemos la ISO de VMWare, y sólo tenemos el instalador (.exe) descargado. Bien, en ese caso hay que obtener primero la ISO.
Para ello, descarga la versión de VMWare Workstation para Linux en un archivo .tar.gz. Yo, que uso la versión 6.02, descargo éste archivo. Si utilizas otra versión, busca el tar.gz que corresponda a tu versión aquí.

Una vez descargado el archivo (en mi caso VMware-workstation-6.0.2-59824.i386.tar.gz), lo abrimos con winrar y extraemos el contenido de /lib/isoimages a nuestro disco duro. Por ejemplo, a c:\tmp\wmvare-isos\

A continuación arrancamos VMWare Workstation y ponemos en marcha la máquina virtual (linux debian 5).
Vamos al menú VM -> removable devices -> CD-ROM -> Edit... y montamos la ISO correspondiente a nuestro sistema operativo guest, osea linux.iso

vmware tools install 1

Una vez montada la iso abrimos una consola y nos ponemos como root para montar el cd:
su
mount /media/cdrom

vmware tools install 2

Y copiamos el archivo el archivo tar.gz del CD al escritorio, por ejemplo. Después lo descomprimimos, por ejemplo, al escritorio.
Obtendremos algo asi:
vmware tools install 3

Ya podemos desmontar el cd, para ello umount /media/cdrom

Paso 2: instalando las tools

Instalamos algunos paquetes necesarios:
su
apt-get install autoconf
apt-get-install automake
apt-get install binutils
apt-get install linux-headers-`uname -r`
apt-get install make
apt-get install build-essential

Ahora ejecutamos vmware-install.pl, que está dentro del directorio que se ha creado en el escritorio y seguimos los pasos del instalador.

vmware tools install 4

posibles problemas durante la instalación
p.1. – En mitad de la instalación podemos encontrarnos con problemas derivados de incompatibilidad de versiones de gcc. Si es el caso obtendremos un mensaje del tipo


Si es el caso abortamos la instalación (CTRL+C), instalamos la versión gcc-4.1 y pondremos la variable de entorno con el valor correcto:
apt-get install gcc-4.1
CC=/usr/bin/gcc-4.1
export CC
)

p.2. – Podemos tener problemas a la hora de compilar vmmemctl. A continuación pego el diff entre el código “malo” y el “patch” para arreglar os.c
Buscar /tmp/vmware-config0/vmmemctl-only/os.c
Editar (esto es la salida del diff)
--- vmmemctl-only/os.c 2008-08-12 21:45:43.000000000 -0400
+++ vmmemctl-only/os.c 2009-02-20 08:05:56.000000000 -0500
@@ -202,7 +202,7 @@

#ifdef CONFIG_PROC_FS
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-static int os_proc_read(char *, char **, off_t, int);
+static int os_proc_read(char *, char **, off_t, int, int *, void *);
static struct proc_dir_entry *global_proc_entry;
#else
static int os_proc_read(char *, char **, off_t, int, int);
@@ -529,9 +529,11 @@
#ifdef CONFIG_PROC_FS
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
static int os_proc_read(char *buf,
- char **start,
- off_t offset,
- int length)
+ char **start,
+ off_t offset,
+ int length,
+ int *eof,
+ void *data)
#else
static int os_proc_read(char *buf,
char **start,
@@ -587,7 +589,7 @@
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
global_proc_entry = create_proc_entry("vmmemctl", S_IFREG | S_IRUGO, NULL);
if (global_proc_entry != NULL) {
- global_proc_entry->get_info = os_proc_read;
+ global_proc_entry->read_proc = os_proc_read;
}
#else
proc_register(&proc_root, &global_proc_entry);

Si se presentan más problemas, pon un comentario y trataré de ayudarte 😉

Accediendo a máquinas remotas: PuTTY y NX-Server

A la hora de acceder a máquinas remotas linux desde windows, podemos hacerlo de dos maneras:
(1) En modo texto, usando la herramienta PuTTY (para Windows), disponible para descarga gratuita aquí
(2) En modo gráfico, utilizando el fantástico software NX (cliente+servidor, disponible para Windows y Linux), que se puede descargar de forma gratuita aquí Existen otros gestores de X, como XWinPro, XServer, … Personalmente, prefiero NX, por ser gratuito y multiplataforma.

PuTTY es muy simple e intuitivo de utilizar, por lo que pasamos a comentar cómo instalar/configurar/utilizar NX.

Instalación del servidor NX (en la máquina remota a la que deseas acceder) en Linux debian5 2.6.26-1-686
– Aseguramos que tenemos instalado el paquete ssh. Si no es asi, lo instalamos. En mi caso uso debian, por lo que simplemente hago (como root)
apt-get install ssh
– Instalamos algunos paquetes más:
apt-get install build-essential
apt-get install apt-get install libssl0.9.8
apt-get install apt-get install libssl0.9.8-dbg

– Descargamos el servidor y el nodo para Linux. En mi caso, la versión NX Free Edition for Linux Compressed TAR - i386 . Hace falta instalar el server y el node
– Nos ponemos como usuario root
su
– Descomprimimos el contenido del fichero tar descargado en /usr

cd /usr
tar -xzvf /home/tu-usuario/Desktop/nxserver-3.3.0-22.i386.tar.gz
tar -xzvf /home/tu-usuario/Desktop/nxnode-3.3.0-17.i386.tar.gz

– Creará una carpeta llamada NX, entramos en ella:
cd NX
– Procedemos a instalar

./scripts/setup/nxserver --install
./scripts/setup/nxnode --install

Creamos un enlace simbólico para nxssh:
ln /usr/bin/ssh nxssh
Nos aseguramos de que el puerto 22 está abierto y escuchando. Para ello basta con hacer
ssh localhost
y ver si nos pide usuario y contraseña. Si lo hace, vamos bien. Pulsamos CTRL+C para abortar la sesión ssh.
A continuación procedemos a arrancar el servicio nxserver
/usr/NX/bin/nxserver --start

Instalación del cliente NX (en tu máquina local)
– Procedemos a descargar el cliente para windows. En mi caso, la versión 3.3.0-6
– Realizamos la instalación.
– Ejecutamos la aplicación y vamos completando los pasos del asistente:
El primer paso nos pide un nombre para la sesión (a gusto del consumidor), el servidor remoto al que deseamos conectarnos (que previamente tendrá nx-server instalado) y la velocidad de nuestra conexión.

nx client installation step 1

En la siguiente pantalla pregunta a qué tipo de sistema nos vamos a conectar, y con qué escritorio deseamos hacerlo. En mi caso voy a conectarme a un servidor Linux, por lo que selecciono Unix y escritorio KDE (podría elegir GNOME u otros). El área es mejor dejarla tal cual

nx client installation step 2

A continuación pulsamos Terminar, introducimos nombre de usuario y contraseña y… voilá!

nx client installation step 3

Posicionamiento en google (I): validando tus DTD's

Antes de seguir leyendo:
– Si no sabes qué es un DTD, búscalo en wikipedia

De cara a tener un alto pagerank en google, un aspecto que debemos verificar periódicamente es la validez de nuestros DTD’s. Además, tener un código válido, limpio y organizado mejora notablemente el aspecto de nuestra página web, aportándole solidez.

Validando el DTD
Podemos utilizar múltiples herramientas para validar el código fuente de nuestras páginas. Yo suelo utilizar el Validador del W3C.

Éste validador lee el código fuente de nuestra página, consulta el DTD que estamos utilizando y valida nuestro código contra ese DTD. Si nuestro código es incorrecto nos muestra los errores que tiene y, normalmente, nos da pistas sobre cómo solventarlos.

Para mis páginas suelo utilizar el DTD Transitional.
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Por ejemplo, para validar la corrección del DTD, basta con pulsar en este enlace

Si la validación pasa sin errores, podremos incluir el siguiente logo en nuestro sitio.

Valid XHTML 1.0 Transitional

Creando sitemaps de forma automática

Si no sabes qué son los sitemaps, para de leer y consulta wikipedia.

Existen multitud de servicios para crear sitemaps [1].

Dentro de las herramientas online, me gusta especialmente xml-sitemaps.

xmlsitemaps

Este servicio crea sitemaps en formato xml, directamente importable a google, así como html. Las versiones html son especialmente útiles para verificar qué contenidos se han indexado en el sitemap. Gracias a ello podemos observar fallos en nuestras páginas (URL’s que no deberían ser visibles, enlaces que fallan, títulos de enlaces repetidos, etc).

sitemap version HTML

Por ejemplo, en esta imágen se observa que existen varias páginas con el mismo título. A las arañas de google no les gustan los títulos repetidos, por lo que habría que modificar algunas de mis páginas para que tuvieran títulos distintos. Hablaremos más adelante sobre cómo mejorar el posicionamiento web y el pagerank de tus páginas.

Las versiones gratuitas de estos servicios online no siempre satisfacen las necesidades del webmaster (indexan hasta un máximo de 500 páginas, no se permite la utilización de filtros de exclusión de contenidos por url, ni por tipos de archivo, no se permite controlar la profundidad a la que se indexa, etc).

Por todo ello resulta conveniente utilizar herramientas locales (ejecutadas directamente en el servidor, o mediante un cliente). Paso a comentar algunas alternativas para Windows y Linux

Herramientas server-side para Windows

Últimamente estoy empleando GSiteCrawler.

Éste software, que funciona bajo windows, nos permite crear varios proyectos al mismo tiempo y guardar los settings para cada uno de ellos.

Un pantallazo del programa en ejecución:
GSiteCrawler en ejecucion

Herramientas server-side para Linux
Google ha desarrollado GoogleSitemapGenerator, todavía en versión Beta. Ofrece versiones para Windows y Linux, ambas de libre distribución. En este caso comentaré la versión para linux.

Siguiendo el manual de instalación instalamos el software, ponemos una password para administración del nuevo servicio y hacemos un restart del Apache. La aplicación corre por defecto en el puerto 8181.

La aplicación permite definir filtros de inclusión/exclusión de contenidos, tamaños máximos de archivos, inclusión directa de los sitemaps en google, cambiar el nombre del fichero sitemap donde se guardan los resultados, etc.

Un pantallazo de la herramienta mientras comienza la indexación de contenidos…
google sitemap generator en ejecucion

[1] Herramientas para la generación de sitemaps, por categorías

Programas para ejecutar en el servidor

CMS y otros plugins

Herramientas descargables

Servicios de generación online

Librerías/Códigos fuente