Algoritmo de Huffman adaptativo

Por Saiyine  el 2005-03-10 03:19:00 - Secciones:  ARTICULO  - Enlace permanente: 365

Los códigos de Huffman son posiblemente la variante más conocida de los compresores estadísticos, que aprovechan las características estadísticas de los datos de entrada asignando códigos más cortos a los datos que mas se repiten, logrando así un efecto compresor.

Para lograrlo, el compresor debe recorrer una vez el vector con la información entrante para crear una tabla con la frecuencia de cada carácter, y luego otra vez para traducir la fuente en los códigos adecuados. Esta doble pasada no siempre es posible, y aquí es donde entran las variantes adaptativas, que son capaces de generar la compresión en una sola pasada, al ir modificando los códigos de salida conforme van llegando nuevos códigos a la entrada.

El algoritmo

Como ya mencioné anteriormente, la compresión Huffman adaptativa se diferencia de la normal en que los datos estadísticos se generan en la misma pasada que se envían los códigos de salida, y esto tiene un problema evidente: ¿cómo se envía un dato que aún no ha sido registrado en la tabla de símbolos? ¡Reconstruir la tabla con cada carácter nuevo requeriría muchísimo tiempo de CPU!

Por ello, lo que se hace es modificar el árbol binario del algoritmo Huffman añadiendo un valor especial llamado NYT, not yet transmitted, que servirá como marcador de nuevo carácter, es decir, si tenemos la entrada “arañar”, la salida seria “NYT a NYT r CODIGO(a) NYT ñ CODIGO(a) CODIGO(r)”.

Otro problema que surge es el de la optimalidad de los códigos, ya que si simplemente vamos añadiendo caracteres al árbol estadístico conforme aparecen en la entrada, se perderían las ventajas de la compresión Huffman. Por ello, cada vez que se lee un carácter hay que actualizar el árbol, que pasa a ser bastante mas complejo que el algoritmo no adaptativo, de una manera determinada, dependiendo de si es un nuevo carácter o si ya estaba en el árbol.


Fig. 1. Árbol de ejemplo, conteniendo la palabra “abra”

Los nuevos elementos que podemos advertir en el árbol binario del algoritmo adaptativo frente al clásico son la presencia del código NYT, la numeración de los nodos y un contador de cada carácter. Con este contador llevamos la cuenta de cuantas veces ha aparecido el valor, y es lo que definirá en que posición del árbol pondremos al carácter en caso de reorganización, mientras que la numeración nos servirá para decidir que nodos deben intercambiar su posición.

Un ejemplo paso a paso

Veamos con un ejemplo como funciona el algoritmo, usando la palabra “abracadabra”.


Fig. 2. Árbol vacío

Comenzamos con un árbol vacío, al que le llega el primer carácter, “a”.


Fig. 3. Árbol para “a”

Con la llegada del primer dato, el algoritmo envía el dato tal cual, “a” y después genera los primeros nodos del árbol, es decir, el nodo para el NYT, con el contador a cero, y el del propio dato, con el contador a uno, y el nodo padre, el raíz en este caso, con la suma de los contadores de sus hijos.


Fig. 4. Árbol para “ab”

Tenemos un nuevo dato, así que enviamos el NYT para comunicárselo al destino, seguido del propio dato, por lo que el mensaje enviado completo por el momento es “a 0b”. Este mensaje realmente se compone de los ocho bits del símbolo “a”, seguido del bit 0 y de los ocho de “b”, por lo que es importante que tanto compresor como receptor estén de acuerdo en el tamaño del dato base, que en el programa que nos ocupa es de ocho bits.

Una vez enviados los nuevos códigos, se reestructura el árbol añadiendo el nuevo carácter “b” como hijo derecho del NYT, y creando un nuevo NYT como hijo izquierdo, y actualizando los contadores en cascada hacia la raíz, efectivamente creando un árbol balanceado.



Fig. 5a. Árbol para “abr” no actualizado

Con el nuevo carácter “r” llegamos a un punto crucial del algoritmo: la actualización del árbol. Primero, se manda el NYT y el dato r, con lo que el mensaje comprimido es ahora “a 0b 00r” (recordemos que siempre se mandan los NYT de antes de meter el nuevo carácter en el árbol). Lo introducimos en el lugar del NYT y llegamos a una posición en la que no se cumple la posición de balanceo del árbol, ya que el nodo 49 tiene el valor 2, suma de los valores de sus dos hijos, mientras que su hermano 50 tiene el valor 1, ya que el carácter “a” solo ha aparecido una vez hasta ahora. Por lo tanto, los intercambiamos, en un ajuste de balanceo que en este algoritmo es llamado simplemente proceso de ajuste del árbol.


