miércoles, 31 de diciembre de 2008

Pacman 0.002 - Los eventos

código pacman

Continuando con nuestro juego en Python, vamos a introducir el manejo de eventos. Los eventos son desde cambio de la ventana hasta teclas pulsadas, pasando por movimiento del ratón. Para hacernos una idea de los tipos de eventos, lo que vamos hacer es simplemente capturarlos y mostrarlos en pantalla. Para probarlo, ejecuta el juego y pulsa teclas, mueve el ratón, etc.

En la primera versión de nuestro pacman, parecía que nuestro juego se quedaba "colgado". Esto se debe a que no procesábamos los eventos.

Los eventos van quedando almacenados en una cola, a la espera de que los procesemos. Para recuperar todos los eventos empleamos la función "pygame.event.get()" que devuelve una lista con todos los eventos y los elimina de la cola original. Esto lo haremos en todas las iteraciones del bucle principal de nuestro programa.

  while True:
eventos = pygame.event.get()
ManejarEventos ()

sprites.update ()
sprites.clear (screen, background)
pygame.display.update (sprites.draw (screen))

reloj.tick (60) #tiempo de espera entre frames

A continuación, en nuestro ejemplo, vamos a llamar a la función "ManejarEventos()" que lo único que hace es mostrar en pantalla el tipo de evento y además chequea si se produce el evento de tipo "Quit" que da por terminado el juego. Este tipo de evento se produce por ejemplo cuando pulsamos sobre la "X" de la ventana para cerrarla.

def ManejarEventos():
global eventos
for event in eventos:
print event
if event.type == pygame.QUIT:
sys.exit(0) #se termina el programa
elif event.type == pygame.MOUSEBUTTONDOWN:
print event.pos


En las próximas entradas de este blog lo que haremos es permitir que pacman sea manejado con el teclado y que pueda comerse las otras piezas del juego.

martes, 30 de diciembre de 2008

Pacman 0.001 - Aprender a programar es divertido

código pacman

Vamos a programar nuestra primera versión de pacman en Python 2.6 y usando la librería "Pygame". En esta primera versión lo que haremos es mostrar en una pantalla negra las imágenes que se muestran a continuación.





Además, haremos que nuestro pacman y el fantasma se muevan por la pantalla.

Todo el código y las imágenes lo tienes en el siguiente fichero pacman

Todos los objetos que mostremos en pantalla serán "sprites". Un sprite es un objeto que tiene dos propiedades: image y rect. "image" es la imagen a mostrar y "rect" es el rectángulo en donde se muestra la imagen en pantalla.
La función "update" de los sprites es llamada de forma continua a lo largo del juego para poder hacer cualquier cambio. Por ejemplo, en nuestro caso cambiamos la posición del sprite en pantalla empleando la función "move_ip" que desplaza el rectángulo de la imagen según la velocidad indicada en el constructor del sprite.
Por si no conoces Python, la función "__init__" es el constructor de la clase.
import pygame

class MiSprite ( pygame.sprite.Sprite ):
def __init__(self, fichero_imagen, pos_inicial, velocidad):
pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load(fichero_imagen).convert()
self.rect = self.image.get_rect()

self.rect.topleft = pos_inicial
self.velocidad = velocidad

def update (self):
self.rect.move_ip ( self.velocidad[0], self.velocidad[1])
Una vez definida nuestra clase Sprite vamos a inicializar el juego y la pantalla. Creamos una copia de la pantalla como "background" para optimizar el redibujado.
pygame.init()

window = pygame.display.set_mode([300,400])
pygame.display.set_caption("pacman")

screen = pygame.display.get_surface()
screen.fill ([0,0,0])

background = screen.copy()
A continuación creamos los sprites que se muestran en pantalla. Almacenamos los sprites en una lista de tipo "RenderUpdates" que optimiza el redibujado en pantalla.
sprites = pygame.sprite.RenderUpdates()

sprite = MiSprite("pacman.gif", [0,0], [1,1])
sprites.add ( sprite )

sprite = MiSprite("fantasma.gif",[100,0], [1, 1])
sprites.add ( sprite )

sprite = MiSprite ("fruta.gif", [0, 100], [0,0])
sprites.add ( sprite )

sprite = MiSprite ("bola.gif", [100, 100], [0,0] )
sprites.add ( sprite )
Por último, ejecutamos un bucle infinito en donde se actualizarán los sprites y se redibujarán en pantalla.
reloj = pygame.time.Clock()

while True:
sprites.update ()
sprites.clear (screen, background)
pygame.display.update (sprites.draw (screen))
reloj.tick (60) #tiempo de espera entre frames
En próximas entradas iremos mejorando nuestro pacman.

