jueves, 3 de diciembre de 2009

Cooperación a través de la programación

código

Un valor que debe desarrollar nuestro alumnos es que la cooperación, el trabajo en equipo, es fundamental en el desempeño de su actividad laboral. En esta entrada te propongo una actividad para trabajar en clase la cooperación a través de la programación.

La actividad se basa en el clásico de la teoría de juegos "el dilema del prisionero". En este caso, el dilema se replantea en el siguiente escenario: son dos programadores que trabajan en un mismo proyecto y tienen la posibilidad de cooperar o no para realizar su trabajo. La recompensa/castigo por su actitud se mide en horas de trabajo que debe realizar.

Para la realización de la actividad cada alumno debe programar un "prisionero" utilizando Python en donde debe decidir si quiere colaborar o no. .A continuación se realiza un torneo en donde se cruzarán todos los prisioneros programados, generándose la puntación para cada uno de ellos. Realmente en nuestro caso no es un "prisionero" sino un "programador", pero he preferido utilizar la nomenclatura más acorde al planteamiento clásico del dilema del prisionero aunque el nombre lo puedes cambiar (consultar parámetro "-c").

La idea es realizar varias iteraciones en donde los alumnos programan su prisionero, se realiza el torneo y se valora los resultados de las diferentes estrategias. En cada iteración se puede realizar diferentes tipos de cruces atendiendo a la información que tiene disponible un prisionero para decidir:
  1. No posee ninguna información.
  2. Conoce la respuesta anterior de su oponente. La función "cooperar" de cada prisionero recibe como parámetro un valor lógico (True o False) indicando la respuesta dada anteriormente por su oponente.
  3. Conoce todas las respuestas anteriores dada en el torneo, tanto en los cruces en los que ha participado como en los que no.
Se podría modificar el programa para contemplar la posibilidad de que los prisioneros puedan elegir al oponente con que se quiere enfrentar. Seguramente, cada prisionero/programador prefiera enfrentarse/trabajar con los prisioneros/programadores que más colaboran.

Puedes jugar online al dileman del prisionero en la siguiente página.

Programar los prisioneros

Programar un "prisionero" es muy sencillo. En un fichero de texto con extensión ".py" (módulo en Python) cada alumno debe crear una clase que tenga los atributos "nombre" y "version", y la función "cooperar" en la que se debe devolver True si colabora o False en caso contrario. Por ejemplo, este es el código de un prisionero que siempre colabora.

class Prisionero(object):
nombre = "prisionero colaborador"
version = "1.0"

def cooperar(self, informacion):
return True

El parámetro "información" tiene que ver con la opción "-a". Consulta el apartado de posibles parámetros por línea de comandos.

Los estudiantes pueden programar una gran diversidad de prisioneros. Por ejemplo:
  1. Un prisionero que siempre coopera o al contrario, que nunca coopera.
  2. Un prisionero rencoroso que siempre coopera hasta que el contrario deja de cooperar, a partir de este momento nunca más coopera. Para realizar este tipo de torneo y el siguiente, se debe indicar al programa como parámetro "-a 1", así se le pasará a cada prisionero la última respuesta de su openente como parámetro de la función "cooperar"
  3. Un prisionero con la filosofía "donde las dan, las toman". En este caso, el prisionero coopera la primera vez y a partir de este momento siempre repetirá la última jugada realizada por su oponente.
Se ha realizado competiciones anteriores del dilema del prisionero en donde parece que el algoritmo óptimo es el prisionero con la filosofía "donde las dan, las toman".

Ejecutar el programa

Aunque se puede indicar diferentes parámetros, el programa es tan fácil, como copiar todos los archivos en donde los alumnos han programado un prisionero en la carpeta "prisioneros" y a continuación ejecutar el comando:

python ./dilemaprisionero.py

Se genera un directorio con el nombre "partida..." y dentro los siguientes tres archivos:
  • El archivo con nombre "interrogatorios.txt" contiene todos los cruces llevados a cabos y la respuesta de cada jugador.
  • El archivo nombrado "sentencias.txt" contiene el ranking de todos los prisioneros.
  • El archivo nombrado "logging.txt" en donde puedes consultar la traza seguida. Este archivo te puede ser útil si se produce algún error durante la ejecución y quieres averiguar el motivo.

Parámetros por línea de comandos

