Talleres de Linux y LaptopFest

La comunidad universitaria está invitada a los talleres de Linux y la instalación de Ubuntu. Para esto el grupo Linux-IDES ha preparado una interesante agenda de actividades.

Talleres Linux

Sábado 23 (10am - 1pm)
- Ventajas y usos actuales del software libre
- Instalación de Ubuntu GNU/Linux en PCs y Laptops
- Instalación gráfica de aplicaciones

Martes 26 (6pm - 9pm)
- Ofimática con OpenOffice.org (Writer, Calc, Impress)
- Firefox 3 y Búsqueda de información en Internet
- Correo electrónico con Mozilla Thunderbird

Viernes 29 (6pm - 9pm)
- Multimedia con Rhythmbox y VLC
- Mensajería instantánea en Pidgin y aMSN
- Gráficos e imágenes: GNU Paint y gThumb

Inscríbete

LaptopFest

Se realizará el Sábado 23, paralelamente con los talleres.
Lugar: Laboratorio H-412 (Facultad de Letras y Ciencias Humanas PUCP)

Inscribe tu laptop

Más información en la web de TuxPuc

YouTube Annotations

Hoy probé los Annotations de YouTube. Este feature nos permite colocar anotaciones en los videos disponibles en YouTube.

Entre los tipos de anotaciones disponibles tenemos:

- Notas: Se colocan en un recuadro en cualquier lugar y momento del video.

- Spotlight: Se emplea para resaltar alguna zona del video.

- Speech Bubble: Se utiliza para colocar una burbuja de diálogo e indicar quién de los presentes en el video dice las palabras contenidas en ella.

Durante la reproducción

El video que he usado para la prueba es la introducción al documental Giramundo Tour 2001 con Manu Chao disponible en mi mi canal en YouTube

Publicado en on Agosto 17, 2008 at 11:36 pm Comentarios (0)
Tags: , ,

Dynamic Programming Day 2008

El PLUG (Grupo de Usuarios de Linux del Perú) ha organizando un jornada de conferencias técnicas denominada “Dynamic Programming Day”.

Son nueve charlas sobre los Lenguajes Dinámicos de más uso en la actualidad tales como Python, Ruby, Perl y Javascript. Se tratará también desarrollos específicos hechos con estos lenguajes como la librería JQuery y los frameworks de desarrollo web Django, Ruby on Rails y Catalyst.

Cada participante recibirá un CD-ROM con códigos fuentes, vídeos y documentación. También se sortearán libros originales, entre otros premios.

Fecha y Lugar

El evento se llevará a cabo el Sábado 16 de Agosto desde las 10:00am hasta las 9:00pm en Cibertec - Av. Salaverry 2255, San Isidro.

Agenda

10:00am Introducción a los Lenguajes Dinamicos
Expositores: Yonsy Solis y Antonio Ognio

11:00am Introducción a Ruby
Expositor: Jaime Wong

12:00pm Rails 2
Expositor: Alvaro Pereyra

1:00pm Perl, Perl 6, Parrot y Catalyst
Expositor: Breno Colom

2:00pm Receso para el almuerzo

4:00pm Introducción a Python
Expositor: Gustavo Picón

5:00pm Django
Expositor: Jesús del Carpio

6:00pm Python y otros lenguajes dinámicos en GNOME
Expositor: Diego Escalante

7:00pm Javascript
Expositor: Juan Pablo Scaletti

8:00pm JQuery
Expositor: Erik Porroa

Les dejo el afiche

Más información en el sitio web del PLUG

Lively, el SecondLife de Google

Google lanzó su mundo virtual llamado Lively. Para empezar no se trata de mundos sino de cuartos o rooms de dimensiones moderadas. Aún las características no son muy amplias pero un punto a favor es su ejecución en el browser y la agilidad del sistema, esto se debe a que al parecer la finalidad de Lively es crear espacios configurables para el chat con personajes 3D y no aplicaciones complejas como las que ya se encuentran disponibles en Second Life..

Esta tecnología está disponible para la plataforma Windows y los navegadores Mozilla Firefox y MS Internet Explorer. El archivo de instalación está disponible en la web de Lively.

Aquí mi primer room llamado Zion. Espero que pronto se pueda construir más y ampliar el terreno.

Saludos.

