Microsoft y la propiedad intelectual

Necesito cambiar de proyecto de investigación. Ésa es la conclusión que hemos sacado de la reunión de hoy con mi advisor y el resto del grupo. ¿Por qué razón? Las leyes de propiedad intelectual combinadas con la política de Microsoft.

El proyecto en el que debería de estar trabajando está basado en Ameriflux, una red de científicos de varios países en Ámerica que toman mediciones periódicas de CO2 en varias estaciones esparcidas por todo el continente. Ya sábeis, cambio climático y esas cosas. El caso es que necesitan una solución tipo portal combinado con algo parecido a una Data Grid. En principio, el proyecto iba a explorar cómo herramientas especializadas en soluciones empresariales, como Microsoft Office Sharepoint Server, pueden ser usadas en redes científicas. La ventaja es que estas herramientas ya están en uso en muchos laboratorios y centros de investigación, y si con cambios mínimos -o extensiones- pudieran ser usadas para otros fines el impacto sería bastante grande. Aunque tenía ciertas reticencias a trabajar con herramientas de Microsoft, siendo prágmaticos los beneficios -desarrollar infraestructuras para científicos que obtienen datos para estudiar el cambio climático- superan los inconvenientes.

Bueno, he aquí el gran pero. Legalmente, Microsoft quiere ser capaz de licenciar el trabajo que sea realizado basándose en su herramienta. Para ello, debe tener los derechos de propiedad intelectual de el trabajo de los estudiantes. Estaréis pensando que llegarán a algún tipo de acuerdo con los propios estudiantes, pero no es así. Como la mayoría de los doctorandos son financiados por la universidad, tienen el status legal de trabajadores de la universidad. Ergo, el trabajo que desarrollan es propiedad también de la universidad. Por esta razón Stallman dimitió de su puesto en el MIT cuando empezó el proyecto GNU. Así que Microsoft puede llegar a acuerdos con la universidad para licenciar el trabajo de los estudiantes.

Pero, en mi caso eso no es posible. Dado que estoy siendo financiado por la Fundación Caja Madrid a través de una generosa beca de postgrado, los derechos de propiedad intelectual sobre mi trabajo son enteramente míos -y puede que de la Fundación Caja Madrid, no estoy seguro-. Con lo cual Microsoft no podría usar mi trabajo para integrarlo posteriormente en su producto MOSS, y dudamos mucho que se presten a alcanzar un acuerdo sólo por mí. Así que el lunes empezaremos a considerar otros proyectos de investigación alternativos.

En definitiva, incluso en investigación estamos expuestos a las leyes de propiedad intelectual y los abogados de la compañías privadas más de lo que quisiéramos.

Escrito en CS UVA, Planet. 1 comentario

Inundaciones en Olsson Hall

Recientemente, una de las tuberías que pasa por el ático del edificio del departamento se rompió y empezó a inundar una de las salas con oficinas de estudiantes de doctorado. Afortunadamente, esto ocurrió a una hora en la que normalmente hay estudiantes trabajando: 11 y media de la noche. Los daños podían haber sido peores (aunque hay libros, ordenadores y papeles pasados por agua), ya que han tenido que vaciar completamente la sala y reemplazar la moqueta. Así que los problemas de espacio del departamente se están agravando por momentos hasta que se recupere esa sala.

Puede que os extrañe que haya gente a altas horas en la universidad. Sin embargo, es muy común en el extranjero tener las puertas de las universidades abiertas las 24 horas del día. No sólo en Estados Unidos, sino también cuando estuve de Erasmus en Inglaterra la biblioteca sólo cerraba durante algunas horas de la noche del domingo. Otros compañeros de Erasmus me comentaron situaciones parecidas en otros países. La universidad no te pone ningún impedimento para que tengas el horario de trabajo que quieras y sigas teniendo a mano recursos como bibliotecas o salas con ordenadores.

