Yo, programador
El pequeño Weblog de Alberto Vilches...
Esta pagina se encuentra inactiva desde el 27 de Julio de 2006

La nueva direccion es: http://albertovilches.com
RSS Feed: http://feeds.feedburner.com/albertovilches - Más información aqui.

27.07.06

Nos hemos mudado!

Archivado en: Actualidad — vilches @ 15:59:42

Pues sí, después de un tiempecillo trasteando, la migración ya está terminada. Así que este humilde blog se muda a un nuevo sitio:


http://albertovilches.com

Esto significa que dejaré de utilizar el alojamiento de 3essentials (un solo dominio y solo PHP) bajo el subdominio de segundo nivel de vampisol.com por un nuevo hosting en cwihosting (multiples dominio, PHP y Java con Resin) y utilizando un nuevo dominio de primer nivel como http://albertovilches.com, que siempre parece más serio.
También cambio de B2evolution a Wordpress, en el nuevo blog publicaré un post exclusivamente a la migración y las mejoras que he visto en el cambio de software.

Esta web seguirá funcionando durante tiempo indefinido, pero no se actualizará. También se cerrarán los comentarios, pero se dejarán todos los posts.

También se cambia el RSS feed claro, y además a través de Feedburner.

El nuevo feed es:


http://feeds.feedburner.com/albertovilches

De todas formas, los suscriptores pueden utilizar cualquiera de estos enlaces para continuar leyendo "Yo, programador" en su lector de feeds favorito sin tener que hacer absolutamente nada.

  • Add to netvibes
  • Subscribe in Bloglines
  • Add to Google
  • Add to Bitty Browser
  • Subscribe in NewsGator Online
  • Subscribe in Rojo
  • Add Yo, programador to Newsburst from CNET News.com
  • Subscribe in FeedLounge
  • Add to My AOL
  • Add Yo, programador to ODEO
  • Subscribe in podnova
  • Add to Plusmo
  • Add to The Free Dictionary
  • Subscribe in NewsAlloy

Un saludo y ya sabes donde encontrarme: http://albertovilches.com

Die, bot, die: Hot Captcha

Archivado en: Internet/Geek — vilches @ 11:05:18

Vía Buayacorp descubro HotCaptcha, un nuevo sistema de validación humano (tipo Captcha) en el que el usuario debe decidir las 3 personas mas atractivas de las 9 que presentan.
La idea parece buena, aunque he hecho varias pruebas y al menos una vez he fallado. ¿Realmente es tan evidente distinguir las personas mas guapas de las que no? A veces parece que si, pero otras puede haber dudas, ya que depende de los gustos.

Además, la utilización del servicio no requiere nada especial. Tan solo añadir una línea de javascript en tu formulario y después hacer una llamada al servidor de HotCaptcha con la respuesta recibida. Todo esto lo explican en la propia home de la página. Sorprendente. ¿Te atreves a ponerlo en tu weblog?

HotCaptcha

De todas formas, la duda es ¿quién decide quien es "hot" y quien no? Pues parece que este servicio utiliza el API de HotOrNot - ¡no sabía que tenían su propia API! - una web donde la gente envía sus fotos para que los demas las voten, por lo que podemos saber por votación popular cuales son "atractivos" y cuales no (hasta cierto punto). Así que el sistema es neutral, se basa en las fotos enviadas por los usuarios y los datos recolectados por ellos mismos para saber cuales son los hot y cuales no. Interesante.

Pero ¿y si aparece tu propia foto en una página web y debes validarte a tí mismo? Menuda situación.

Enlaces:

20.07.06

Flash en b2evolution

Archivado en: HTML/Javascript/CSS — vilches @ 10:43:33

A raiz del post anterior, he visto que b2evolution te devuelve un bonito "Illegal tag" cuando intentas insertar codigo html que no reconoce, como el de un objeto flash incrustado.

Buscando por internet, he descubierto como conseguir que valide este código flash.
Para esto, teneis que modificar el fichero conf/_formating.php, buscando donde pone:

  'div' => E_Flow,

Y sustituirlo por

  'div' => E_Flow.' object',
  'object' => E_Iinline.' param embed',
  'embed' => E_Iinline,
  'param'  => E_Iinline,