Publicado en on Julio 10, 2008 at 1:52 am Comentarios (0)
Tags: , , ,

Ubuntu 8: Hardy Heron LTS

Hardy Heron LTS

Hace pocos días salió a la luz Hardy Heron, no fuimos pocos los que recién parido quicimos tenerlo en nuestras manos y gozar de su belleza. Lo bajé de la web TuxPUC que es de un grupo de Investigación alrededor del tema de Linux y Software Libre que existe en mi universidad. Pertenecí a este grupo hace algún tiempo.

Quemé la imagen del Hardy Heron 8.04 LTS Alternate a un CD y procedí con algunos comandos para actualizar mi sistema.

gksu “sh /cdrom/cdromupgrade”

Durante el proceso de Upgrade guardé una copia de algunos archivos que el sistema de actualización sugería reemplazar. Alrededor de 300 MB fueron descargadas pues tengo más software instalado que el que vino en el CD de Gusty Gibbon. Entonces no les contaré tanto sobre el Hardy Heron sino del comportamiento de otras aplicaciones ya instaladas en Ubuntu antes del upgrade.

LDAP

cp /etc/ldap/ldap.conf /etc/ldap/ldab.conf.bak

Se ha insertado en la primera línea un comentario sobre la versión de este archivo de configuración.
Se ha reemplazado el dc base de ejemplo de example a nodomain.
Es seguro reemplazar este archivo.

MySQL

cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

Se ha agregado una anotación con prioridad de Importante sobre cambios generales al archivo de configuración de mysql. Yo Había activado skip-external-locking para administración remota pero no tuve éxito así que puedo reemplazar este archivo sin problemas.

Asterisk

cp /etc/asterisk/extensions.conf /etc/asterisk/extenstions.conf.bak

Se han corregido ciertas imprecisiones en los nombres de comandos del CLI de asterisk. También se han reemplazado algunas comillas simples por comillas dobles. Es conveniente rescatar configuraciones personales como pueden ser extensiones creadas por nosotros en este archivo.

Por ejemplo yo tengo las siguientes líneas. Sin embargo es curioso que la actualización de asterisk no reemplaza iax.conf. Entonces no realiza el reemplazo por tratarse de archivos de configuración sino únicamente de los que se hayan tenido cambios desde la versión anterior.

;
[positivo]
exten => 444,1,Dial(IAX2/Rita)
exten => 444,2,Hangup
exten => 445,1,Dial(IAX2/Bob)
exten => 445,2,Hangup
exten => 600,1,Dial(IAX2/Ziggy)
exten => 600,2,Hangup
;

ProFTPd

cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak

Se ha agregado una línea imprescindible en la versión 1.3 de proftpd que es una instrucción Include. Se debe reemplazar el archivo de configuración anterior.

PHP5

cp /etc/php5/cli/php.ini /etc/php5/cli/php.ini.bak

Se ha incrementado la memoria que un script puede usar en memoria de 32M a 128M.
Se ha incluido las opciones para la salida de errores.
La función dl() que se emplea en servidores multihilo como IIS o Zeus es automáticamente desabilitada en ellos por lo que está activa por defecto.
El valor para cgi.fix_pathinfo es por defecto 0 pero la documentación señalaba 1, esto ha sido corregido.
El parámetro fastcgi.log ha sido renombrado a fastcgi.logging.
Al final del archivo se ha incluido una línea que hace referencia a la extensión imap.so.

cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.bak

Los cambios en este archivo son los mismos que se presentan en /etc/php5/cli/php.ini. Adicionalmente, al final del archivo se hace referencia a la extensión mcrypt.so.

SASL

cp /etc/default/saslauthd /etc/default/saslauthd.bak

Se ha agregado unas línea de Descripción del demonio de Autenticación SASL.
Se ha agregado unas líneas para un nombre corto para este demonio.
Ahora es necesario emplear el flag -m.

Tremendo Bug

PHP5 no trae imagick ni recode. imagick.so y recode.so están en los repositorios oficiales de Ibuntu pero existen problemas con libWand.so.9.
El buen Olexandr Zanichkovsky coloca en su repositorio de launchpad los paquetes arreglados.
deb http://ppa.launchpad.net/ozanichkovsky/ubuntu hardy main
Que dicho sea de paso, aún no logro instalar.