Fig. 5b. Árbol para “abr” actualizado

Otro carácter “a”, que como ya está en el árbol es enviado comprimido, con lo que tenemos “a 0b 00r 0”.


Fig. 6. Árbol para “abra”

Ahora es el turno del dato “c”, que como no está en el árbol, mandamos el NYT y el dato en claro: “a 0b 00r 0 100c”. Después lo añadimos al árbol.



Fig. 7a. Árbol para “abrac” no actualizado

De nuevo el árbol necesita ser actualizado, ya que los nodos 47 y 48 han dejado de cumplir la condición de balanceo.


Fig. 7b. Árbol para “abrac” actualizado

Otra “a”, con lo que el mensaje completo es ahora “a 0b 00r 0 100c 0”.


Fig. 8. Árbol para “abraca”

El dato “d” es nuevo, así que lo enviamos (“ a 0b 00r 0 100c 0 1100d ”)y expandimos el nodo de NYT para acomodarlo. Además, va a desequilibrar el árbol, que necesitará un ajuste.


Fig. 9a. Árbol para “abracad” antes de actualizar


Fig. 9b. Árbol para “abracad” balanceado

La tercera “a”, con lo que el mensaje comprimido es ahora “a 0b 00r 0 100c 0 1100d 0”.


Fig. 10. Árbol para “abracada”

El siguiente carácter “b”, aunque ya está en el árbol y podría parecer que simplemente bastaría con aumentar su contador y enviar su código, en realidad va a generar un proceso interesante que podría cambiar el árbol casi por completo: una actualización en cascada.


Fig. 11a. Árbol para “abracadab” sin actualizar

Primero, los nodos 45 y 46 deben ser intercambiados, ya al aumentar el contador de b, su nodo tiene mas “peso” que su hermano derecho.


Fig. 11b. Árbol para “abracadab” actualizándose

Intercambiados los nodos, aumentamos el valor de “b” y de los padres hasta la raíz, verificando en cada nodo si es necesaria una nueva actualización, aunque en este ejemplo no se da el caso.



Fig. 11c. Árbol para “abracadab” actualizado

Los dos caracteres que faltan, “r” y “a”, no tienen mucha historia, simplemente enviamos el código y actualizamos los contadores correspondientes, con lo que el código final es “a 0b 00r 0 100c 0 1100d 0 110 110 0”, es decir, 60 bits, frente a los 88 que harían falta para mandar el mensaje sin comprimir.


Fig. 12. Árbol para “abracadabr”


Fig. 13. Árbol para “abracadabra”

La descompresión

Ahora veamos un ejemplo de descompresión. Tenemos la cadena “a 0b 00r 0 100c 0 1100d 0 110 110 0” (de nuevo, imaginemos que en vez de los caracteres tenemos grupos de 8 bits con la representación ascii de dichos caracteres). Leemos los primeros ocho bits, ya que forzosamente el primer carácter debe estar sin codificar, con lo que ya tenemos la “a”, y la introducimos en el árbol. El siguiente dato, o bien es un uno si es otra vez la “a”, o es un cero para indicar el valor NYT. En nuestro caso, es un cero, así que lo leemos y los siguientes ocho bits, con lo que ya tenemos “ab”.

Ahora el descompresor tendría en su memoria un árbol análogo al de la figura 4, por lo que al leer un cero sabemos que debemos leer al menos un bit más. Efectivamente, nos llega otro cero, con lo que tenemos un NYT. Leemos otros ocho bits y ya tenemos “abr”. Actualizamos el árbol, igual que hacíamos en la compresión, y leemos un cero, lo que nos indica que tenemos otra “a”.

Leemos un bit y tenemos un uno, que no es ningún código conocido, leemos otro y tenemos uno-cero, que sigue siendo desconocido. Volvemos a leer y tenemos uno-cero-cero, que en la disposición actual del árbol ( fig 6 ) es un NYT. Leemos ocho bits más, tenemos “abrac”. Sacamos un cero de la cadena, y como sabemos por el árbol que es una “a”, tenemos “abraca”.

Se lee bit a bit hasta que tenemos una combinación con significado, y en este caso, se trata de nuevo de un NYT, acompañado de los ocho bits de la “d”, con lo que el código hasta ahora es “abracad”. Hasta el final, tenemos caracteres sueltos que completan el mensaje, que es, claro esta, “abracadabra”.