Es decir, se modifica <div> (para que admita la etiqueta <object> en su interior) y se añaden las etiquetas <object>, <embed> y <param>.

Después, teneis que añadir los atributos. Donde pone:

$allowed_attribues = array
(

Añadirle (añadir, no sustituir) lo siguiente:

  'object' => E_Iinline.' type data width height',
  'param'  =>  E_Iinline.' width height name value',
  'embed'  =>  E_Iinline.' src type width height name value',

La única condición es que la etiqueta <object> principal del flash esté en el interior de una etiqueta <div>
Así que con todo esto conseguiremos que el siguiente código html sea válido en nuestros posts con b2evolution.

<div align="center">
   <object width="425" height="350">
     <param name="movie" value="http://www.youtube.com/v/GWzmL05OlYA"></param>
     <embed src="http://www.youtube.com/v/GWzmL05OlYA" type="application/x-shockwave-flash" width="425" height="350"></embed>
   </object>
</div>

La solución la he cogido y ampliado de aquí, ya que la que proponen solo admite la etiqueta <object> pero no incluye <embed>

Portal: tuneles dimensionales

Archivado en: Juegos/Partidas — vilches @ 10:08:10

Estamos tan acostumbrados a ver juegos realistas con efectos tan increibles, con gráficos y texturas tan impresionantes y con música y guión de cine, que hace mucho tiempo que es dificil que un juego nos sorprenda.
Sin embargo, hoy he visto el vídeo de un juego que me ha vuelto a sorprender completamente. Es Portal, el mod para "Half Life 2: Episode Two" que viene incluido en esta entrega. Estos chicos de Valve saben como invertarse armas nuevas: En el primer episodio de Half Life 2 nos sorprendían con el arma antigravedad, con la que podiamos coger y lanzar objetos de gran tamaño a nuestros enemigos.
Y en Portal, nuestro arma permite abrir agujeros que se conectan como tuneles dimensionales: abre un agujero en el suelo y otro en la pared de al lado, me tiro por el agujero y aparezco por la pared. Quizá explicado así suene un poco extraño, pero para eso está el vídeo explicativo:


Enlace al vídeo: Valve's Portal en YouTube, o descargalo

Desde luego conmigo tienen una compra garantizada en cuanto salga.

Vía: Vida Extra, JeuXpo

19.07.06

Lenguajes de programación esotéricos (II)

Archivado en: Java/Programación — vilches @ 15:01:33

Vía Menéame, encuentro algunos lenguajes de programación esotéricos muy interesantes en DM's Esoteric Programming Languages.

Uno de ellos, el que ha motivado la noticia, es Piet cuya principal característica es que el codigo fuente aparece codificado en un gráfico con pixeles de colores. El principio de diseño de Piet, segun su autor es:

Program code will be in the form of abstract art.

De ahí que el propio lenguaje se llame como el famoso autor de arte abstracto Piet Mondrian.

Aquí ponemos, para vuestro deleite, el código de algunos programas peculiares:


Hello World

Una versión de las muchas que hay que pinta "Hello World!"

Torres de Hanoi

Este por ejemplo resuelve el legendario problema de Las Torres de Hanoi, aunque nadie sabe como funciona.

Piet!

Y para rematar, este programa solo imprime "Piet" indefinidamente, pero el merito esta en que el código fuente realmente se parece a una obra de Piet Mondrian.

Más esotérico, imposible. Aqui tenéis más ejemplos de programas codificados con Piet.

.kkrieger, un juego de 96Kb

Archivado en: Juegos/Partidas — vilches @ 09:25:34

Todos recordaremos desde tiempos memorables aquellas demos con espectaculares animaciones, gráficos y música. Había categorías que creaban autenticas maravillas con 64k o incluso con 4k.
Los tiempos y las tecnicas avanzan. Y los programadores tambien, ya lo creo.

Fijaros en esta maravilla, un juego 3D completo, estilo Quake, con armas, enemigos, musica y texturas en tan solo 96Kbs

96Kb

Se llama .kkrieger: chapter 1, es una beta y la podeis cargar y ejecutar directamente desde aqui.
Tarda un poco en cargar porque debe descomprimir y generar las texturas en memoria antes de ejecutarse. En tan solo 96kb no hay sitio para música o gráficos, asi que las texturas, modelos y sonigos se guardan como complejas formulas matematicas y filtros que se aplican sucesivamente, una técnica llamada síntesis procedural que permite crear gráficos complejos en tiempo real ocupando un espacio mínimo de memoria (ver más sobre esto en tecnologia utilizada). Necesita DirectX 9.0b y una tarjeta gráfica potente. Merece la pena solo verlo. Así que probadlo ahora.

Recomendable también la lectura del cómo se hizo y ver algunas demos que estos chicos saben hacer. No somos nadie...

Vía Gordopilos, Joystiq

18.07.06

Atomium de Bruselas censurado

Archivado en: Actualidad — vilches @ 14:08:12

Vía Pito Doble me entero de que la SABAM (equivalente a la SGAE en España) ha establecido, por petición del propio arquitecto autor de la obra, un canon por cualquier tipo de difusión sobre el Atomium de Bruselas.

Es decir, cualquier sitio donde se publique una foto de esta obra de arte pública (incluido cualquier blog de internet como éste) tiene que pagar derechos de autor. Por ejemplo, esta página web ha recibido una factura de 793€. Por supuesto, el autor ha decidido quitar cualquier imagen antes que ceder al chantaje que supone el pago de este impuesto abusivo.

Atomium de Bruselas

Me pregunto que van a hacer con todo esto.

¿Os imagináis que hicieran lo mismo con la Estatua de la Libertad, la Torre Eiffel, las piramides de Egipto, la torre de Pisa o la puerta de Alcalá?

Espeluzante, patético y miserable.

16.07.06

Mitos y verdades de Microsoft

Archivado en: Actualidad — vilches @ 16:31:03

Vía Halón Disparado, tenemos un interesante artículo sobre los Mitos y verdades de Microsoft, donde intentan desmitificar algunas leyendas o atribuciones falsas que se han hecho a Bill Gates. Aquí os resumo algunas cosas, pero merece la pena leerlo entero.

Bill Gates no inventó Basic.
Basic fue creado por John Kemeny y Thomas Kurtz en 1964. Lo que Gates y Paul Allen hicieron fue crear una versión del intérprete de dicho lenguaje para computadoras personales Altair.

El DOS tampoco fue diseñado ni desarrollado por Microsoft
Fue adquirido a una pequeña empresa llamada Seattle Computer.

Microsoft no inventó los entornos gráficos, ni las ventanas, ni el mouse.
Todo esto fue desarrollado por la empresa Xerox en el año 1973 y luego copiado por Apple a fines de los '70 y Microsoft ya entrados los '80.

Microsoft no inventó Internet, la web o los navegadores
La Internet, como tal, data aproximadamente de 1986 (aunque se originó desde fines de los '60). La World Wide Web (junto con los primeros navegadores) surgió en el año 1991. Tiempo después, Microsoft compró un navegador llamado Mosaic a la empresa Spyglass, para luego transformarlo en el hoy conocido Internet Explorer. La primera versión de Internet Explorer apareció en agosto de 1995.

Sigue leyendo Mitos y verdades de Microsoft

14.07.06

Python: 4 lineas para resolver un Sudoku

Archivado en: Java/Programación — vilches @ 12:35:21

Documento original, visto vía Menéame

def r(a):i=a.find('0');~i or exit(a);[m
in[(i-j)%9*(i/9^j/9)*(i/27^j/27|i%9/3^j%9/3)or a[j]for
j in range(81)]or r(a[:i]+m+a[i+1:])for m in'%d'%5**18]
from sys import*;r(argv[1])

Solo 178 bytes. ¿Genial no?

Ficheros KK

Archivado en: Yo, programador — vilches @ 10:44:02

Tan real como la vida misma. Y es que por un lado tenemos el codigo spaghetti y por otro lado, los ficheros KK

En todo proyecto informático que se precie hay uno o más ficheros "kk", que no sirven para nada, que nadie usa, pero que si se te ocurre borrar el proyecto deja de funcionar.

También suele haber varias versiones de ejecutable, cuyos ficheros se llaman así ejecutable_bueno.exe, ejecutable_nuevo.exe, ejecutable_hoy.exe, ejecutable_ultimo.exe. Está claro que esta nomenclatura de nombres es la más adecuada para saber cual es el que hay que arrancar, en función de que se quiera el bueno, el nuevo, el de hoy o el último.

...

Sigue leyendo el post de los ficheros KK en el genial Chuidiang

13.07.06

Arranque rápido de Windows

Archivado en: Software — vilches @ 08:14:32

En los comentarios del post anterior Carlos_hg preguntaba como acelerar el arranque de Windows. Jose recomendaba utilizar msconfig, una utilidad que viene con Windows y que sirve para activar o desactivar ciertos componentes del arranque.
Si tenemos un poco de cuidado, podemos conseguir que el arranque de Windows tarde un poco menos.

Pero si esta utilidad se queda corta, yo uso RegCleaner, una utilidad parecida con la que puedes inspeccionar el registro con el fin de limpiar entradas innecesarias que se han ido agregando con el tiempo a base de instalar y desintalar software.

El RegCleaner que yo uso es la versión 4.3 (del 2001) y es libre. Sin embargo, en la pagina oficial no aparece ni esta version ni el propio programa con ese nombre. En su lugar hay otras utilidades parecidas llamadas RegSupreme (version normal y Pro) y un pack llamado jv16 PowerTools 2006 que incluye un RegCleaner. Todos son shareware y puedes bajarte un trial de 30 dias gratis.

Podeis probarlo y, si os gusta, comprarlo. O buscar la versión antigua que utilizo yo en la mula.

12.07.06

Cierre rápido del sistema en Windows

Archivado en: Software — vilches @ 08:28:57

Lo acabo de ver en Kriptópolis.
La aplicación que comentan, UPHClean, es un servicio que se queda instalado en Windows y fuerza a que las aplicaciones liberen todos sus recursos al cerrarlas. Así, el proceso de apagar Windows durará mucho menos. Probadlo.

28.06.06

10 cosas que un programador Java debería saber

Archivado en: Java/Programación — vilches @ 12:07:39

He encontrado un artículo muy interesante que trata sobre los 10 errores más comunes (o 10 cosas que deberías saber) cuando desarrollas bajo Windows, pero tu aplicación va a correr sobre Linux/Unix. El artículo original está aquí en Javalobby. Como está en ingles pero me parece muy útil, he decido hacer un resumen un poco libre y en castellano sobre los puntos que trata.
En este post van los 5 primeras, mañana o pasado publicaré los 5 siguientes:

10 cosas que un programador Java debería saber

10 Uso especial de puertos
En unix, solo el usuario root puede abrir puertos por debajo de 1024. En Windows cualquiera puede hacerlo. Si tu aplicación usa un puerto por debajo de 1024 piensa que en Unix solo funcionará si el proceso corre como root.

9 No hay bloqueo mágico de ficheros
Windows protege automáticamente contra escritura los ficheros abiertos, pero en Unix no: tu puedes estar leyendo un fichero y otra aplicación/hilo puede borrarlo.
El siguiente código falla en Windows (protegiendo el fichero), pero en Unix no falla y el fichero es eliminado.

// Se abre el fichero
InputStream is = new FileInputStream("foo.txt");

// Se borra el fichero: en Windows falla, en Unix no
(new File("foo.txt")).delete();

// Intentamos leer el fichero
// En Windows nunca llegamos hasta aquí, pero en Unix
// el contenido del mismo ya ha sido borrado
int ch;
while( (ch = is.read()) > 0 )
    System.out.println( "char: " + (char)ch );
is.close();

8 A veces no hay interfaz
En Unix no siempre hay interfaz, ya sea gráfica o de consola. Y a veces no hay ni consola, puede ser que la máquina sea un servidor que no tenga pantalla, ni teclado, ni ratón, ni nada. Tu aplicación puede ser un simple proceso lanzado en background por un cron por ejemplo. Si la salida estándar no está redirigida a un fichero (para hacerlo, utiliza el método setOut de la clase System), puede que tus System.out.print() se pierdan para siempre.
Utiliza siempre un sistema de logs que escriban a fichero tus trazas.

Otra cosa: aunque no uses AWT directamente (por ejemplo, en una aplicación J2EE) puede ser que utilices sin querer la interfaz gráfica del sistema al manipular imágenes con el Api AWT del JDK (por ejemplo, al cambiar el tamaño de imágenes). Si tu Unix/Linux no tiene unas X, fallará. La solución a esto consiste en utiliza el parámetro -Djava.awt.headless=true en el arranque de tu máquina virtual.
Más información: JDK 1.4.2 AWT Changes, Mindprod glossary: Headless

7 En unix no hay registro
Unix no tiene un lugar central donde almacenar toda la configuración del sistema. En su lugar, utiliza ficheros en texto plano repartidos en diversos directorios (/etc/* la mayoría).
Si usas el registro de Windows para localizar información del sistema, intenta averiguar su equivalente en Unix. Piensa que incluso será más comodo leer un texto plano que tener que acceder al registro.

6 Barras invertidas

En Windows, el separador de directorios es "\" (backslash), por ejemplo: C:\Archivos de Programa\Mola
Pero en Unix el backslash es el carácter de escape, así que el separador de directorios es "/" (slash), por ejemplo: /etc/passwd.

Lo bueno es que Windows admite los dos separadores, mientras que Unix no, por lo que tiene fácil solución: usar siempre "/" (slash)

Si has utilizado en tu código y ficheros de configuración el separador de carpetas "\", puedes cambiarlo tranquilamente por "/" para que funcionen en Unix y seguirán funcionando también en Windows.
Si por alguna razón necesitas saber en tiempo de ejecución que separador utilizar, siempre puedes utilizar la constante java.io.File.separatorChar

IMPORTANTE: el artículo original tiene una errata y dice que la constante a utilizar es java.io.File.pathSeparatorChar, confundir estas dos constantes también es un gran error muy común: pathSeparatorChar es el separador para los elementos del CLASSPATH y no para los directorio. Valdrá ":" para Unix y ";" en Windows, que no es lo mismo que separatorChar.

27.06.06

En efecto, está usted loco

Archivado en: Internet/Geek — vilches @ 08:34:17

El secreto encanto de las start-up

Desde el recientemente constituido Departamento de Filtraciones Extraoficiales de Negonation: parte del secreto encanto de trabajar en una start-up viene de momentos como estos,

Intenta cambiar el mundo, mientras te lo pasas como los indios... :-)

Via: Enrique Dans

26.06.06

¿qué significa "Yep"?

Archivado en: Internet/Geek — vilches @ 12:58:57

Genial.

Q:
What does 'yep' really mean?

Does it mean "Yes, thank you for telling me, i understand?"

Does it mean "I don't understand a single thing you just said, but I'm polite and you seem to like the sound of your own voice, so please keep going?"

Or does it mean "I already knew that. You've just wasted your breath talking to me. Shut up in future, big nose."

A:
Yep

Via secretGeek

Reproductor mp3 portatil "Winamp"

Archivado en: Actualidad — vilches @ 11:23:20

¿No es una pasada?

Un Winamp en tu mano

Via: TecnoCHICA, Gizmologia , Gizmodo

Más libros de Java gratis

Archivado en: Java/Programación — vilches @ 10:55:11

Vía Javahispano, tenemos una página con bastantes libros gratuitos interesantes. Ya tenéis algo que leer este veranito!

25.06.06

CSS: background, eliminar parpedeos en IE6

Archivado en: HTML/Javascript/CSS — vilches @ 17:10:36

Si alguna vez has utilizado imágenes como fondo de elementos con CSS, te habrás fijado que en Internet Explorer 6.0, cuando pasas por encima el cursor del ratón, se produce un molesto parpadeo o "flick".
Es decir, con tener un código CSS y HTML simplemente como éste:

.mifondo {
    background: url('img/cuadradito.gif') no-repeat;
}

<div class="mifondo">Aqui aparece un cuadradito de fondo</div>

En IE6 para Windows no se va a ver bien al pasar por encima el ratón.
Es un error conocido, y en esta página te explican como reproducir el error y la solución de cada uno (para poder ver los ejemplos de la página hay que utilizar IE6 claro):

De todas formas, y tras probar varias soluciones, la que he utilizado y que recomiendo, es la siguiente:
Solo tienes que subir al directorio en tu servidor Web donde están las imágenes que vas a utilizar como fondo en tus CSS un fichero .htaccess con el siguiente contenido:

ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000

Esta solución esta completamente explicada en:

El resto de soluciones son más laboriosas y algunas no son 100% efectivas. De todas formas sigue siendo muy recomendable leer el artículo para ver los diferentes bugs que tiene el IE6 con los background en CSS.

23.06.06

Quitar el WGA de Windows XP

Archivado en: Software — vilches @ 13:32:10

Vía Kriptopolis, ya tenemos una utilidad para eliminar el WGA.

WGA, la polémica utilidad "antipiratería" que permite a los ordenadores con XP conectarse a cada arranque con Microsoft y transmitir cierta información a la casa madre, podría tener los días contados.
[...]
RemoveWGA es una herramienta que acaba con esa limitación, puesto que respeta la función de validación de WGA, pero elimina la polémica función notificadora, velando además en silencio para que ésta no vuelva a ejecutarse...
[...]
Se trata de una descarga de sólo 10 KB, que ha sido elaborada por una firma que parece fiable y que funciona en Windows XP con SP1 ó SP2.

Si tienes XP, ya estás tardando en descargártelo de aqui o aqui.

Aprobada la reforma de la LPI que extiende el canón

Archivado en: Actualidad — vilches @ 12:42:19

Vía Error500

A partir de ahora el canon se extiende a cualquier 'soporte idóneo' para grabar y reproducir archivos, por lo que podrá ser aplicado a reproductores MP3 y teléfonos móviles. Desde ya, queda redefinido el concepto de copia privada, que queda recluida al "ámbito privado". Desde hoy queda prohibido "civilmente" el saltarse medidas tecnológicas anticopia. Y, dado que establece que creadores y productores tendrán también una compensación directa por la "puesta a disposición" de sus obras en Internet, abre las puertas a denuncias por uso de redes P2P para compartir contenidos con copyright. Todo eso se ha aprobado hoy en el congreso.

ESPELUZNANTE. Nos gravan con impuestos para sufragar la perdida de beneficios que tendrán las discográficas y productoras, dando como cierta la suposición de que cada formato digital que compremos servirá para grabar musica o películas.
¿Si dan por hecho que vamos a hacer copias, porque es ilegal bajárselas, si ya pagamos impuestos por copiarlas? ¿Si ya pagamos por copiar, porque llevan sistemas anticopia (DRM) los discos que compramos? Que contradicción y que falta de conocimiento de la sociedad y de la tecnología por parte de los políticos que aprueban estas leyes. ¿Realmente va a ayudar esta ley a algo, salvo a enriquecer a unos pocos? ¿Es mejor para la sociedad de la información y para España un canón que afecta a todo el mundo para enriquecer a unos pocos? Esta claro que no, pero ellos no lo quieren ver.

Más información: El mundo, 20 minutos, Interiuris, David Bravo, Barrapunto, El País.

Y gracias a Jorge Cortell, nos cuenta como podemos eludir esta ley abusrda y abusiva. Es muy fácil, según nos indican:

El proyecto aprobado aclara que la “copia privada” de una obra debe ser realizada por una persona física para uso privado y a partir del original.

Por lo que, (es solo un resumen, ver el post original para leerlo completo), estas son las medidas a tomar:

  • Hay que comprar los soportes sujetos al pago del canon a nombre de una persona jurídica. O sea, que los CDs, móviles, DVDs, etc lo compre la empresa, que al no ser persona física no podrá realizar copias privadas, y por lo tanto el soporte que compre no estará sujeto a pago del canon.
  • Si lo que se quiere es hacer Copias Privadas, y no preocuparse de si la copia se realiza de “original” o no, no hay problema: en el mundo digital es imposible diferenciar la copia del original. Por lo tanto hay que hacer copias exactas.
  • Si tememos a lo de “uso privado”, lo tenemos fácil: usad auriculares con el MP3, poned el aire acondicionado en el coche y subid las ventanillas, etc. ¿Y el ordenador? Está considerado como ámbito privado, por lo tanto, aunque se emplee una red P2P, se puede hacer como copia privada, de acceso privado, a nuestro original digital.
  • Y, sobretodo, en caso de duda, emplead reproductores que admitan archivos digitales, los cuales aun siendo copia, son indistinguibles del original. En ese caso, no os tenéis que preocupar, pues hasta que restrinjan el ámbito de uso del original, nadie podrá, con la ley en la mano, dudad de que el “original” que lleváis en el reproductor (de DVD, de MP3, disco duro del ordenador, etc) es un ORIGINAL.

powered by  b2evolution



yoprogramador en del.icio.us