Archivo de la categoría: Informática

Un cajón de sastre donde comento temas relacionados con el mundo de la informática

Google Open Pizza Night II (impresiones)

Bueno, pues una vez concluido el evento ya puedo escribir sobre el, aunque lo haré resumido y con fotos y videos.

En general ha sido un evento interesante, divertido y hasta en mi caso productivo.

Se ha realizado en lo que sería el comedor de la sede de google en españa, sita en la planta 26 del edificio torre picaso:

cimgp0507.jpg

Las vistas son impresionantes:

cimgp0506.jpg

Y aunque he llegado media hora tarde, en realidad estaban empezando con una charla sobre programación de la API de youtube.

La charla ha sido amena, y mucho más distendida que en el Google developer day, donde en las ponencias había mucha más gente y muchos nos perdíamos sobre lo que había que hacer. Aquí nos lo han explicado paso por paso y si nos perdiamos venía gente de google a ayudarnos.

Como había tanta gente (seríamos unos 50 + o -), al final me tuve que sentar en los sillones-puf que tenían por ahí, y aunque cómodos, para levantarse o bien cogías carrerilla con los michelines o bien te apollabas en el suelo, por supuesto dejando el portatil donde buenamente pudieses.La red wifi no andaba muy fina, y eso me recordaba a los problemas que tuvieron también por el mismo tema en el Google developer day. Aún así pudimos seguir las explicaciones para probar las APIs.

Luego vino el descanso, y tomamos la ansiada pizza que daba nombre al evento, acompañada de unas cervercitas, refrescos, golosinas, etc:

cimgp0505.jpg

Pizza, cerveza y código:

cimgp0509.jpg

Las golosinas. Google es una de las pocas empresas que ofrece todo gratis a sus empleados:

cimgp0508.jpg

Charlar, picar código, navegar por internet… en el descanso cualquier cosa era factible:

Luego comenzaron los proyectos individuales que habían creado algunos asistentes usando en parte las apis de google maps y youtube, entre otras. La verdad es que alguno era muy interesante y muchos ya estaban funcionando. Tenían 10 minutos de exposición y otros 3 de preguntas cada uno.Luego hubo reparto de premios, en el cual yo gané una power ball debido a que había hecho un ejercicio que nos habían propuesto: Mostrar subtitulos o mensajes en base al tiempo de reproducción de un video usando la api de youtube. En mi caso, algo cutre, pero funcional 🙂

La verdad es que Google es diferente y se nota en estos aspectos. No es que Google esté de moda y por eso nos guste a la mayoría, es que Google nos ofrece servicios que todos podemos usar y realmente se interesa de que podamos sacarlos provecho y lleguen a todo el mundo (ya sea a programadores para implementar sus aplicaciones o al público en general que las maneja).

Esperemos que sigan en esa línea y pronto tengamos otro evento.

Google Open Pizza Night

Recientemente he sido invitado al Google Open Pizza Night. Un evento que se desarrollará en las oficinas de Google en Madrid (Torre Picasso Planta 26) el 27 de Marzo desde las 17:30. Dejo una mini FAQ que venía adjunta a la invitación:

* ¿Qué es el Open Pizza Night?
Es un evento bastante informal en el que programadores que conocen o trabajan con nuestras APIs y programadores de Google se juntan para comentar proyectos, ideas, sugerencias, etc. Es como lo que sucede en los intermedios de una conferencia, entre sesión y sesión, pero sin las sesiones.

* ¿Quién puede participar?
Cualquier programador que quiera conocer las APIs de Google o ya haya trabajado con ellas, que quiera pasar un rato con otros programadores en las oficinas de Google y no tenga nada mejor que hacer esa noche.

* ¿Qué más habrá en el Open Pizza Night?
Otras personas interesantes con las que programar. Alguna minipresentación. Un lugar donde pasar un buen rato. Wifi. Mucha pizza.

* ¿Y qué pasará?
A las 17:30 empezarán a llegar los participantes. Después de tomar algo juntos y conocernos, empezará la actividad. Os presentaremos el tema de la noche, y después empezará el código. Para recuperar fuerzas tomaremos unas pizzas, y después, si queréis presentar alguna aplicación relevante al tema, podéis comentárnoslo en vuestro email de confirmación, y os apuntamos en la lista. Seguro que alguno se anima.

* ¿Qué tengo que llevar?
La verdad, lo único que tienes que hacer es venir tú mismo. Y si tienes un ordenador para programar, también tráetelo.

* ¿Por qué es por la tarde / noche?
Lo hemos puesto tarde para que pueda venir mucha gente que, de otra forma, por estudios o trabajo, no podría participar.