21 
Anonimo (2005-10-06 16:15:00)

:noworry: :noworry: :roll: :huh: :OO 8)

62 
Anonimo (2005-11-03 17:23:00)

:roll: :huh: :noworry: :push: :OO :OO :OO :OO :OO :OO :OO :OO :OO :OO :OO 8O :P :P :P :P :P :P :P :P :P :P

327 
Javi (0000-00-00 00:00:00)

Quisiera ver si es posible obtener el codigo de Huffman Adaptativo escrito en un lenguajes de alto nivel no importa cual sea. Que es estrictamente necesario obtenerlo para un trabajo que tengo que realizar. El algoritmo ea un poco complicado de entender pero mucho mas de implementar. quisiera que porfavor me puedan ayudar Gracias... Javier Prieto.. De Maracaibo Venezuela...

329 
Saiyine (0000-00-00 00:00:00)

Bien, veamos, aquí tienes unos cuantos enlaces, en Java, en C [1] y [2]; y en C#.

531 
chema (2006-09-04 11:26:27)

Buenas a todos, necesito el codigo de huffman en pascal, y que este en castellano si es posible. Contestenme si son tan amables a la direccion de correo siguiente: jmvm17@hotmail.com. Gracias-

580 
elpez (2006-10-01 09:41:19)

<%
response.write "hola"
%>

581 
elpez (2006-10-01 09:42:06)

<?
echo "hola";
echo "hola";
echo "hola";
echo "hola";
echo "hola";echo "hola";echo "hola";echo "hola";echo "hola";

?>

600 
Anonimo (2006-10-09 10:21:46)

hola

Me gustaria saber como puedo hacer el codigo de un arbol binario balanceado, para eliminar nodos e imprimirlos.
Si es posible que me manden el codigo se los adgradeceria.

Gracias

725 
Anonimo (2006-11-07 07:34:32)

00101101 00101110 00100000 00101110 00101101 00100000 00101101 00101101 00100000 00101110 00101101 00100000 00101110 00101110 00101110 00100000 00101101 00100000 00101110 00100000 00101110 00101101 00101110 00101101 00101110 00101101 00100000 00101110 00101110 00101110 00101110 00100000 00101101 00100000 00101101 00101101 00100000

727 
Anonimo (2006-11-08 02:52:04)


00101101 00101110 00100000 00101110 00101101 00100000 00101101 00101101 00100000 00101110 00101101 00100000 00101110 00101110 00101110 00100000 00101101 00100000 00101110 00100000 00101110 00101101 00101110 00101101 00101110 00101101 00100000 00101110 00101110 00101110 00101110 00100000 00101101 00100000 00101101 00101101 00100000


737 
Anonimo (2006-11-21 06:45:52)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

738 
Anonimo (2006-11-22 07:25:05)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000 :x :x :x :?

741 
Anonimo (2006-11-23 11:46:24)


00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

saben lo qe significa.??? :push:

748 
Anonimo (2006-11-25 08:20:43)

No lo se, ¿puedes decirmelo?

755 
lucas (2006-11-27 01:05:19)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000






caverna!!!!

756 
Anonimo (2006-11-28 06:37:47)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

772 
Sherlock (2006-12-06 05:58:46)

Porque CAverna ... como llegaste a esa conclucion?

774 
katy (2006-12-07 09:24:17)

hola Quisiera ver si es posible obtener el codigo de Huffman Adaptativo escrito en un java Que es estrictamente necesario obtenerlo para un trabajo que tengo que realizar. El algoritmo ea un poco complicado de entender pero mucho mas de implementar. quisiera que porfavor me puedan ayudar Gracias...katy :)

781 
Anonimo (2006-12-10 01:12:47)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

786 
Anonimo (2006-12-14 08:50:38)

no tengo ni idea de como habeis llegado a la solución de caverna, pero me ha servido para ponerlo en el tool-chile.com en el nivel 8

791 
Anonimo (2006-12-16 03:22:42)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 0010001

796 
Anonimo (2006-12-17 05:05:11)

como descifraron caverna!? alguien ponga una explicacion para ilustrarnos

799 
Anonimo (2006-12-19 06:56:18)

:push: :push: :push: :push: :push: :push: :push: :push: :push: :? :? :? :? :? :? :? :? :? :? :? :? :?

807 
miguel (2006-12-25 09:38:49)



PORFAVOOOOOORRRRRRRR.. que alguien nos explique como llegaron a "caverna".. me sirvió para el "tercerojo" de tool-chile.com, pero me frustra un pococ no saber como consiguieron la respuesta...