lunes, 29 de diciembre de 2008

!Quiero aprender a programar divirtiéndome!

La forma tradicional de aprender a programar es muy muy aburrida, con los típicos ejemplos de búsquedas de texto, ordenaciones, etc. !Quiero aprender a programar divirtiéndome!

¿Cómo? Pues bien sencillo, programando un juego. ¡Ojo! Un juego visual, nada de pantallas de consola con letritas. ¡Uff! Seguro que piensas que eso es muy complejo, sobre todo para enseñárselo a tus alumnos que no tienen ni idea de programación. Pues es mucho más fácil de lo que puedas pensar, todo consiste en elegir las herramientas adecuadas. ¿Y qué herramientas son esas? Python y Pygame. Python es un lenguaje de script cuyo uso se está extendiendo en todos los ámbitos y Pygame es una librería para programar juegos en Python.

La metodología que te propongo es ir creando con los alumnos la estructura básica de un comecocos para luego ir añadiendo nuevas funcionalidades al juego mientras los alumnos descubren toda la potencialidad de Python.
Se puede ver un video demostrativo del juego que vamos a crear. Los saltos que se aprecian son debido a la baja calidad de la grabación para que no ocupase demasiado.




En las próximas entradas de este blog, iré creando este comecoco. Por lo pronto, ya puedes ir instalándote Python y Pygame.

jueves, 9 de octubre de 2008

Wink - Graba lo que pasa en pantalla


Wink es un programa gratuito que permite grabar un video en flash de lo que ocurren en pantalla. Esto es útil para crear tutoriales visuales en donde explicamos a los alumnos cómo usar algún tipo de programa. También nos sirve cuando le pedimos a los alumnos que hagan una actividad en el ordenador, como por ejemplo configurar una conexión de red, con esta herramienta los alumnos pueden grabar lo que han hecho y entregarlo, y nosotros podremos revisarlo.
Podemos grabar lo que se muestra en pantalla añadiendo comentarios, configurando el número de fotogramas por segundo, añadiendo botones de pausa,etc.
Un programa muy muy fácil de usar y muy potente. !Pruébalo!

Wink está disponible tanto para Windows como para Linux.

viernes, 26 de septiembre de 2008

ITALC - Una herramienta muy interesante para el aula

ITALC es un programa que además de permitirnos monitorizar lo que hacen los alumnos en sus ordenadores, nos permite que los alumnos vean en sus propias pantallas lo que estamos haciendo en el ordenador del profesor. De esta manera facilita las explicaciones y podemos evitar el uso del proyector que en muchas aulas no lo tenemos o si lo tenemos, no presenta una buena visualización por la luz o dimensiones de la misma.
Además, presenta otras funcionalidades interesantes como:


  1. Permite el bloqueo automático de los ordenadores. Por ejemplo, por si estamos explicando algo y queremos que los alumnos nos presten atención y dejen de trabajar con los ordenadores.

  2. Nos permite dejar a un alumno que desde su ordenador muestren al resto de alumnos lo que está haciendo como si fuera el profesor.

  3. También permite tomar el control remoto de un ordenador.

Y recuerda, ITALC es open source y funciona tanto en Linux como en Windows.

miércoles, 3 de septiembre de 2008

Estándares de competencia en TIC para docentes

Siempre me había preguntado que nivel de competencia deberíamos tener los docentes en el uso de las TIC, Tecnologías de la Información y la Comunicación. Pues bien, me he llevado una gran sorpresa al descubrir que existe una serie de estándares que los recoge, estableciendo niveles y competencias concretas.

Para el docente, tenemos el estándar elaborado por la UNESCO. En este estándar se establecen tres niveles de competencia:
  1. Nociones básicas de TIC. En este nivel, los docentes tienes los conocimientos y habilidades necesarios para un uso efectivo de las TIC.
  2. Profundización del conocimiento. En este segundo nivel, las personas son capaces de usar las TIC para resolver problemas reales.
  3. Generación del conocimiento. En este último nivel, las personas son capaces de generar nuevos conocimientos, de establecer nuevas prácticas educativas, etc.