La verdad es que puede ser una experiencia muy interesante. Desde que hice Hora y Lugar, me han atraido las APIs de Google. Estúve presente en el Google Developer Day 2007. Comencé con Android, pero no lo veía muy fino. Ahora con las APIs de Youtube tengo que pensar que podría hacer. En todo caso los servicios de google son una fuente de recursos muy útiles para el programador que desea hacer un proyecto web 2.0. A ver como se presenta el día, intentaré tomar fotos.

¿Cómo evitar el efecto slashdot (barrapunto, meneame, etc.)?

El efecto slahsdot es algo que puede tirar los servidores abajo. Su nombre proviene del proveedor de noticias slashdot.

Todo empieza cuando alguien escribe algo interesante en una web. Al principio sólo los lectores habituales lo conocerán y más tarde los motores de búsqueda lo indexarán, pero esto no provoca ninguna caida del servidor.

La verdadera caida es cuando literalmente miles o cientos de miles de personas acceden a esa página en un corto lapso de tiempo. Esto es provocado cuando un tercero publica un enlace a la página mencionada en un proveedor de noticias como slahsdot, barrapunto, meneame, etc. Entonces en las primeras horas que aperece publicado el enlace, ingentes cantidades de usuarios acceden a la página para poder ver en detalle lo que está publicado en esta.

Ya se trate de un servidor mal configurado, o de un servidor con pocos recursos, o de un servidor cuyo ancho de banda contratado sobrepasa el límite contratado, el caso es que antes o después puede dejar de dar servicio ante la avalancha de peticiones, provocando el malestar de los usuarios que en ese momento quieren acceder al contenido de la página.

Para ello se creó en 2004 un servicio gratuito llamado CoralCDN. Este servicio esta basado en una red distribuida p2p, en la cual se cachea el contenido de las páginas en multiples servidores de PlanetLab. Así si todo el mundo accede a la página a través de este servicio, tiene garantizado que podrá verla, ya que no accederá a la original, sino a la cacheada repartida entre varios servidores.

Cachear una página y acceder a esa caché es tan sencillo como añadir el sufijo nyud.net al dominio de la URL que queremos acceder. Así por ejemplo para acceder a este artículo a través de la versión cacheada, habría que acceder a través de https://www.sistemasorp.es.nyud.net/2008/02/03/¿como-evitar-el-efecto-slashdot-barrapunto-meneame-etc/.

No se trata de un proxy web, ya que no parsea la página modificando los enlaces para acceder a sus versiones cacheadas, sino que está orientado a cachear una página en concreto.

Para evitarse el trabajo de tener que añadir el sufijo al dominio de la url, existen diversas soluciones para automatizar el acceso. Desde los plugins oficiales de CoralCDN hasta extensiones firefox y otras soluciones explicadas aquí.

Sun Solaris 10 en mi casa

Después de tres semanas de haber rellenado el formulario para que me enviasen los dvd del sistema operativo Solaris 10 (uno para SPARC y otro para 32 y 64 bits) y las herramientas de desarrollo Sun Studio 11, finalmente ha llegado:


Me gusta mucho linux, pero tener un unix en mis manos (y próximamente en mi ordenador) es un placer de informático 🙂

Compilando programas para la fonera

Hace poco leí un artículo en barrapunto donde descubrí (un poco tarde, ya lo sé) que la fonera tenía ssh (y por ende linux embebido).

El caso es que viendo páginas como la de radikalq3 me animé a solicitar a FON su preciado router wireless (cuando aún estaba de oferta a 5 ?) para hacer «pruebas y experimentos» y de paso unirme a la comunidad FON.

La recibí ayer, y por supuesto habilité el ssh mediante hardware (cables, condensadores, MAX232 y el puerto serie). Por cierto, una vez listado todo el proceso de arranque el usuario debe pulsar INTRO para activar la consola. Una vez abierto el puerto 22 monté de nuevo la fonera y me conecté por ssh. La primera vez que entras debes entrar como root y con password admin. Posteriormente cambié la clave de root desde la web de FON en Configura tu Router Social FON/Contraseña del Router

A continuación me bajé los fuentes de la fonera http://download.fon.com/firmware/fonera/latest/fonera.tar.bz2 (unos noventa megas), los guardé en mi carpeta personal de mi servidor con mandriva 2006, los descomprimí con tar xvjf fonera.tar.bz2, ejecuté make menuconfig sin modificar nada, grabé y posteriormente tecleé make. La primera vez no me compiló, por lo que tuve que instalar varios paquetes: urpmi flex, urpmi bison y urpmi byacc.

Una vez compilados los fuentes ya solo me quedaba saber como poder compilar un programa y subirlo a la fonera. La compilación se explica en la web de OpenWRT:
http://downloads.openwrt.org/docs/buildroot-documentation.html#using_toolchain. Así que me puse manos a la obra e hice este programa llamado prueba.c el cual simplemente abre le fichero /etc/passwd y muestra su contenido (en vez de hacer el típico hola mundo):