Además de las bibliotecas, las puertas principales de los edificios siguen abiertas. Como estudiantes de doctorado, tenemos llaves de nuestras oficinas y de ciertas zonas comunes -como la sala de impresoras o el lounge- y no es raro encontrarse gente trabajando hasta altas horas o durante el fin de semana en algún paper para una conferencia próxima. También hay compañeros que trabajan de noche y no se levantan hasta tarde. Una situación bastante diferente a que te cierren todos los edificios de la Universidad a las 9 de la noche y suelten los perros por el campus ;)

Escrito en CS UVA. 1 comentario

Clase en la campa

Hoy hace un día estupendo, ya llevamos unos cuantos días primaverales bastante buenos -por encima de los 20ºC-. A mediodía teníamos clase de Virtual Execution Environments, y como siempre nos hemos juntado en una sala de videoconferencias de Olsson Hall -el edificio del departamento de ciencias de la computación-. Al entrar en el aula uno de nosotros ha sugerido que diésemos la clase fuera, y dicho y hecho. Hemos ido a uno de los laterales de este edificio y nos hemos entado en un círculo en la campa:

thorthon hall

El formato de la clase es bastante atractivo. Somos unas 10 personas, y cada uno se encarga de organizar un día de clase -exceptuando el primer mes que los organizaba la profesora-. Por cada día escogemos dos papers recientes -publicados en las conferencias más importantes del área desde 2005- sobre un tema. Antes de clase leemos los papers, publicamos nuestros comentarios en el wiki y durante la clase damos nuestras opiniones. Y hoy lo hemos hecho bajo un agradable sol primaveral.

Escrito en CS UVA. 1 comentario

Photo tourism

En la clase de hoy de Computer Vision hemos estado hablando de como recuperar informacion de una escena 3D basandose unicamente en series de imagenes tomadas por una videocamara -o varias camaras-, sin tener informacion sobre la estructura 3D de la escena o de la localizacion y orientacion de la camara. Al final hemos visto este video, que es _impresionante_:

Este proyecto usa los algoritmos que hemos estado discutiendo en clase como base para esta interfaz. Lo que es completamente novedoso es el uso de todas estas fotos tomadas por diferentes personas para desarrolar estos modelos 3D y una interfaz para recorrer colecciones de fotos completamente original. Una idea genial.
Photo tourism fue desarrollado en la universidad de Washington en colaboracion con Microsoft. Aqui hay una demo de lo que puede ser un nuevo producto:

Teatime & Pi day

Todos los viernes a las 4 de la tarde es “Teatime” en el departamento de Ciencias de la Computación. Normalmente algún estudiante o un grupo de investigación se presenta voluntario para comprar algo de comida y bebida (el departamento aporta algo así como $50 o $100). Por ejemplo, hace un par de semanas tuvimos uno bastante concurrido por el año nuevo chino. El propósito es tener un rato para conversar con estudiantes/profesores de otros grupos de investigación. Pues bien, hoy he recibido este email:

[cs-announce] Teatime is starting: Pie

In celebration of Pi Day (Which was Wednesday) Knight’s group is serving pie and coffee for teatime. It has started so come and grab a slice.

Pie para celebrar el día de Pi (se pronuncian igual en inglés)… interesante frikada

Feliz día de Pi -con un par de días de retraso-!

Escrito en CS UVA, UVA. 1 comentario

Pin: dynamic binary instrumentation system

¿Cuántas instrucciones se necesitan para ejecutar un ‘Hello World!‘? Está claro que depende del lenguaje y que necesitamos una herramienta para medir exactamente el número de instrucciones.
Ya he empezado de nuevo las clases, y aprovecho este momento para hacer un post de lo que vimos en la última clases de Virtual Execution Environments. La profesora fue una de las desarrolladoras de esta curiosa herramienta en Intel. Pin toma el control del programa a ejecutar y permiter instrumentalizarlo. Consta de una máquina virtual, una caché de código y un compilador JIT. Básicamente, coge el código binario original, lo compila por fragmentos y los almacena en la caché. Sólo el código en la caché se ejecuta. Consta de una API que permite desarrollar aplicaciones para medir aspectos de nuestro programa que sean interesantes. Una simple herramienta consiste en insertar incrementos de uno en un contador detrás de cada instrucción binaria.