Publicado en on Abril 28, 2008 at 12:11 pm Comentarios (0)
Tags: , ,

Git y Mercurial: QuickStart for the impatient

Deseaba probar los sistemas de control de versiones Git y Mercurial así que decidí versionar un pequeño proyecto para postear al Twitter de manera automatizada los últimos feeds de los blogs que administro. Veamos las fuentes de este proyecto como simpleas archivos alacenados en un directorio simple. Inicialmente este directorio se llamaba RSStoTwitter y pensa cambiarlo a RSS2Twitter pero uno de los blogs está sindicado con Atom así que el nombre no era preciso. No me he preocupado en revisar si el Atom es un RSS, pero supongo que amgos son estructuras XML sencillas y transformables entre sí ya que su finalidad e sla misma. No nos desviemos más y vayamos a lo nuestro.

He creado tres directorios para realizar las pruebas.

git_github: versionará empleando Git y es alojado en el servidor libre de GitHub.com
git_assembla: versionará empleando Git y es alojado en el servidor libre de Assembla.com
hg_freehg: versionará empleando Mecurial (HG por el símbolo del elemento químico Mercurio) y es alojado en el servidor libre FreeHG.org

Para el caso de Git se puede emplear la seguridad de un certificado RSA el cual podemos crear desde el directorio home de nuestro usuario:

cd .ssh
ssh-keygen -t rsa
<nombre para el certificado>
<password>

Para mostrar la llave pública realizamos la impresión en pantalla de un archivo generado en el proceso anterior:

cat id_rsa.pub

Esta llave se puede ingresar tanto en el Sitio de Assembla que hayamos creado como en el Perfil de GitHub.
Assembla es un poco más complejo debido a las mayores opciones que permite. Por ejemplo el soporte para Git debemos agregarlo ya que no está activo por defecto y podemos elminar Subversion.

qct
qgit

Para el caso de GitHub realicé lo siguiente:

cd twitterrssmultifeed/
git init
touch README
git add README
git commit -m ‘first commit’
git remote add origin git@github.com:adagio/twitterrssmultifeed.git
git push origin master

Ese archivo README está vació pero ya se encuentra en el repositorio. Luego de copiar las fuentes de mi aplicación las agregué, hice commit y nuevamente push. Para el caso de Assembla no realicé el paso de crear un archivo README que no forma parte de mi aplicación sino de un ejemplo. Así que luego de copiar las fuentes en el directorio ejecuté los siguientes comandos.

git add .
git-commit -m “first commit”
git remote add origin git@git.assembla.com:twitterrssmultifeed.git
git push origin master:refs/heads/master

Debido al certificado RSA el password me es solicitado, esto se puede automatizar.

Para el caso de Mercurial realizar un proceso similar fue algo accidentado ya que no completaba la operación de commit. Lo más sencillo fue clonar el repositorio al directorio local:

cd mercurial_freehg/
clone http://freehg.org/u/adagio/twitterrssmultifeed/ twitterrssmultifeed/

Y Luego de copiar las fuentes emplear una aplicación que realice el commit ( hg status, hg add, hg commit ):

qct

Esta aplicación detecta de forma automática el sistema de control de versiones empleado. Seguramente lo hace buscando los ficheros .git o .hg, de forma similar para otros sistemas como subversion o cvs.

Finalmente el proceso de push lo realicé sin problemas.

hg push http://freehg.org/u/adagio/twitterrssmultifeed/

Vemos que Git y Hg el proceso de commit está separado del push. La teoría de estos sistemas debe justificar esta implementación y el uso de herramientas gráficas totalmente integradas al sistema operativo como Tortoise nos ocultan estos interesantes detalles que podrían ser muy útiles cuando deseamos conocer si ya hemos sobreescrito algún archivo entre otras aplicaciones bastante prácticas.

Pensaba probar el promocionado sistema Bazaar pero parece que los dos que he explicado son mejores. Es una interesante tarea para quien los use conocer sobre la comparación de fuentes, creación de forks, exportación de proyectos, candados, etc. Pero personalmente le doy el uso más sencillo de versionado personal.

Alrededor de estas tecnologías sitios como Assembla están brindando la posibilidad de realizar un seguimiento a reporte de bug, tener salas de chat, establecer hitos, seguir un proceso formal de desarrollo, entre otras herramientas que deben ser seleccionadas de acuerdo a la naturaleza del proyecto que se tenga.

