Archive for the 'Informatica' Category

Haizea

Hoy he llegado a un punto relativamente importante en mi investigación, ya que el trabajo que he estado haciendo recientemente ha alcanzado por fin suficiente masa crítica como para publicarlo no sólo en forma de artículo sino también en forma de proyecto de software. Hoy he lanzado públicamente el proyecto Haizea:

¿Qué es Haizea? Bueno, la respuesta a esa pregunta se encuentra en la web, pero intentaré resumir y dar poco el tostón (aunque voy a tener que asumir un mínimo de conocimiento informático). Suponed que tenéis un cluster de ordenadores, y que queréis compartir ese cluster entre varios usuarios. Evidentemente, cada usuario tendrá necesidades distintas: algunos querrán ejecutar programas en modo batch y otros querrán control exclusivo de parte o la totalidad del cluster durante un tiempo (p.ej., imaginad un profesor que quiere impartir un laboratorio de programación paralela de 14:00 a 16:00 todos los miércoles). Y cada usuario, claro, quiere un entorno software distinto. Hay soluciones que abordan partes de este problema y suelen estar muy especializados para un caso de uso concreto. Por ejemplo, los gestores de jobs son muy buenos para ejecución batch desatendida, pero suelen ser nefastamente malos para reservas en tiempos concretos (y de darte exactamente el entorno software que quieres, ni hablar). Por contra, sistemas como Amazon EC2 son excelentes para conseguir exactamente el entorno software que quieres, pero hay que pedirlo en el instante en el que se quiere. Similarmente, VMWare y compañía ofrecen gestores de infraestructura virtual pero principalmente orientados a servidores con alta disponibilidad.

Pues bien, Haizea (y buena parte de la investigación que realizo) tiene como objetivo proporcionar una solución general al problema del aprovisionamiento de recursos. El software que he desarrollado, utilizado en combinación con OpenNebula (un gestor open source de infraestructura virtual desarrollado por el grupo de Arquitectura de Sistemas Distribuidos de la Universidad Complutense de Madrid), permite gestionar un cluster Xen o KVM (y pronto también clusters VMWare) y desplegar máquinas virtuales dinámicamente en el cluster satisfaciendo varios casos de uso simultáneamente y eficientemente. Lo mismo puedes pedir “quiero una máquina con 2 CPUs y la quiero ahora“, o “dame 10 máquinas, cuando puedas, pero que se ejecuten durante 2 horas”, o “dame 20 máquinas mañana de 14:00 a 16:00″. Por cierto, “eficientemente” es la palabra clave aquí. Una de las razones por las que las soluciones existentes se centran en un caso de uso concreto es porque no suele ser posible combinar varios eficientemente. Ojo que la versión actual es todavía un “technology preview”, así que todavía le falta bastante funcionalidad, pero el proyecto irá creciendo bastante en los próximos meses.

Por supuesto, detrás de todo esto hay unos rollos macabeos tremendos de investigación. Al que se sienta aventurero, le animo a que se lea el artículo donde presenté las ideas principales de Haizea: Combining Batch Execution and Leasing Using Virtual Machines. Aunque no lo parezca, el contexto de esta investigación sigue siendo la computación grid, donde el aprovisionamiento eficiente de recursos es un problema. Más recientemente, Haizea también podría enmarcarse como una contribución dentro de la “computación cloud“, donde los recursos tipicamente se gestionan con tecnologías de virtualización (a los que estamos en el mundo de la grid, el término “cloud” nos resulta un poco marketing-iano porque toma muchas ideas de la grid, únicamente añadiendo el uso de máquinas virtuales). En fin, si alguien no ve claro algo de lo que digo aquí o en la web de Haizea, o qué utilidad tiene esto, o cuanto son 400 dracmas, que lo diga en los comentarios y yo respondo ipso facto.

Por cierto, no lo he dicho explícitamente, pero Haizea es, evidentemente, open source. Ya iba siendo hora de que, después de tanto predicar a favor del software libre y el código abierto, hiciese mi propia contribución. Y, sinceramente, lo que más me anima de este proyecto es saber que estoy devolviendo algo a la comunidad a través de un proceso abierto y colaborativo.