Lo compilé con mips-linux-uclibc-gcc -o prueba prueba.c y se creó un ejecutable sin problemas. A continuación lo moví a /var/www/html para que estuviese disponible a través del servidor web apache y desde la fonera lo recuperé con wget http://192.168.0.11/prueba (notese que la ip del servidor será distinta en vuestro caso), le cambié los permisos para que se pudiera ejecutar chmod 755 prueba y finalmente lo probé funcionado perfectamente.

Espero que esto os anime a crear vuestros propios programas. Este ejecutable me ocupó unos 7 KBytes y aún tengo 7 megas de espacio libre en la fonera para añadirle nuevas cosas 🙂

Actualización 08/02/2007:

Dani, un lector del blog me comentó que la fonera solo tiene 4 megas libres de espacio de almacenamiento permanente (y no 7 megas como había escrito en el artículo). Después de hacer dos experimentos que podéis leer en los comentarios de este blog la capacidad real de la fonera con el firmware de FON es de 5 MB. Gracias Dani por forzarme a experimentar 😉

Recuperar los títulos de las canciones de un CD con FREEDB

Desde hace mucho tiempo estan disponibles dos servicios en Internet cuyo cometido es almacenar una gigantesca base de datos con los títulos de las canciones de cualquier CD de música que se haya editado. La primera es Gracenote (también conocida antes del 2000 por cddb), de la cual no hablaremos en este artículo por requerir licencia. La segunda es freedb la cual sigue siendo gratuita y con una simple página web podemos consultar la información que nos interesa. En la sección developers podreis encontrar la información necesaria para trabajar con esta tecnología.

Básicamente consiste en obtener una identificación única a partir de la información de la tabla de contenidos de un CD (TOC). Una vez obtenida la identificación, solo hay que hacer una petición web al servidor de freedb con la misma para que nos devuelva el título del CD y la lista de títulos de canciones y sus respectivos autores de las distintas pistas que conforman el CD.

El algoritmo para hallar el identificador único consiste en:
-Sumar los números en segundos de lo que dura cada pista. Es decir, si una cancion dura 4:17, entónces son 257 segundos, luego la suma es 2+5+7=14.
-Una vez obtenido el sumatorio de todas las pistas con el anterior algoritmo, se le saca el módulo de 255 y a continuación se le multiplica por 16777216 (2^24); a este resultado se le suma el tiempo total del CD multiplicado por 256 (2^8) y finalmente a este resultado se le suma el número total de pistas que contiene el CD.

Una vez hallado el identificador único, se transforma a un número hexadecimal y se hace una peticion a freedb de la siguiente manera:

http://freedb.freedb.org/~cddb/cddb.cgi?cmd=cddb+read+misc+<ID UNICO>&hello=name+host.com+appname+1.0&proto=1

cddb read misc <ID UNICO> del parámetro cmd es el comando que indica que estamos haciendo una petición a la base de datos con el ID UNICO. Por ejemplo cddb read misc c510910d.

name host.com appname 1.0 del parámetro hello indica que persona, dominio, aplicación y versión de la misma esta solicitando la información. Por ejemplo: sistemasorp sistemasorp.blogspot.com testeoCDDB 1.0.

Y finalmente el 1 del parámetro proto indica que versión del protocolo queremos usar para hacer la petición a la base de datos, devolviendonos acorde a la versión una información formateada.

Así por ejemplo si lanzamos esta petición:

http://freedb.freedb.org/~cddb/cddb.cgi?cmd=cddb+read+misc+c510910d&hello=sistemasorp+sistemasorp.blogspot.com+testeoCDDB+1.0&proto=1

Nos devuelve lo siguiente (terminado en una linea con un punto, al estilo del SMTP):