Saludos.

Publicado en on Abril 26, 2008 at 12:56 am Comentarios (0)
Tags: , , , , , , , , ,

Google Aplication Engine (GoogleApp Engine)

Hoy probé un poco del poder del motor de aplicaciones de Google. Basta bajar el instalador, ejecutarlo y empezar a realizar algunas pruebas.

Creé un directorio de trabajo con el nombre librodevisitas donde copié el contenido de la aplicación de ejemplo guestbook.

Realicé algunas modificaciones al archivo app.yaml que es un archivo similar al manifest en java, es decir un archivo descriptivo que guía el despliegue de la aplicación. En este caso se requiere el nombre de la aplciación, la versión, el lenguaje intérprete y la versión de la interfaz para aplicaciones empleada. La línea más importante es la que indica el script a ejecutar que en este caso es un archivo de texto con código en lenguaje python (archivo *.py).

application: librodevisitas
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
script: librodevisitas.py

También modifiqué el archivo librodevisitas.py originalmente llamado guestbook.py y reemplacé algunas cadenas para mostrar una interfaz en lenguaje español además de agregar un un título de encabezado de página.

Para ejecutar la aplicación web procedemos a desplegarla con la aplicación dev_appserver.py ubicada en la raíz del directorio google_appengine en nuestro sistema de archivos.
Entonces ubicándonos en el directorio que contiene al de nuestro trabajo ejecutamos el servidor de aplicaciones indicando el puerto por el cual se publicará la aplicación y el nombre del directorio que contiene los archivos. Por ejemplo:

dev_appserver.py –port=9999 librodevisitas

En un navegador web podemos ver nuestra aplicación en la dirección http://localhot:9999

Además GoogleApp Engine ofrece alojamiento libre para las aplicaciones que desarrollamos con esta tecnología. Me he registrado y con el link de Create App podemos indicar un nombre para la aplicación (que formará parte del nombre de dominio) y el nombre clave de la aplicación (que debe coincidir con los datos del archivo *.yaml).

Una forma sencilla de subir las fuentes que tenemos localmente es crear un *.tar.gz (archivo consolidado y comprimido) con los archivos necesarios.1

Al subirlo el sistema se encargará de la descompresión de este archivo.

Luego mi aplicación ya estaba disponible en: http://appdrop.com/apps/librodevisitas/

Provecho. Espero tu firma.

Publicado en on Abril 25, 2008 at 6:01 pm Comentarios (0)
Tags: , ,

Arquitectura de Servidores de Aplicación Web

Hoy les voy a presentar la arquitectura de servidores de una aplicación web que estoy desarrollando.
El usuario se conecta a través de un navegador web (Firefox) a la Internet y accede al sitio web que publica el Servidor Web (Apache con el módulo PHP activo).
La gestión de casos emplea persistencia de datos en el Servidor de Base de Datos (MySql) y emplea tanto entradas como notificaciones a través del correo electrónico (Agente de Tranporte de Correo Sendmail). La interfaz para el usuario es generada dinámicamente gracias al lenguaje PHP.
Dentro del contenido web el usuario encontrará el Java Applet que le permitirá realizar la llamada gracias al protocolo IAX2, la implementación de este protocolo (IaxClient) se comunicará con el servidor VoIP (Asterisk) para realizar el registro del usuario y enviar el identificador de usuario al que se desea llamar. Los mensajes para remarcar un número o colgar también son recibidos por el servidor VoIP.
web application arquitecture

Publicado en on Abril 19, 2008 at 9:49 pm Comentarios (1)
Tags: , , , , , , ,

Ejecutar como (Run As)

Ejecución aplicaciones como otro usuario

En algunas ocasiones es necesario ejecutar aplicaciones con permisos administrivos o como si otro usuario lo estuviera haciendo. Así, por ejemplo, si estuvieramos realizando tareas administrativas también podríamos cargar el navegador web con los vínculos o marcadores de nuestra sesión de uso común. Esto lo realizamos con la opción Ejecutar como… del menu contextual sobre cualquier aplicación.

Automatización de la ejecución de aplicaciones como otro usuario