P.D.- Como ya saben los lectores euskaldunes, “Haizea” significa “viento” (vale, vale, más correctamente “el viento”). Inicialmente escogí ese nombre (hace ya casi un año) simplemente porque quería que mi sistema tuviese un nombre en euskera que sonase bien tanto en inglés como en castellano y me dio por “haizea”. Eso si, durante el último año han estado saliendo todo tipo de juegos de palabras en relación a la “computación cloud”. No se paran de ver artículos tipo “Are clouds a nebulous concept?”, “Will clouds go up in smoke?”, “Cloud Computing: Eyes on the skies”, etc, etc. Así que “haizea” resultó ser, sin querer, otro juego de palabras más… porque las nubes no se mueven sin un poco de viento… (eeeeeeh, eeeeeeh, ¿lo pillas? ¡viento! ¡nubes! si es que soy un caso perdido… xD )

P.P.D.- En la web doy los agradecimientos de rigor, pero la verdad es que tengo agradecer especialmente el apoyo del Grupo de Arquitectura de Sistemas Distribuidos de la Universidad Complutense de Madrid, con el que estoy trabajando este verano. Si no llega a ser por ellos, que me ofrecieron la oportunidad de desarrollar una versión más estable de Haizea para utilizar en combinación con OpenNebula, no creo que Haizea hubiese llegado a ver la luz del día (o, al menos, habría tardado bastante más). Y tampoco hay que olvidad, claro, que me han traido a España durante todo el verano ;-)

Post invitado en el blog de Google Code

Como mencioné en un post anterior, hace un par de semanas el ACM Student Chapter de la Universidad de Chicago organizó una visita a las oficinas de Google en Chicago. Como co-organizador de la visita, y mentor de Google Summer of Code, la gente de Google me pidió que escribiese una crónica de la visita para el blog de Google Code (más concretamente, el que versa sobre temas open source). El susodicho post invitado ha sido publicado hoy: The University of Chicago Meets Google.

Visitando Google

Me parece que nunca lo he mencionado en el blog, pero desde hace unos meses soy el secretario del ACM Student Chapter de la Universidad de Chicago (secretario en el sentido ejecutivo, no en el sentido “¡Sónsoles, traigame un café!”). La razón por la que me involucré con la asociación de estudiantes fue por la misma razón por la que me involucré con el e-GHOST cuando estaba en Deusto: para ayudar a organizar eventos interesantes, formativos, y libres que beneficiasen a toda la comunidad universitaria (aunque especialmente a la comunidad estudiantil). De hecho, una de las cosas que me “decepcionó” de la Universidad de Chicago (y lo digo entre comillas, porque aquí en Chicago me han pasado tantas cosas buenas que las decepciones sólo vienen en dosis pequeñas) era que no había ningún equivalente al e-GHOST. Ningún grupo de hackers, geeks, frikis, y/o hacktivistas con ganas de liarla (en el buen sentido de la palabra). Sin embargo, hace un año, un grupo de estudiantes se animó a resucitar el “student chapter” de la ACM (que llevaba unos años latentes), y yo me ofrecí voluntario para encargarme de los temas administrativos (algo que, al parecer, se me da bien; seguro que hay más de un fantasmiko que recuerda las batallas épicas que tuve con la Deustocracia, o todas las movidas que tuvimos durante la primera visita de Stallman a Bilbao xD ).

Desde que se resucitó el grupo, bajo el liderazgo de Cord Melton y Karl Norby (estudiantes de pregrado en ciencias de la computación), hemos estado organizando todo tipo de eventos, como participar en el concurso de programación ICPC, montar LAN-parties cada 2-3 semanas, y un “evento grande” cada trimestre. Este año, nuestros “eventos grandes” fueron un panel sobre inteligencia artificial (en el otoño) y mi charla de introducción a la Computación Grid (en el invierno). Cuando llegó el trimestre de primavera, se nos ocurrió que en lugar de hacer un evento tipo charla/panel/mesa redonda/etc., igual podríamos organizar una “excursión” fuera de la universidad (¡chupiguay! ¡cómo en la escuela!). Alguien (sólo recuerdo que no fui yo) lanzó la idea de proponer a Google una visita a sus oficinas de Chicago (sí, tienen una oficina en Chicago llena de ingenieros).