Parámetros que puedes indicar por línea de comandos:
  • "-o [directorio]" Nombre del directorio en donde se guardarán todos los ficheros generados por el programa. Por defecto se generará un directorio con el formato de nombre "partida_AñoMesDiaHoraMinutoSegundos".
  • "-d [directorio]" Nombre de la carpeta en la que se encuentra los ficheros Python con el código de cada prisionero. Por defecto, esta carpeta se llama "prisioneros".
  • "-t [nombre tabla]" Nombre de la tabla de recompensa que se empleará para definir las recompensas/castigo a cada prisionero. Estas tablas están definidas en el fichero "tabla_pagos.py".
  • "-i [numero de iteraciones]" Indica el número de veces que se va a enfrentar los dos programadores en un mismo interrogatorio. Valor 100 por defecto.
  • "-x [número de cruces]" Número de veces (interrogatorios) que se realizarán entre dos prisioneros. Valor 1 por defecto.
  • "-a [0|1|2]". Indica la información que recibe cada prisionero: "0" no recibe ninguna información, "1" recibe la última respuesta dada por su oponente, "2" recibe todas las respuestas dada hasta el momento por su oponente.
  • "-c [clase prisionero]" Nombre de la clase de los prisioneros. Por defecto es "Prisionero".
Tabla de recompensa

Esta es una posible tabla de recompensa:




prisionero A/prisionero BSiNo
Si816
No120

De este modo, si los dos prisioneros colaboran "Si", tendrán que trabajar 8 horas. Si el prisionero A colabora y el prisionero B no lo hace, el prisionero A tendrá que trabajar 16 horas y el prisionero B tan sólo 1 hora. Si ninguno de los dos colaboran, tendrán que trabajar 20 horas.

martes, 24 de noviembre de 2009

Europa aprueba limitar tus derechos

El Parlamento Europeo ha aprobado la directiva de acceso a Internet. Uno de los aspectos claves es que el acceso a Internet podrá restringirse, de ser necesario y proporcionado, únicamente tras un "procedimiento justo e imparcial, que incluya el derecho del usuario a ser escuchado". Esto se refiere al derecho de las operadoras de desconectar a los usuarios que se bajen contenido protegido (películas, novelas, etc) sin la necesidad de una orden judicial. Esto a su vez, conlleva a que las operadoras puedan conocer todo las comunicaciones que realizan sus abonados y utilizarlo en su contra. Una auténtica aberración, en contra del derecho fundamental a la privacidad.

Pero bueno, antes estas nuevas leyes absurdas seguro que se generaliza el uso de nuevos métodos para garantizar nuestra privacidad, como el cifrado de las comunicaciones o redes. Un claro ejemplo es el proyecto Tor: "Tor te protege transmitiendo tus comunicaciones a través de una red distribuída de repetidores llevados por voluntarios de todo el mundo: evita que alguien que observa tu conexión a Internet aprenda qué sitios visitas, y evita que los sitios que visitas aprendan tu posición física"

Por lo pronto, puedes usar la siguiente aplicación gratuita de Google MeasuremenLab para conocer si tu operador está cortando o penalizando algunas comunicaciones. Como usuarios, debemos penalizar a estos operadores contratando el servicio de acceso a Internet con otros operadores que respeten a sus abonados.

viernes, 20 de noviembre de 2009

Pizarras online

Muchos centros educativos en España disponen de pizarras digitales pero no te voy a hablar de estas pizarras sino de las pizarras online.

Con las pizarras online no hace falta que los alumnos salgan a la pizarra ya que pueden escribir en ella desde su propio ordenador. Estas pizarras las puedes usar para dar clases no presenciales, en donde los alumnos pueden ver desde casa lo que escribes e incluso escribir en ella. Además, en algunas cuenta con la posibilidad de poder grabar la sesiones como si fueran películas.

Un aspecto clave es que la pizarra se convierte en una herramienta realmente colaborativa, compartida por todos, alumnos y profesores. Otra cosa, con las pizarras online no tenemos que limitarnos a tener una única pizarra en clase. !Podemos tener todas las que queramos!. Por ejemplo, cuando realizamos actividades en grupo, cada grupo puede tener su propia pizarra online.

Normalmente, estas pizarras no requiere instalar ningún software en los equipos. Existen numerosas alternativas gratuitas pero la que más me ha sorprendido por su facilidad de uso es Imagination Cubed. Acceder y usar, así de simple.

