Archive for the 'Informatica' Category

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.

Venga a ver, venga a ver…

En la carrera hay muchas asignaturas que generaron en mi una frustración inconmesurable por su aparente futilidad. Estoy seguro que más de un estudiante de ingeniería de ESIDE se ha preguntado varias veces “¿Por qué tengo que estudiar esta asignatura si no tiene nada que ver con la informática?”. Muchos profesores nos aseguraban que ya nos resultarían útiles en el futuro y, en esa edad rebelde, pues no nos lo creíamos. Sin embargo, hay varias ocasiones en las que he tenido que admitir que algunas de esas asignaturas si me han venido bien.

Por ejemplo, en nuestro programa de doctorado hace falta un entrenamiento matemático no trivial, y las asignaturas de Álgebra y Matemática Discreta me proporcionaron esa base (aunque la hubiese olvidado casi por completo cuando llegué a EEUU). Cuando escribí mi libro tuve que escribir una propuesta de libro al editor, en la que me pedían realizar un análisis del mercado y de mi posible competencia. Reaparecieron, pues, en mi cabecita términos como “segmentación del mercado”, “grado de penetración del producto”, etc. y de repente las asignaturas de empresa que antaño me parecieron un tostón ahora resultaron estar plenamente justificadas.

Sin embargo, siempre me ha quedado una espina clavada: las míticas asignaturas de Estadistica I y Estadistica II en ESIDE. Dejando aparte el mal sabor de boca que me dejaron (Estadistica II es la única asignatura que suspendí en la carrera), nunca nunca les había encontrado un propósito práctico. Incluso cuando empecé a interesarme por los fundamentos teóricos de la informática, la estadística no pintaba nada. Era todo matemática discreta y, ocasionalmente, álgebra y análisis matemático.

Pues bien, hace poco por fin he tenido que usar la estadística de manera práctica y totalmente justificada. Actualmente estoy trabajando en un artículo que presenta unos resultados basados en simulaciones de planificación de recursos. He llegado a un punto en el que estoy produciendo una cantidad desorbitada de información, del tipo que ni se puede resumir fácilmente en una tabla ni se puede decir “Bueno, pues la media de todo esto es 5.6 y ya está!”. Y cuanto tienes mucha información y quieres (1) resumirla de tal manera que no se rían de ti cuando presentas los resultados en la conferencia y (2) te permita identificar patrones y comportamientos en la distribución de tus datos, pues la estadística es una herramienta indispensable. Esto no significa que me esté pasando el día haciendo cálculos con papel y lapiz y consultando tablas de distribuciones estadísticas (como hacíamos en esas asignaturas). Me lo estoy pasando como un enano trasteando con R, un paquete libre de estadística que incluye un lenguaje de programación propio y todos los paquetes extra que te puedas imaginar (vamos, es algo así como el LaTeX del análisis estadístico :-P), y mi ultimo vicio son las regresiones no-paramétricas. Antes de utilizar R y aplicar métodos estadísticos a mis datos, la información producida por mis experimentos no tenía ni pies ni cabeza. Y ahora, gracias a la estadística, lo veo todo claro. Quién me lo iba a decir…

P.D.- Para los que no seais de ESIDE, el título hace referencia a cierto profesor de ESIDE. La próxima vez que pregunte a ver si alguien le mecaniza la estadistica, le decís que el proyecto R ya lo ha hecho :-P

Bill Gates dice: ¡Hazte peluquero!

Como he relatado en anteriores ocasiones, ser estudiante de la Universidad de Chicago te expone a ciertos personajes que de vez en cuando se pasan por la universidad, como Jimbo Wales y Ang Lee, o por la ciudad, como John Williams y Howard Shore. Pues esta vez ha tocado una visita nada más y nada menos que de Bill Gates. Ha venido a dar una charla y, apropiadamente, no la ha dado en el departamento de ciencias de la computación, sino en la escuela de empresariales. El título de la charla era “Bill Gates Unplugged: On Software, Innovation, Entrepreneurship and Giving Back“. No sé, eso de “Bill Gates Unplugged” me sonaba un poco raro… ¿acaso iba a salir al escenario, sentarse en un taburete, quitarse la corbata, y empezar a cantar ‘Code Monkey‘ mientras toca una guitarra acústica?

Bueno, ahora ya en serio, la charla fue semi-interesante. No contó nada nuevo (”La tecnología mola”, “Tenemos que hacer más por los países pobres”, “Mola cuando la tecnología la utilizamos en países pobres para que sean menos pobres”, etc.), pero siempre es interesante ver en persona a alguien que, se mire como se mire, ha tenido un impacto importante en la historia de la informática mediante la popularización del ordenador personal.

Sin embargo, me ha dejado un poco calentito cuando ha respondido a una pregunta que le ha hecho un estudiante: “¿Qué opinas del software libre y open source?” (os juro que no fui yo ;-) De entrada, ha empezado insinuando que libre == gratis y que, claro, así no hay quien pueda ganar dinero. Refiriéndose a las licencias open source “no-víricas”, ha mencionado que tienen algo de mérito, pero principalmente para que las universidades puedan publicar su trabajo gratis y para que luego pueda ser aprovechado por empresas (que pueden relicenciar el código como les de la gana), creando nuevo empleo, y pagando más impuestos que luego irán a las universidades, ¡creando un bello círculo de la vida! En cambio, ha añadido tajantemente, “con la licencia GPL no puedes crear nuevo empleo”. Se nota que hace tiempo que no ha hablado con Red Hat, SUSE, o el sinfín de empresas que han creado un modelo válido de negocio con productos que llevan licencia GPL, o con licencias “no-víricas” que tienen éxito más allá del modelo simplón de “es lo que utilizan las universidades para publicar prototipos para luego puedan aprovecharlas las empresas”.