Como secretario, me tocó mover hilos y, tras contactar con unas cuantas personas, los Google-eros Chicaguenses acordaron recibirnos un día en sus oficinas. Eso sí, que nadie piense que esto fue el fruto de hábiles y arduas negociaciones. Google suele venderse como una compañía de buen rollo, y tengo que admitir que no es una cortina de humo para quedar bien. La gente de Google con la que contacté estuvo inicialmente entusiasmada por la idea de recibir a varias docenas de estudiantes de pregrado y postgrado en sus oficinas. Me parece que en el segundo o tercer e-mail que me mandaron ya dijeron “Por nuestra parte, esto ya está en nuestra agenda”, comprometiéndose a organizar la visita. A ver, entiendo que para ellos es una manera de “impresionar” a estudiantes que pueden acabar trabajando para ellos (que ya se que en todas las casas se cuecen habas), pero organizar una visita también es un curro considerable y ellos se encargaron de prácticamente todo, mostrando siempre entusiasmo y buen rollo. A saber, nos organizaron una visita con:

  • Comida gratis a mansalva
  • Una sesión de “charlas relámpago” en la que hablaron ingenieros de Google y estudiantes de la universidad admitidos a Google Summer of Code
  • La oportunidad después de la charla de hablar con los ingenieros tranquilamente (fuera de un turno de preguntas) mientras nos zampábamos la comida
  • Todo tipo de mercancía Google incluyendo, no es coña, barra de labios “cacao” marca Google.

Al final acabamos yendo el pasado jueves unas 30 personas de la universidad, y fue una visita memorable. Las charlas fueron muy interesantes, conocimos a gente fascinante, y pudimos ver el interior de una oficina de Google (que es tan colorida e informal como las pintan). Karl tiene un relato más completo en su blog, y en mi galería podéis ver unas cuantas fotos.

Publicar ejercicios de SQL online

Como dije en el post anterior, este trimestre me toca dar clases de bases de datos, y quiero desempolvar una vieja colección de ejercicios de SQL que escribí en 2002 para un curso, actualizarlos, y compartirlos. El documento original, por cierto, está disponible en SuperAlumnos.net desde hace casi dos años bajo una licencia Creative Commons. Si mal no recuerdo, solía tener el PDF colgado en mi web antigua (la precursora de BorjaNet-con-blog), y alguien me preguntó si me importaba relicenciarlo con Creative Commons para colgarlo en SuperAlumnos (ya que el documento no tenía ninguna licencia explicita) y yo dije que por supuesto. Ahora que lo miro, resulta que el PDF ha sido descargado 3617 veces. Mola.

Pero bueno, a lo que iba, que quiero pegarle un repaso al documento y publicarlo con una licencia libre y de tal manera que sea fácilmente editable por todo el mundo. A bote pronto, me parece que el lugar ideal sería Wikibooks. Sin embargo, como sé que me leen varios dospuntoceristas –*cof* *cof* *Loretahur* *cof* *Joseba* *cof* *cof*– pues me interesa saber si hay sitios más orientados a la educación (¿e-Learning 2.0?) donde tenga más sentido contribuir un documento como este.

Para los curiosos, y para los que les pueda interesar contar con una colección de ejercicios de SQL, esto es lo que tengo planeado producir:

  • Como mínimo, los mismos ejercicios que hay en el documento actual. 9 bases de datos (cada una con 2-4 tablas) y un total de 102 ejercicios entre todas las bases de datos. Todos los ejercicios incluyen una solución.
  • El documento estará escrito en inglés, aunque debería ser fácilmente inteligible con un mínimo de inglés (la mayoría de los ejercicios son del tipo “Encuentrame todos los clientes que…”)
  • SQL estandar para crear las bases de datos en cualquier Sistema de Gestión de Base de Datos (SGBD) decentillo, como MySQL
  • Datos de ejemplo para todas las bases de datos.
  • Una base de datos SQLite con todas las tablas y datos para poder trastear facilmente con los ejercicios.
  • Idealmente, producir además una versión PDF “bonita” con LaTeX en dos versiones: sin soluciones y con soluciones. El documento actual ya está escrito en LaTeX, con lo cual ya tengo una plantilla en la que basarme. Sin embargo, si tiro por algo como Wikibooks, me preocupa que resulte complicado producir una versión LaTeX automagicamente cada vez que cambio algo.

En fin, ya iré contando como progresa el documento.

Este trimestre: enseñando bases de datos

Tras dos trimestres de investigación pura y dura que culminaron en la publicación que ya he mencionado anteriormente, este trimestre me toca volver a la docencia. ¡Albriquias! ¡Alegrata! ¡Me late el cardiotripa! En concreto, voy a ser asistente de docencia en CMSC 23500, una asignatura de introducción a las Bases de Datos. Voy a ser el responsable de organizar e impartir las prácticas de la asignatura, lo que incluye ejercicios a pie de máquina pero también sesiones de discusión en los que resolvemos ejercicios más “teóricos” (p.ej., diseño de una base de datos).

