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