porfaaaaa jajajaja...


Saludos!



825 
Paloma Merino (2007-01-04 04:41:44)

Hola, no sé si tiene algo ke ver, pero necesito decodificar esto
00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000


pero no sé como
=S

Alguna ayuda?

837 
yo (2007-01-11 08:12:43)

pueden mandarme el algoritmo de huffman en python

838 
mi nombre es romance (2007-01-11 08:15:25)

:x :| por favor como puede codificar el algoritmo de huffman en pyrhon? alguien ayudeme

839 
Saiyine (2007-01-11 08:25:39)

Ningún problema, aqui teneis una copia: Python Huffman Encoding.

860 
dy (2007-01-17 10:26:17)

:) Quisiera poder terner acceso al codigo de fuente de hufman

971 
Anonimo (2007-02-19 04:27:32)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

973 
Anonimo (2007-02-21 01:12:09)

Como lo decodificaron? quisiera saber porq caverna?

984 
Anonimo (2007-02-25 07:07:11)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000



996 
Anonimo (2007-02-28 02:25:56)

y el nivel 8? alguien sabe la solucion? parece un ojo...

997 
Anonimo (2007-02-28 02:26:54)

Alguien sabria decir porq el nievel 4 era arcoiris?

Carlos (2007-04-04 09:38:09)

escribe (r) en msn (=

Anonimo (2007-04-11 09:20:57)

porq nadie puede decir porq demonios la solucion es caverna 8O

Anonimo (2007-04-12 07:13:15)

Buenas gente,
Veo que estamos en el mismo tema.
He encontrado codigo del algoritmo de Huffman en vb.net pero creo q no está bien del todo. Me gustaria saber si es posible conseguirlo o en C#.NET si no hay más remedio.
Un saludo gracias.
Urgente^^

Anonimo (2007-04-19 07:49:45)

no estaría mal que te currases tu un poco la programación ;)

Saiyine (2007-04-19 08:32:57)

Gracias a las típicas injusticias de la universidad, de entre muchas y muy graves, quiso la diosa fortuna que, por una vez, esta fuera a mi favor, y el profesor creyó que yo era de los que deben aprobar por decreto y actuó en consecuencia.

Grave error, yo soy de la lista B, y para cuando se dió cuenta ya estaban las actas firmadas.

Anonimo (2007-04-24 05:56:29)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

luka (2007-04-25 05:58:46)

hi;

un favor si me podrian enviar un programa en java sobre el balanceo de un arbol binario y el borrado de un nodo garx

Saiyine (2007-04-25 01:52:07)

Google al rescate: "java arbol binario" devuelve 28.000 resultados, de los que, en un vistazo rápido, yo empezaria por revisar este y este.

realidad (2007-05-16 02:11:50)

quiero que me manden el codigo en java de huffman, para comprimir archivos.

Sixtolo (2007-05-21 05:05:14)

fuertes lokoooooos iste

Anonimo (2007-05-31 11:19:32)

sixtolo dice xDD, casi me lo creo
enga pollo ;)

Anonimo (2007-06-20 03:10:43)

deseo decifrar algo pero no se como


ariel (2007-08-05 12:41:47)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

q alguien me tradusca eso porfa...lo agradeceria

Anonimo (2007-08-17 11:18:56)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

Anonimo (2007-08-26 06:35:30)

POR QUE ES CAVERNA??
POR QUE ES CAVERNA??
POR QUE ES CAVERNA??
POR QUE ES CAVERNA??
POR QUE ES CAVERNA??

Anonimo (2007-08-30 12:14:36)

ES CAVERNA PORQUE SOY FLAYTE Y LO DIGO.

Anonimo (2007-09-16 09:56:57)

necesito arbol de humman en haskell

JORGE (2007-09-20 08:19:47)


00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

porqueeso es caverna, ya converti el binario y no di como llegaron a caverna, alguien me podria decir?????

Anonimo (2007-09-27 05:22:41)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

DEYSSE99@HOTMAIL.COM (2007-10-24 04:43:55)

KISIERA SABER SI ESTE KODIGO ME

Leticia (2007-11-25 01:38:19)

Hola Necesito ayuda urgentemete antes de las doce
Nenecesito el algoritmo de arbol Huffman en haskell
podeis ayudarme porfavor?

ANAID (2007-11-26 04:36:04)

PORFAVOR AYUDENME NECESITO EL CODIGO DEL ARBOL DE HUFFMAN EN HASKEEL ES MI UNA DE MIS CALIFICACIONES FINALES PORFAS AYUDENME