Pues bien, he hecho un par de pruebas en una máquina de la universidad:

Linux power1 2.6.16-1.2096_FC4smp #1 SMP Wed Apr 19 15:51:25 EDT 2006 i686 athlon i386 GNU/Linux

Hay tres programas, lo único que hacen es imprimir ‘Hello World!’ por la pantalla: helloC, helloCPP y hello.py -se notan los lenguajes, no?-. Cuando termina la ejecución del programa, el plugin o pintool, icount, imprime el recuento de instrucciones ejecutadas en el procesador. Según lo que comentamos en clase, en ensamblador se puede hacer en 8 instrucciones -si te preocupas por hacer un return 0 y no cascar-. ¿Cuántas creéis que hacen falta por cada lenguaje? He hecho 3 compilaciones para C y CPP: una sin opciones, otra con link estático (S en el nombre del ejecutable) y otra con link estático y optimizaciones (con O). La versión de gcc es la 4.

Hagan sus apuestas antes de continuar leyendo… ¿700 instrucciones para C por un simple hola mundo? ¿O más bien varios miles de instrucciones? ¿Cuánto peor es C++? La notación es: pin -ifeellucky (da warnings en máquinas no Intel) -t icount (plugin a usar) — línea de comandos con binario a utilizar

ar5je@power1
: /af10/ar5je/CS851/Pin2/pin-2.0-9474-gcc.4.0.0-ia32-linux ; Bin/pin -ifeellucky -t SimpleExamples/icount — Hello/helloC
Hello World!
Count 104729

ar5je@power1
: /af10/ar5je/CS851/Pin2/pin-2.0-9474-gcc.4.0.0-ia32-linux ; Bin/pin -ifeellucky -t SimpleExamples/icount — Hello/helloCS
Hello World!
Count 12257

ar5je@power1
: /af10/ar5je/CS851/Pin2/pin-2.0-9474-gcc.4.0.0-ia32-linux ; Bin/pin -ifeellucky -t SimpleExamples/icount — Hello/helloCSO
Hello World!
Count 12246

ar5je@power1
: /af10/ar5je/CS851/Pin2/pin-2.0-9474-gcc.4.0.0-ia32-linux ; Bin/pin -ifeellucky -t SimpleExamples/icount — Hello/helloCPP
Hello world!
Count 1484282

ar5je@power1
: /af10/ar5je/CS851/Pin2/pin-2.0-9474-gcc.4.0.0-ia32-linux ; Bin/pin -ifeellucky -t SimpleExamples/icount — Hello/helloCPPS
Hello world!
Count 45151

ar5je@power1
: /af10/ar5je/CS851/Pin2/pin-2.0-9474-gcc.4.0.0-ia32-linux ; Bin/pin -ifeellucky -t SimpleExamples/icount — Hello/helloCPPSO
Hello world!
Count 45126

Bueno, se puede ver la diferencia abismal que hay entre el link estático y dinámico de la librería estándar. De todos modos, el número me parece exageradamente alto para un Hola Mundo. Y en último lugar está, no podía ser menos, Python:

ar5je@power1
: /af10/ar5je/CS851/Pin2/pin-2.0-9474-gcc.4.0.0-ia32-linux ; Bin/pin -ifeellucky -t SimpleExamples/icount — python Hello/hello.py
Hello World!
Count 13140844
13 millones de instrucciones. Ahí es nada.

Más información de Pin en este enlace.

PD: me están destrozando a spam últimamente, así que modero yo los comentarios hasta que pueda instalar el plugin con el captcha. Sorry por los retrasos que pueda haber.

Escrito en CS UVA, Planet. 1 comentario

El problema del “Hello world”