Si quisiéramos automatizar este tipo de ejecución podemos crear archivos de ejecución por lotes (*.bat) que invoquen a la aplicación RunAs. Ej: Para el caso de querer ejecutar el programa MSN Messenger como si fuéramos el usuario usuario2 se ingresaría la instrucción: runas /user:localhost\usuario2 “C:\Archivos de programa\MSN Messenger\msnmsgr.exe”. A continuación nos pediría la contraseña de dicho usuario.

Automatización del ingreso de la contraseña para la ejecución de aplicaciones como otro usuario

Podemos automatizar aún más este tipo de ejecución con una aplicación que envíe el password solicitado. SANUR es una aplicación que implementa el concepto de tuberías (pipes) para conseguir este fin. Para que no tengamos que emplear la ruta absoluta del programa SANUR agregamos dicha ruta a la variable de entrono PATH. El comando a ejecutar quedarías así: runas /user:localhost\usuario2 “C:\Archivos de programa\MSN Messenger\msnmsgr.exe” | SANUR clave2.

Fuentes:

RunAs
SANUR

Publicado en on Marzo 12, 2008 at 4:45 pm Comentarios (0)
Tags: , , ,

Tuneando el Windows XP

Para redactar este artículo requiero un editor de textos decente como es el Notepad++, lo instalaré desde dispositvo extraible. Al colocar la memoria USB en la laptop aparece un cuadro diálogo que me sugiere acciones a tomar. La acción a tomar será cerrar ese mensaje y evitar que vuelva a aparecer. ¿Cómo se hará eso? Google debe saber quién lo ha hecho. Entonces me voy a proteger con un buen antivirus y un firewall antes de sumergirme el internet. NOD32 (AVGFree era mi engreido hasta que me falló, utilizo un NOD32 Crackeado) y ZoneAlarm son las aplicacione de mi elección. El Firewall de Windows es totalmente inflexible, no brinda información detallada e internamente debe ser una coladera.

Preparándonos para navegar en internet

Instalación de Firewall (ZoneAlarm): Instalo ZoneAlarm y acepto la petición de reiniciar el equipo. Al ZoneAlarm le agrego mi red doméstica Firewall > Zones y Add >> Subnet
Zone: Trusted
IP Address: 192.168.1.0
Subnet Mask: 255.255.255.0
Description: CyberNet
Hacemos Click en Apply.

Instalación de Antivirus (NOD32): Instalo el NOD32, instalo el Crack, reinició la compu. También le presentamos el NOD32 al ZoneAlarm para que le permita realizar los updates.

Instalación de Navegador Web (Firefox): Istalamos Firefox. Le presentamos el Firefox al ZoneAlarm (Allow y Remember). Le decimos a Firefox que no verifique si es el navegador por defecto, ya que es el único. Mucho menos que importe vínculos desde Internet Explorer, ¿se acuerdan de ese programa? Borramos los vínculos que ya vienen definidos y establecemos la página en blanco (about:blank) como página por defecto (Home). Tools > Options > Main y en Home Page colocamos about:blank. Además que siempre pregunte donde guarda las descargas.

Desinstalación de software que no utilizaremos

Inicio > Panel de Control > Agregar o quitar Programas > Agregar o Quitar componentes de Windows y le quitamos el check a:
- Internet Explorer
- MSN Explorer
- Outlook Express
- Reproductor de Windows Media
- Windows Messenger
- Accesorios y utilidades > Juegos
¿No nos sentimos mucho más limpios?

Ajuste de Windows XP para rendimiento óptimo

Instalación de drivers de la tarjeta de aceleración gráfica: Vamos a acelerar el windows. Primero al redactar este documento he estado en una interfaz gráfica lenta debido a que no instalado el driver de la tarjeta aceleradora de gráficos. Procedemos a instalar este driver, es importante porque delegamos las tareas de procesamiento gráfico a esa tarjeta y el procesador se libera de dicha carga. Reiniciamos.

Desactivación del Restaurador de sistema: Ante tantas instalaciones y modificacioes podríamos estar dañando nuestro equipo, por eso Microsoft nos brinda la herramienta de Restauración de Sistema. Y cuando la utilizamos siempre nos ha ayudado, verdad? La verdad que no sirve para nada, nunca recupera nada y además consume recursos de forma constante, tanto de memoria con su monitoreo como de espacio en disco con sus registros. Click derecho sobre Mi PC y click sobre Propiedades. Bajo la pestaña de Restaurar Sistema hacemos click en Desactivar Restaurar sistema en todas las unidades. Click en Aplicar.