En cada uno de estos niveles las competencias se encuentra divididas en:  plan de estudios y evaluación, pedagogía, TIC, organización y administración y formación profesional de docentes. En la siguiente imagen se puede ver un esquema de este estándar:
Por ejemplo, en el documento en donde se recoge este estándar. se indica que a nivel de "nociones básicas de TIC", en el marco de pedagogía:
  • I.C.1. Describir cómo la didáctica y las TIC se pueden utilizar para contribuir a que los estudiantes alcancen conocimientos en las asignaturas escolares.
  • I.C.2. Incorporar en los proyectos de clase actividades adecuadas que integren las TIC, a fin de contribuir a que los estudiantes adquieran conocimientos en asignaturas escolares.
  • I.C.3. Utilizar software de presentación multimedia y recursos informáticos para complementar la enseñanza.
Te animo a leer detenidamente este estándar.

jueves, 3 de julio de 2008

Jugando al eXtreme Programming

En esta entrada os propongo una forma muy original y amena de trabajar en clase la metodología de desarrollo eXtreme Programming. La actividad consiste en jugar al XPGame.

La realización de este juego es una actividad muy atractiva en donde podemos además de poner en práctica el ciclo de desarrollo propuesto por extreme programming, reflexionar sobre la importancia de la gestión de requisitos en los proyectos de desarrollo.

XPGame ofrece a los alumnos unas fichas de acciones que deben realizar (storyboards). Las acciones son muy diversas, por ejemplo, conseguir sacar un tres tirando un dado o construir una pirámide de cartas. Cada ficha tiene un valor en puntos diferentes que refleja el valor de negocio para el cliente. El objetivo del juego es conseguir el mayor número de puntos posibles.

El juego se desarrollo siguiendo estos pasos:
1. Cada equipo recibe 12 tarjetas.
2. Lo primero que deben hacer los equipos es estimar la complejidad de las tarjetas.
3. El equipo, simulando a un cliente, escoge las tarjetas con las acciones que van a realizar. Para realizar todas las acciones tiene 180 segundos. El equipo debe definir el orden en que van a intentar hacer las acciones.
4. El equipo realiza de forma ordenada las acciones seleccionadas con anterioridad.
5. Se suma al equipo los puntos de las acciones que han conseguido realizar con éxito.

Se propone repetir este proceso hasta tres veces. Se puede enriquecer el juego, por ejemplo:
1. Durante el paso 4, en donde los equipos están intentando realizar las acciones escogidas, se puede interrumpir el proceso indicando que el cliente ha cambiado sus prioridades con lo que se lleva a cabo cambios en la valoración de las actividades (los puntos asignados a cada tarjeta). Los alumnos pueden decidir reordenar las tarjetas seleccionadas o cambiarlas por otras.
2. Se puede proponer a los alumnos tarjetas con actividades que son imposibles de comprobar que se han realizado éxito. Por ejemplo, solicitar que infle una sopladera con una determinad presión. Con esto, los alumnos ven la importancia de que todos los objetivos marcados deben ser medibles.

lunes, 30 de junio de 2008

Enseñando programación extrema

Desde mi punto de vista, una de las mejores formas de enseñar esta metodología es ponerla en práctica. Como primera actividad en clase, me parece muy interesante realizar y analizar con los alumnos el proceso de desarrollo descrito en el artículo: “Engineer Notebook: An Extreme Programming Episode”. Este articulo narra el desarrollo, empleando extreme programming, de una aplicación muy simple que tiene como objetivo el registrar las anotaciones de partidas de bolos. Se narra como una conversación entre dos amigos a lo largo de la que se produce una metamorfosis que culmina con la aplicación.
La aplicación es desarrollada empleando Java y muy importante, podemos ver el uso de tests, un aspecto clave en el desarrollo de software y que trataré en futuras entradas de este blog.

Programación extrema

La programación extrema, en inglés eXtreme Programming XP, es una metodología de desarrollo de software perteneciente a lo que se conoce como metodologías ágiles de desarrollo de software.

XP se caracteriza por atender rápidamente los posibles cambios de requisitos por parte de los clientes. Para esto, integra al cliente como parte del equipo de desarrollo y dirige el desarrollo a la entrega sucesiva de versiones con valor para el cliente. Es decir, a lo largo del proceso de desarrollo se obtiene versiones funcionales de la aplicación que aporta valor añadido al cliente. Estas versiones no se deben considerar prototipos o versiones betas de la aplicación final, sino versiones acabadas que integran uno o más casos de uso definidos por el cliente.

El ciclo de vida de extreme programming se resume en una serie de iteraciones que siguen el siguiente esquema: Planificación --> diseño --> implementación --> prueba
Una ficha resumen la puedes ver en http://xp123.com/xplor/xp0202/xp-one-page.PDF. Puedes conocer más información acerca de esta metodología en eXtreme Programming.

En próximas entradas de este blog os propongo algunas actividades para trabajar esta metodología en clase.

miércoles, 25 de junio de 2008