Algunos online whiteboard:

domingo, 15 de noviembre de 2009

¿Discriminamos a nuestros alumnos?

Cuando nos planteamos el uso del ordenador y de Internet en nuestras actividades de clase debemos pensar si estamos marcando una diferencia entre aquellos alumnos que tienen disponibles estos recursos en casa de los que no ¿Se puede sentir discriminado el alumno que no tiene conexión a Internet desde casa? ¿desde donde puede conectarse en horario no lectivo?. Estas son algunas de las preguntas que debemos hacernos cuando diseñamos actividades que se prolongan fuera del horario lectivo.

Según los indicadores publicados por ONTSI (Observatorio Nacional de las Telecomunicaciones y de la SI) , sólo el 54% de los hogares españoles poseen conexión a Internet. En la siguiente gráfica puedes ver la evolución desde el 2002 hasta el 2009.
Con respecto al equipamiento TIC tenemos que en el tercer trimestre del 2008 el 63% de los hogares disponían de ordenador. De destacar el aumento de uso de los portátiles que hay en el 20% de los hogares.
PD: ¿Alguien ha visto por clase uno de esos maravillosos portátiles prometidos por ZP?

miércoles, 11 de noviembre de 2009

Go, Go, Go


Bueno, sólo era cuestión de tiempo, Google anuncia su nuevo lenguaje de programación, "GO".. Me permito citarme a mí mismo, en la entrada publicada el 16 de julio de este año:

"¿qué lenguaje se impondrá en los próximos años? No me atrevo a pronosticar nada, pero puede ser que Google esté preparando el siguiente Gran Lenguaje de programación. Si es así, seguramente será un lenguaje con características de C, Javascript y Python."

Si, lo sé, este pronóstico no tiene mérito, era algo que muchos pensábamos, que se intuía en el aire. Lo que queda por ver son la herramientas de desarrollos que seguramente publicará Google en los próximos meses y el empuje a este nuevo lenguaje.

Por lo pronto, no es un lenguaje tan "divertido" como Python. Pero bueno, han tenido que sacrificar la sintaxis para hacerlo lo más parecido a C. Esto ayudara a su implantación ya que todo el mundo conoce C. ¿Volveremos a tener pesadillas con los punteros?

Han hecho apuestas curiosas en este nuevo lenguaje como por ejemplo no soportar la herencia. La idea es evitar el declarar relaciones entre tipos, pero soporta mecanismos para no perder la funcionalidad que obteníamos a través de la herencia: "Embedding". Otros aspectos que me han sorprendido es la declaración de métodos. Pero bueno, ya tendremos tiempo para ir viendo con detalle las características de este nuevo lenguaje propuesto por el gran hermano Google.

miércoles, 4 de noviembre de 2009

Sugar - Plataforma de aprendizaje

Sugar es una plataforma de aprendizaje para niños con edades entre 5 y 12 años. Es software libre y de código abierto, siendo la interfaz originaria de la XO-1 de OLPC, sigla en inglés de "One Laptop Per Child" en español "Una Computadora Portátil por Niño".

Ofrece un entorno de trabajo diferente al de escritorio con archivos, carpetas y aplicaciones. Sugar gira entorno a actividades, niños que participan y comparten actividades. Por ejemplo, con este enfoque no hablamos simplemente de un procesador de texto sino de actividades de redacción en la que el alumno emplea una herramienta y puede trabajar en grupo. Pulsando aquí tiene acceso a su repositorio de actividades.

Tiene una vista de grupos en donde verás que personas están haciendo cada actividad. Además, mantiene un histórico con todas las actividades en las que ha participado el alumno con lo que puedes hacer su seguimiento y evaluación.

Se encuentra disponible su versión en stick de memoria por lo que puedes probarlo sin necesidad de instalación. A continuación se incluye el video demostratativo de Sugar. Anímate y pruébalo.



Nicholas Negroponte, fundador de la iniciativa One Laptop Per Child, ha dicho que el mayor error de su organización fue la implementación de la plataforma Sugar al convertirse en un sistema operativo más que una aplicación que puediera correr en cualquier sistema. Entiendo que esta apreciación está hecha en el contexto del proyecto OLPC y que no descalifica a Sugar como una alternativa que puede dar muy buenos resultados en clase.

PD: Sugar está programado en Python