Sin embargo, lo que más boquiabierto me ha dejado es cuando ha caracterizado a la gente que apoya estas licencias como gente que promulga “ser peluquero de día para ganar dinero, y escribir software de noche como hobby”. Y, claro, ¡así no hay quien se monte un modelo de negocio! Aunque coincido en que, si tenemos que ser algo, tiene que ser peluqueros, porque evidentemente somos una pandilla de melenudos comunistas. En fin, tampoco es que esto me sorprenda… ¿Qué sería una charla de Hasecorp sin un poco de FUD?

ACTUALIZACIÓN (21/02/08): A través del blog de Karl Norby (que, por cierto, ha escrito un resumen -en inglés- bastante bueno de la charla) veo que las palabras exactas de Bill Gates fueron:

There are people who think there should be no commercial software, that if you’re a good software person, you should cut hair during the day and do software at night. And so they actually put this license on that locks software in, so you can never create jobs. That’s called the GPL.

Frikeando el despacho

07-22-07_1714

En el Departamento de Ciencias de la Computación de la Universidad de Chicago nos asignan a todos un ordenador que, por defecto, lleva instalado Debian. Este ordenador lo mantiene el servicio técnico del departamento, con lo cual se encargan de hacer backups cada noche, actualizarlo, etc. El problema es que no tienes acceso administrativo a la máquina, y (por ejemplo) la instalación de nuevo software hay que realizarla a través del servicio técnico.

Durante los últimos meses, he estado dependiendo más y más de mi ordenador universitario para mi trabajo (investigación, preparación de clases, etc.) y al final me encontraba maniatado con la configuración estándar mantenida por el servicio técnico. Afortunadamente, el servicio técnico está compuesta de gente muy enrollada, y no tienen ningún problema en darte acceso root en tu máquina. La única pega es que tienes que mantener la máquina tú mismo (backups, actualizaciones, etc.), algo que a mi no me importa. Así que, al volver a Chicago, he hecho unos cuantos cambios a mi puesto de trabajo:

  • He solicitado que me den acceso root a la máquina. De hecho, me he cargado todo lo que había en la máquina y he instalado Ubuntu Feisty Fawn.
  • He solicitado un monitor extra, y he pasado a una configuración de monitor dual con Xinerama. Esto es una go-za-da. Mucha gente me lo había recomendado, y ahora sé por qué. Mi escritorio ahora está mucho mejor organizado, con el monitor de la derecha (el “secundario”) mostrando el e-mail, mensajería, y otras pijaditas, mientras que el monitor de la izquierda (el “primario”) muestra la aplicación principal que quiero utilizar (una terminal, el OpenOffice, el Eclipse, etc.). Además, esta configuración también viene muy bien cuando quieres tener abierta alguna documentación (un artículo, un HOWTO, una API, etc.) en un monitor y no tener que conmutar constantemente entre ventanas.
  • Para que el portatil no se sienta abandonado, me he instalado Synergy, un programa que permite que el portatil y mi ordenador de sobremesa compartan el ratón y teclado. Es decir, cuando el ratón (el que está conectado al ordenador de sobremesa) atraviesa la frontera izquierda del monitor izquierdo, aparece magicamente en el portatil, y todo lo que escriba en el teclado (de nuevo, el que está conectado al ordenador de sobremesa) se redirige al portatil. Una cosa que me encanta del synergy es que, además, permite compartir el contenido del “portafolios” entre las dos máquinas. Así que puedo hacer Control-C en mi ordenador de sobremesa, y luego hacer Control-V en el portatil y el texto copiado aparecerá ahí.

La razón por la que he estado dependiendo cada vez más de mi máquina universitaria es porque ultimamente me estoy tomando más en serio la separación entre mi puesto de trabajo y mi casa. Antes solía trabajar bastante en mi PC de casa pero, a lo largo del último año, he preferido concentrar mi trabajo en mi despacho (aunque eso suponga quedarme en el despacho hasta las 21:00 o 22:00 e ir a trabajar durante el fin de semana) y no trabajar nada en casa. Noto que esa separación es muy saludable, y que es recomfortante llegar a casa al final del día y poder pensar “Vale, estoy en casa, aquí ya no se trabaja y puedo dedicar el (poco) tiempo que tengo aquí para descansar o pasarlo bien”.

Varias personas ya me han preguntado que por qué no asigno el rol de “puesto principal de trabajo” a mi portatil, de tal manera que pueda llevarmelo conmigo a cualquier lado. Pues la verdad es que, en este respecto, soy un tanto conservador y poco friki… siempre he visto el portatil como una máquina que sólo debería utilizar cuando necesito mobilidad (p.ej., cuando me voy a una conferencia, cuando tenemos una reunión fuera de mi despacho, etc.). Para mi trabajo me siento más cómodo con un ordenador de sobremesa y, cuando necesito acceder a documentos en ese ordenador cuando estoy fuera del despacho, pues SSH powah y a correr :-D Además, llevar el portatil de casa al despacho (y viceversa) todos los días me parece un coñazo, aparte de que rompería la separación trabajo-casa.

En fin, este no es el único cambio que tengo planificado para mi maquinaria. Más noticias en un post futuro.