JavaCup: Aprende Java jugando al fútbol


Se está celebrando la JavaCup 2008, un torneo de fútbol virtual. Los participantes deben desarrollar un equipo de fútbol usando java como lenguaje de programación. La Web del torneo es http://javacup.javahispano.org/.

Se proporciona un framework en donde los participantes sólo deben programar el comportamiento de los jugadores, estando ya desarrollada toda la parte visual del programa.

En la Web del torneo se proporciona el código del framework, tutoriales y el código de los equipos que participarón en ediciones anteriores.

Se puede aprovechar esta idea para realizar una actividad a nivel de clase con los alumnos en los módulos de programación. Los alumnos deberían desarrollar un equipo cada uno y se podría realizar un torneo interno eligiendo el mejor equipo para participar en la edición anual o recopilar las mejores ideas entre todos los alumnos y confeccionar un equipo que represente a la clase.

jueves, 19 de junio de 2008

VirtualBox la alternativa a VMWare


En muchas actividades es muy útil instalar máquinas virtuales en nuestros sistemas. Por ejemplo, tener en Linux una máquina virtual con Windows Instalada o viceversa. La mayoría de nosotros acostumbramos a usar VMWare, una excelente herramienta pero con el gran inconveniente de ser de pago.
Pues bien, también contamos con una herramienta de software libre que nos ofrece las mismas posibilidades que VMWare. Esta herramienta se llama VirtualBox. Una herramienta gratuita, software libre, y que tiene versiones tanto para Windows como para Linux. !Pruébala!

viernes, 13 de junio de 2008

Guía de software libre

Cuando trabajamos con Software libre una de las cosas más difícil es escoger el proyecto de software libre que mejor se ajuste a nuestras necesidades. Para facilitar este paso y para poder conocer el amplio abanico de posibilidades que tenemos actualmente, podemos consultar la guía FLOSS (Free/Libre Open Source Software). Esta guía se actualiza cada 6 meses.

jueves, 12 de junio de 2008

LOPD - Ley orgánica de protección de datos de carácter personal

Desde mi punto de vista los alumnos que cursan los ciclos de informática deberían estar formados acerca de la LOPD - Ley Orgánica de Protección de datos. Son técnicos que a lo largo de su vida profesional gestionarán sistemas de información que manejarán grandes volúmenes de información de carácter personal. En este marco, deben conocer las medidas de seguridad que son de obligado cumplimiento.
Por este motivo, me gusta añadir en la materia del curso unas actividades para trabajar la LOPD. Para explicar la LOPD me apoyo en la siguiente presentación que os dejo aquí por si os sirve.
Documentación relevante:
  1. Ley Orgánica de Protección de datos de carácter personal de 1999.
  2. Desarrollo de la LOPD de 2007. Desarrolla con más detalle la ley de 1999.
  3. Guía de seguridad. Elaborado por la Agencia de Protección de Datos como plantilla para la elaboración de los documentos de seguridad.
  4. Informe, plan sectorial de oficio a la enseñanza reglada no universitaria, elaborado por la Agencia de protección de datos. Estudio acerca del cumplimiento de la LOPD por centro educativos no universitarios.

miércoles, 11 de junio de 2008

Congreso Nacional Internet en el aula

Vagabundeando por la red me he topado con el Congreso Nacional de Internet en el Aula. Se encuentra abierto desde Abril y finalizará en octubre. Lo que me ha llamado la atención, esque este congreso tiene un congreso presencial en diferentes ciudades y también, un congreso virtual. Pues visto y hecho, me he suscrito a ver si le podemos sacar provecho.

Virtualización de redes

En los dos últimos años he dado el módulo de Redes de Área Local del ciclo de Administración de Sistemas Informáticos. En este módulo, entre otros temas trabajamos con direccionamiento IP, incluyendo tablas de enrutamiento, subnetting, etc.
En mis clases realizamos configuraciones reales de redes empleando los diferentes ordenadores, pero tenía el problema de que no podía plantear configuraciones específicas para cada alumno al contar con recursos limitados. Además, los alumnos no podían practicar estas actividades en sus casas al no contar con los equipos necesarios. Por este motivo, me lance a buscar herramientas que me permitieran simular diferentes redes.
En esta búsqueda he encontrado dos herramientas muy útiles basadas en el software de virtualización UML, User Mode Linux:
  • VNUML. Desarrollada por la Universidad de Madrid. La característica más destacada para mí, es la fácil configuración de las redes a través de un fichero XML.
  • NETKIT. Presenta el mismo funcionamiento que VNUML, contando con la ventaja adicional de una aplicación visual para la configuración de las redes.