Aunque las bases de datos no tienen mucho que ver con mi área de investigación, siempre ha sido una mis materias favoritas de la informática (tanto la parte de diseño como la parte de programación). De hecho, cuando estudiaba ingeniería en ESIDE fui “becario web” desde 1999 hasta 2003, y al final mis responsabilidades acabaron tirando más hacia el diseño y administración de las bases de datos de las que dependían las aplicaciones web de ESIDE (y luego de toda la universidad). Ahora que me doy cuenta, tengo mil historias de esa época y algún día debería sentarme a ponerlas por escrito… en fin, a lo que iba, que las bases de datos siempre me han molado bastante.

Sin embargo, hasta ahora no he impartido una clase de bases de datos a nivel universitario (impartí un par de cursos de bases de datos en Bilbao, pero eran fuera de la universidad), así que cuando me comentaron cuales eran mis opciones docentes para este trimestre, escogí la asignatura de base de datos sin pensármelo dos veces. Evidentemente, no va a ser una asignatura tan orientada al h4×0ring como la asignatura de programación cuyas prácticas impartí en 2006 y 2007, y en la cual teníamos a los estudiantes escribiendo parsers con lex y yacc en la quinta semana. No obstante, tengo unas cuantas ideas en ebullición. En concreto, desde que me involucré con el Center for Teaching and Learning de la universidad, me he interesado mucho por el Aprendizaje Activo y el Aprendizaje Colaborativo, y últimamente intento aplicarlos lo máximo posible en mi docencia.

Por ejemplo, la semana pasada tuvimos el primer “discussion group” de la asignatura, en el que me reuno con los estudiantes de la asignatura (14 estudiantes, aunque a la sesión vinieron 8) durante una hora y “discutimos”. Como no hemos llegado a SQL ni a los otros aspectos más técnicos de las bases de datos, el propósito de esta sesión fue realizar el diseño de una base de datos utilizando el modelo Entidad-Relación. Lo estructuré de la siguiente manera:

  1. Entrego a los estudiantes un enunciado, y les doy unos minutos para que lo lean y hagan preguntas por si algo no queda claro. Podeis echar un vistazo al enunciado aquí. Como podéis ver, ajem, me cuesta desvincular el frikismo de la docencia xDDD
  2. Los estudiantes se juntan en grupos de tres, y realizan el diagrama Entidad-Relación juntos. Esto es mejor que hacerlo individualmente porque (1) en el “mundo real” casi siempre te va a tocar colaborar con otras personas en este tipo de tareas y (2) porque esto estimula discusión sobre conceptos teóricos que se han visto en clase (p.ej., “Esto es una entidad débil!” “Me parece que no” “Explícame por qué no” etc.)
  3. Pasada media sesión, cada grupo escribe su solución en la pizarra. En concreto, tuvimos tres soluciones, todas esencialmente correctas, pero con sutiles diferencias, porque hay mil maneras de diseñar una base de datos, y cada una suele diferir en puntos semánticos muy detallistas o incluso irrelevantes. Esto también estimula una discusión sobre cómo se diseña una base de datos, por qué distintos diseños pueden plasmar la misma realidad, etc.

Cabe destacar que estas sesiones son opcionales, y ni siquiera son evaluadas. Su propósito es puramente complementar lo que se ve en las clases “de teoría” para reforzar los conocimientos. Y, aun así, la mayoría de los estudiantes vienen y hacen los problemas sin rechistar (no hay grupos donde uno hace todo el trabajo, y el resto se rasca las narices). Evidentemente, esta estrategia es posible porque es un grupo pequeño de estudiantes y porque aquí en EEUU los estudiantes están habituados a hacer mucho trabajo fuera de las clases “de teoría”, a hacer muchas preguntas, y a dialogar lo máximo posible con los docentes (a diferencia de los estudiantes españoles, que tendemos a ser muy calladitos).

En fin, más adelante vamos a cubrir SQL, programación web con bases de datos, y aspectos más teoricos de las bases de datos (como los dichosos arboles B). De hecho, hace más de un lustro escribí un cuaderno de ejercicios de SQL, y este trimestre quiero traducirlo al inglés, extenderlo, y publicarlo online. Más detalles sobre esto en el siguiente post.