210 misc c510910d CD database entry follows (until terminating `.’)
# xmcd CD database file
#
# Track frame offsets:
# 150
# 24460
# 45650
# 71127
# 98425
# 118997
# 146585
# 164707
# 188897
# 216340
# 240932
# 271642
# 297722
#
# Disc length: 4243 seconds
#
# Revision: 2
# Processed by: cddbd v1.5PL3 Copyright (c) Steve Scherf et al.
# Submitted via: CDex 1.40Beta9
#
DISCID=c510910d
DTITLE=Various / Rave Massacre [Disk 1]
TTITLE0=Raving Bastards – Love Time
TTITLE1=Chill’n Force – Move Raver (Kemo Mix)
TTITLE2=M.A.F. X-Perience – Dreamland
TTITLE3=Society for Psychical Research – Silversky
TTITLE4=Obsessiv – Tune In, Tune On, Drop Out
TTITLE5=Nettuno – I Cry
TTITLE6=Razor – Is It Love
TTITLE7=Sunbeam – Outside World
TTITLE8=Raver’s Nature – Tricky Symphony
TTITLE9=NIP Collective – I’m About
TTITLE10=RBM – Banyo Love
TTITLE11=Paranoia X – Party Program
TTITLE12=NR-Gizer – Raving Generation
EXTD= YEAR: 1994 ID3G: 31
EXTT0=
EXTT1=
EXTT2=
EXTT3=
EXTT4=
EXTT5=
EXTT6=
EXTT7=
EXTT8=
EXTT9=
EXTT10=
EXTT11=
EXTT12=
PLAYORDER=
.

Donde entre comentarios (con la almohadilla delante) da información sobre el disco, copyright y demás; continuando con una lista de parejas nombre/valor que contienen la información que queremos:

DISCID: El mismo identificador de disco que le hemos pasado
DTITLE: El autor y título del CD
TTITLEX: El título de canción que está en la pista X
EXTD: Información extendida sobre el disco
EXTTX: Información extendida sobre la canción que está en la pista X
PLAYORDER: El orden en el que se deberían reproducir las pistas
YEAR: El año de edición del disco
ID3G: La categoría o clase de música que contiene el CD

A continuación expongo dos codigos fuentes (el primero para windows y el segundo para linux) que muestran como recoger el identificador único de un cd y a continuación solicitar la información de ese cd a freedb. Ambos se ejecutan en la consola de texto pasandoles como parámetro la unidad o dispositivo de cd.

WINDOWS(ejecutable y fuentes)

LINUX(ejecutable y fuentes)

Detección de movimiento con una webcam

En este proyecto mi intención no es otra que hacer un sistema de detección de movimiento (que no de reconocimiento de objetos).

Detectar movimiento no es una cosa sencilla como pueda parecer a priori, ya que la imágen que pueda dar una camara (en este caso un webcam) no es de una calidad suficiente como para que dos imágenes tomadas en distintos momentos puedan considerarse iguales. Esto es debido a que las cámaras suelen introducir ruido en las imágenes que captan, o dicho de otra forma, un pixel de una posición determinada de la imágen nº1 no suele coincidir casi nunca (por no decir nunca) con un pixel de la misma posición de la imágen nº2 (aún siendo estas tomadas con una diferencia de milisegundos). Es por ello que hay que pensar que nivel de tolerancia hay que permitir para que aunque las imágenes no sean iguales exactamente, la información que contienen si sea similar en gran medida; sin detrimentro por supuesto de que si hay algún movimiento de un objeto o de un ser vivo sea tomado como informaciones distintas y provoque un evento o acción.

Existen varias formas de trabajar con esta tolerancia: algoritmos de detección de bordes (gradientes, derivadas gausianas, transformada de Hough, etc), filtrados descriptores de Fourier, clasificador Bayesiano, etc), etc. Todos ellos sirven, pero no son iguales de rápidos. Es por ello que me decanté por el metodo estadístico de hacer medias de pixeles con los de su alrededor, un metodo sencillo para fijar una tolerancia en escaso tiempo (aunque quizá con un poco de penalización en cuanto a acierto en detección).

El método consiste en tomar cada pixel de la imágen nº1 y sumar su valor con los 8 pixeles que le rodean (una matriz de 3×3) y luego dividir el resultado por 9, por lo que nos da un valor medio. El mismo proceso lo hacemos con los mismo pixeles pero de la segunda imágen, y así obtenemos otro valor medio. Al compararlos podemos detectar cuanto % de diferencia hay entre uno y otro, momento por el cual, gracias a que hemos configurado que nivel de sensibilidad en la diferencia, o se admite como que no es un valor a tomar en cuenta, o sin embargo el valor es distinto y por lo tanto se toma en cuenta. Si se sobrepasa una cantidad determinada de pixeles que se toman en cuenta (sensibilidad por puntos), entónces es que las imágenes no son completamente iguales en cuanto a información y se supone que se ha producido un movimiento (cambio de posicion de entidades en la imágen o aparación de otras nuevas). La idea es que se tome una imágen de referencia (una del entorno estático), y se comparen las restantes con ella, para poder así saber con respecto al origen si ha habido algún cambio. Más tarde se toma otra imagen de referencia eliminando así los problemas que pudieran causar otros agentes (como un cambio atenuado de luz por el sol).

Media de pixeles

Siguiendo esta idea, he desarrollado una aplicación en visual c++ 6.0 llamada DETECTOR donde he aplicado los conceptos anteriormente citados. Podeis descargar el ejecutable y/o su código fuente en esta dirección (esta bajo licencia creative commons): https://www.sistemasorp.es/detemovi