Bien, otro post sobre teoria de la computacion -a peticion popular de Kalgan y Trun-. En este caso hablo sobre la imposibilidad de decidir si un programa en Python con un input I escribe por pantalla “Hello world” (no tiene por que ser exclusivamente, solo consideramos los primeros 12 caracteres). Asumamos que tenemos un programa H.py que lo hace, y si le pasamos por parametro eje1.py:

print “Hello world”

responde “si”. Que pasaria si en vez de eje1.py usamos eje2.pseudocodigo -considerando que manejamos numeros sufientemente grandes, etc. y escribimos el programa entero en Python-?

for every x,y,z, n>=3:

if (x^n+y^n==z^n):

print “Hello world”

Si reconocemos el ultimo teorema de Fermat, vemos que este programa no escribe por pantalla “Hello world”. Tambien podemos pensar que seria muy dificil para H.py reconocer que no lo escribe por pantalla. Probemos ahora que es imposible:

En vez de H.py consideramo H1.py, con la unica diferencia que en vez de escribir “si” o “no” escribe “si” o “Hello world”. Este programa es equivalente a H.py.

Moviendo un nivel mas arriba, consideremos el programa H2.py que incluye a H1.py. Recordemos que H1.py recibe como parametros el programa P y la cadena de entrada I. Lo que hace H2.py es recibir un unico parametro, el programa P y pasarselo a H1.py. La salida es la de H1.py, “si” o “Hello world”. Esto es, de analizar P(I) pasamos analizamos P(P). Por lo tanto, si pasamos a un programa su codigo como entrada y este escribiria “Hello world” por pantalla, H2.py nos responde “si” al analizar el programa P. En caso contrario, es decir, el programa con entrada su codigo no tiene como salida “Hello world”, H2.py nos responde “Hello world”. Pero, que pasaria si a H2.py le pasamos a si mismo como parametro? Si H2.py no escribe “Hello world”, deberia escribir “Hello world”. Si escribe “Hello world” deberia escribir “si”. Al llegar a esta contradiccion, se demuestra que es imposible escribir un programa que diga que otro escribe “Hello world” -o cualquier otra cosa u salida- o no.

Por lo tanto la verificacion automatica de programas en general es imposible de alcanzar.

Primer ‘take-home exam’

Ayer entregué mi primer examen para llevar a casa. Era sobre arquitectura de computadores, cosas básicas sobre diseño de procesadores, dependencia de datos y algunas preguntillas sobre el renombre de registros en un procesador superescalar. Es una asignatura obligatoria y cuyo temario entra en los quals (examen bastante chungo que hay que aprobar para continuar en el programa de doctorado). Pero hablemos del examen. En la hora de clase del martes recogí el examen y el profesor nos dio las instrucciones para realizarlo: dos horas como tiempo máximo, apuntes, libro y papers que están en la lista de lectura están permitidos, pero nada más -nada de buscar en Wikipedia-. La solución la entregamos al asistente del profesor el jueves en la hora de clase. Obligatorio firmar el código de honor para que el profesor corrija el examen.

El examen no era complicado si habías asistido a clase y con la ayuda de apuntes menos aún. Aún así me sorprende bastante la confianza que hay en la honestidad -no lo voy a llamar honor- de los estudiantes. Si esto se hiciese en nuestro país, no creo que saliese nada bien -aquí te denuncian tus compañeros si copias-. Y tú, ¿habrías resistido la tentación de copiar o alargar el examen?

Los compiladores (correctos) no existen

Otra vez otro post relacionado con Computher Theory. La verdad es que nunca se me habia ocurrido pensarlo, seguro que alguno ya se lo planteo en su dia en compiladores II (ese JosuKa). Esta vez es una demostracion de como los compiladores correctos no existen, es decir, los compiladores rechazan programas (cadenas) que son validos (existen en el lenguaje).