Establecimiento de las preferencias para Óptimo Rendimimiento: Bajo la pesataña de Opciones avanzadas en el panel de Rendimiento hacemos click en el botón de Configuración y seleccionamos Ajustar para obtener el mejor rendimiento.

Desactivación de sonidos: Inicio > Panel de Control > Dispositivos de sonido y audio. Guardamos la configuración original. Y seleccionamos la configuración sin sonidos. Recordemos que los sonidos se producen al ejecutar un archivo de sonido. La búsqueda del archivo y su reproducción comprometen el tiempo más lento en una computadora ya que se trata de un acceso a disco duro (elemento mecánico).

Para mayor comodidad

Desactivación de ejecución automática (USB y CD-ROM): Ya en el Firefox, googleamos en blanco y establecemos una búsqueda sin filtros en las preferencias y el google in english. Googleamos: “disable autorun usb”. Uno de los links nos dice que hagamos Inicio > Ejecutar : “gpedit.msc”. Configuración del equipo > Plantillas administrativas > Sistema y en el panel derecho le damos a Desactivar reproducción automática. La dejamos Habilitada y para Todos los equipos (cdrom y usb).

Desactivación del asistente de limpieza de escritorio: Click derecho sobre el escritorio y click en la pestaña de Escritorio. Click en Personalizar escritorio. Le damos check a Mis documentos, Mi PC, Mis sitios de red. Le quitamos el check a Ejecutar Asistente para limpieza de escritorio cada 60 días. Y aprovechamos para colocar un papel tapiz de nuestra preferencia.

Desactivación de alertas y actualizaciones autommáticas: Click en el escudo del tray. Abrir Centro de seguridad. Hacemos click en Cambiar la forma en que el Centro de seguridad me alerta y desactivamos las tres casillas. Click en Actualizaciones automáticas y seleccionamos Desactivar Actualizaciones automáticas. El Firewall de Windows ya se desactivo al detectar un mejor firewall como es el ZoneAlarm.

Estableciendo la forma de logueo: sería no mostrar los nombres de los usuarios en la pantalla de logueo. Inicio > Panel de Control > Cuentas de usuario. Cambiar la forma en la que los usuarios inician y cierran su sesión. Le quitamos el check a Usar la pantalla de Bienvenida, con esta opción conseguimos también que la combinación de teclas Ctrl+Alt+Supr invoquen a un tablero de opciones muy útiles donde encontramos desde el control de procesos hasta el bloqueo de la sesión. Es aconsejable establecer una contraseña para su usuario administrador, activar la cuenta de invitado, crear una cuenta de usuario limitado con contraseña.

Mejorando el manejo de archivos comprimidos: Para los archivos comprimidos (*.zip, *.z, *.rar, etc) empleemos 7Zip en lugar del manejador integrado a Windows que es curiosamente lento. WinZip se ha venido haciendo más complejo y ha hecho que de ese amor que teníamos algunos por esa aplicación sólo quede la costumbre por los formatos de compresión. WinRar suele ser una alternativa imprescindible para el manejo de arhivos rar cortados. Ya que maneja los archivos temporales con mejor eficiencia que el 7zip. Al parecer es un manejo particular del formato rar.

Mejorando el Menú Inicio

Click en Propiedades del menu contextual sobre el botón Inicio

Establecer accesos directos a Navegador Web y Cliente de Correo Electrónico: Bajo la pestaña de Menú Inicio hacemos click en el botón Personalizar. Para Internet seleccionamos Firefox. Para Correo electrónico podrías instalar Thunderbird y seleccionarlo de forma similar.

No mostrar documentos recientes: Click en la pestaña de Opciones avanzadas. Deseleccionamos Mostrar los documentos abiertos recientemente además de aprovechar en borrar la lista.

Esconder elementos del menú inicio poco útiles: Retiramos de los Elementos del menú inicio:
- Ayuda y soporte técnico
- Buscar
- Mi música > No mostrar este elemento
- Mis documentos > No mostrar este elemento
- Mis imágenes > no mostrar este elemento

Publicado en on Marzo 11, 2008 at 6:24 pm Comentarios (0)
Tags: , ,