Anonimo (2007-12-17 07:23:05)


00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

pol (2007-12-18 01:03:03)

que tal gente?

tengo un problema el cual es: tomo un texto de pantalla (ingresado por el usuario), creo un arbol de huffman con su tabla de frecuencias y lo codifico ahora mi pregunta es: que tengo que guardar en un archivo en el disco para despues abrirlo y poder decodificar lo que esta ahi? tengo que guardar la tabla de frecuencias? que no comprennndo! gracias_

Saiyine (2007-12-19 04:48:50)

Uhm hace muchisimo tiempo que no me dedico a esas cosas, pero juraria que debes guardar una tabla con las equivalencias entre cada caracter y su codigo, y luego la conversion del texto a cada codigo.

Anonimo (2007-12-20 02:16:19)

00101101 00101110 00101101 00101110 00100000
00101110 00101101 00100000 00101110 00101110
00101110 00101101 00100000 00101110 00100000
00101110 00101101 00101110 00100000 00101101
00101110 00100000 00101110 00101101 00100000

En binario eso significa "-.-. .- ...- . .-. -. .-"

Y esto en codigo morse es "caverna"

Anonimo (2008-02-28 09:50:39)

joto :P

Anonimo (2008-02-28 09:51:15)

joto el que me lea!xD

Anonimo (2008-03-13 10:44:43)

ahi dios dios no saben el codigo mira primero tienen que poner binario despue de eso les aparesera una frase que es caberna a ver si usamoos la cabesiita pendejitos. ^^

Bixino (2008-05-16 09:01:02)

Hola a todos!!

Alguien puede ayudarme a encontrar el codigo de Huffman para Shell/Linux??

Gracias!!!


Tu nombre (Nick):

Tu correo (Email):
  Necesario para tu gravatar!

Tu página (URL):

Escribe aqui tu comentario:

       :noworry: :roll: :huh: :push: ¬¬ :OO 8) 8O :( :) :? :D :P :o :x :| ;) ^^ xD



Vista previa activada.

Vista previa (6/6/6, 6:66)


Patrocinadores

Saiyine recommends the easiest way to earn money with your web: get paid just by having some links! Click this button to check it out.

Text Link Ads

. . .

Descargas

  • ApagaPC
    apagapc241.exe  (2080)
  • LimpiaDocus
    LimpiaDocus001.exe  (1798)
  • RCM
    rcm001.zip  (1666)
  • Popmail
    popmail-0.4-psmn.tar.gz  (1716)
  • Manual de Delphi en PDF
    delphi_pdf.zip  (2214)
  • Evangelio del Perl
    Evangelio_del_perl.pdf  (1833)
  • Excel Simpsons
    Excel Simpsons  (1872)
  • . . .

    Recomiendo

  •  Mozilla Firefox 
    DIR (571)
  •  Mozilla Thunderbird 
    DIR (544)
  • KLite 
    klmcodec375.exe (99)
  •  Emule 
    DIR (511)
  •  Knoppix 
    DIR (430)
  •  Knoppix en español (DVD) 
    DIR (771)
  •  Mldonkey 
    DIR (489)
  •  Nucleo linux 
    DIR (490)
  •  Parche linux 
    DIR (490)

    . . .
  • Proyectos online

  • Saiyine Store
  • Kunowalls!!!
  • Fondos de pantalla
  • Picaday: imagenes sexys o chocantes.
  • Scarlett: fotos de Scarlett Johansson
  • WhatsmyIP: obtener tu IP pública
  • Uma Thurman: galeria de Uma Thurman
  • FunPics: imagenes graciosas
  • . . .

    Blogs

  • Por lo que más querais, no entreis a estos: Tapanez, Yhandros, Onez.

  • Otros en español: Chavalina, Testosterona, Kirai, Wardog y el mundo, Mundo Geek, Microsiervos.

  • Mis lecturas en guiri: Coding Horror, MySQL Performance, Slashdot.

    . . .
  • Utilidades

  •  Coral  (606), cacheando webs
  •  Spam.la  (696), correo de usar y tirar
  •  Mailinator  (687), correo de usar y tirar
  •  Bug me not  (636), absurdos registros di NO
  •  Trashmail  (627), correo de usar y tirar

    . . .
  • Saipuntos

    Jomer: 2
    Yhandros: 1
    Cheimy: 1

    . . .

    Página web ©2001-2008 Saiyine generada en 0.41792s, con 1669856 visitas en total, hoy 637 (de un total de 1203 previstas).

    . . .