Los ordenadores al fin y al cabo son DFA (Automatas Finitos Deterministas). Por muy complicados que sean, o por mucha potencia/memoria/disco que tengan, no pueden aceptar lenguajes no regulares. Un ejemplo es L={(a^n)(b^n) con n e N}. Dado que n no esta acotado y puede ser tan grande como se quiera y el automata debe contener estados finitos, no podemos definir un DFA que acepte este lenguaje.

Ahora bien, en muchos lenguajes de programacion hemos visto que la definicion de una expresion se permite el anidamiento en base a parentesis -entre otras, recordamos gramaticas independientes del contexto en compiladores-:

E -> (E)

-> E+E

-> …
Puede un ordenador aceptar este tipo de cadenas {print “Hola estoy en Python”\n (^n 7 )^n | n>=0}? Por ejemplo:

print “Hola estoy en Python”
(((7)))

siendo n el numero de parentesis que tenemos

Este tipos de cadenas existen en el lenguaje Python, pero a partir de un n suficientemente grande, el interprete de Python cascara. Y es imposible tener un interprete correcto, ya que los ordenadores (DFA) tienen memoria (estados) finita.

Otra forma de mirarlo es que las gramaticas independientes del contexto que definen los lenguajes de programacion reconocen mas lenguajes (conjuntos de cadenas) que los regulares (DFA o ER).

Corolario: Los compiladores correctos no existen

Orientation sessions

Las clases en la universidad de Virginia empiezan en Agosto. Efectivamente, cuando todos vosotros estáis todavía pasándolo en grande en la Aste Nagusia y bronceándoos en la playa yo estoy aquí atendiendo estas magníficas sesiones de orientación y completando mi To-Do list.

Pues bien, hay dos tipos de eventos, los obligatorios y los opcionales (y divertidos). Comentaré los opcionales en otros post (excursiones, fiestas, cenas para conocer a gente, etc.) y mencionaré aquí los obligatorios. Al llegar a la universidad te enfrentas a una batería completa de sesiones de orientación en la primera semana:

  • Si vas a ser asistente de enseñanza, tienes que atender varios seminarios durante un par de días en los que te dan formación básica para llevar una clase. Tened en cuenta que aquí es muy común que la universidad pague por tus estudios de doctorado, y tienes que compensarlo siendo asistente de enseñanza o de investigación. En UVa la investigación la realizas según tu advisor y no sueles estar asociado a ningún profesor hasta el segundo semestre. Por lo que la gran mayoría de nuevos estudiantes son TAs (teaching assistants) al entrar en la universidad. Eso si, UVa ambiciona tener el mejor programa de undergraduate para ciencias de la computación, y a los TA se les exige mucho -además se supone que de entrada cuentan con los mejores alumnos-. 20 horas a la semana es la media, aunque yo, al tener mi propia financiación, no voy a tener que pasar por esto.
  • Sesiones para estudiantes internacionales. No es mucho lo que hay que hacer, pero sí extremadamente importante. Sólo tienes que aprender las cuatro cosas que hay que hacer para mantener el estatus legal en los Estados Unidos. Ser estudiante a tiempo completo, no perder los papeles de inmigración, mantener actualizada la dirección y no hacer ninguna tontería es lo que básicamente se requiere. También hay un par de exámenes de inglés, oral y escrito, para que la universidad compruebe si necesitas clases adicionales o no -yo estoy en una de speaking: Class communication for ITAs-.
  • Presentaciones por parte del departamento: conoces a muchos profesores y diversos aspectos sobre el programa de doctorado. Breve sesión de bienvenida, introducción por parte de sistemas sobre los recursos que hay, cómo financiar los estudios, el programa de estudios de Uva, qué es lo que hace un investigador, etc. Me voy a quedar con los dos aspectos más repetidos:
    • La importancia del método científico.
    • Lo importantes que somos para el departamento.

Para finalizar la semana, el picnic anual del departamento, al que no pude ir al estar enfermo (102 º de fiebre…Farenheit, claro). Y a partir del lunes 28 de agosto, a tope con las clases.

Seguir

Get every new post delivered to your Inbox.