La idea es que en un mismo sistema Linux se lanza varias instancias independientes, configurables a través de consola. El efecto, es que hemos rancado diversas máquinas virtuales de Linux.
Su configuración ha sido muy fácil, estando perfectamente documentada. Yo las he probado en Ubuntu 7.04 y Ubuntu 7.10.

Jornada de software libre en la educación y en las empresas

El pasado 4 de Junio organizamos en IES Majada Marcial una jornada de software libre dirigida tanto a profesores y alumnos del centro como personas ajenas al mismo.

Esta jornada fue organizada por el departamento de informática, del que formo parte. Pretendemos con este tipo de jornada el acercar las nuevas tecnologías a toda la comunidad, así como darnos a conocer y publicitar los ciclos formativos de informática de explotación y administración de sistemas informáticos.

La jornada se titulaba "jornada de software libre en la educación y en las empresas". Estando dedicada la mañana al ámbito educativo y por la tarde al empresarial. Durante la misma, se realizaron diferentes ponencias y talleres.

Además del departamento de informática, participaron en esta jornada: La Consejería de Nuevas Tecnologías del Ilmo. Cabildo de Fuerteventura, la Oficina de Software Libre de la Universidad de La Laguna (OSL) , Grupo de Usuarios de Linux de Canarias (GULIC), la asociación de Empresas de Software Libre de Canarias (ESLIC) y la Cámara de Comercio de Industria y Navegación de Fuerteventura.

La jornada se inicio con la inauguración a las 10:00 por parte de Don Antonio Brito, director del centro, Don Andrés Valerón, Consejero de Economía, Hacienda y Nuevas Tecnologías del Ilmo. Cabildo de Fuerteventura y por mí, como profesor del departamento de informática y coordinador de la jornada.

A continuación, se celebró la ponencia “El Software libre, presente y futuro” impartida por Don Pablo Suárez, miembro de OSL. Durante la misma, se definió los principios del software libre y su evolución. En paralelo a esta ponencia, tuvo lugar la ponencia “El software libre en el ámbito profesional” por parte de Don Luis Gonzalo, presidente de ESLIC, dirigida a los alumnos de los ciclos de informática de IES Majada Marcial y IES Gran Tarajal, y a todos los profesionales del sector.

Seguidamente, tuvo lugar la ponencia “Web 2.0 y la educación” realizada por Don Jaime Iván Juanes, profesor de griego IES Schamman. En esta charla, Don Jaime expuso su amplia experiencia en el uso efectivo en sus clases de los servicios incluidos en lo que se conoce universalmente como la Web 2.0.

Desde las 11:20 hasta la 13:10, se realizó un taller práctico de fomento de software libre por parte de Don Luis Méndez, miembro de GULIC, en el que se mostró a los asistentes las numerosas ventajas de usar Linux.

Desde las 13:00 hasta las 14:00, se impartió un taller de Moodle por Don Santiago Galván del departamento de Informática. Moodle permite la realización de cursos a través de internet, siendo una herramienta muy útil tanto para cursos a distancias como apoyo a los cursos presenciales. Este centro cuenta con un servidor Moodle propio, que está siendo usado activamente desde el año 2007, promovido por su departamento de informática.

La jornada se reanudó a las 17:00 con la conferencia “El software libre y las empresas”, realizada por Don Luis Gonzalo de ESLIC. A lo largo de esta conferencia se explico la filosofía del software libre, sus beneficios para toda la comunidad y el marco de negocio de las empresas que trabajan en esta línea.

A las 18:00, tuvo lugar la conferencia “Creación de Empresas” por la Cámara de Comercio de Industria y Navegación de Fuerteventura. En la misma, se explicó los trámites necesarios para la constitución de nuevas empresas y las diferentes ayudas a las que se podrían acoger.

Al mismo tiempo se desarrolló la conferencia “Bardinux, un sistema educativo”, realizada por Don Carlos de la Cruz de la OSL. En la misma, se enseño la distribución de Linux, llamada Bardinux, desarrollada por la OSL para el ámbito universitario.

También, al igual que por la mañana, tuvo lugar un segundo taller de fomento de uso de software libre por parte de Don Luis Méndez.

A las 19:00 se llevó a cabo una mesa redonda en la que se trató diversos temas del software libre como el escaso respaldo por parte de las diversas Administraciones canarias en el uso del software libre, como contraejemplo a otras comunidades como Andalucía o Extremadura.

La jornada se clausuró a las 20:00 por parte de Doña Luisa Dominga, vicedirectora del IES Majada Marcial y por mí.