U2 @ LaPlata: 360 tour

El pasado miercoles tuve la fortuna de asistir al espectacular concierto de U2 en el flamante estadio Unico de la Ciudad de La Plata. El concierto comenzó con Even better than the real thing, título  por demás apropiado para la ocasión. Una suma de diversos factores hizo que el show se ubique entre los mejores que he visto: el carisma de Bono + el despliegue tecnológico + el vínculo con el público + la catarata de éxitos.

Más allá del show, me quedó muy buena impresión del estadio que a diferenca de otros del pais, parece haber sido diseñado no solo para espectualos de futbol. Uno de los detalles interesantes que demuestra esto, es que el césped es desmontabl, para el recital había sido desmontado. Esto parace una idea excelente para preservar el estado del césped, pero al mismo tiempo resulta bastante incómodo para los «pogueros», ya que hacer pogo sobre el cemento es durísimo (ya en el segundo tema mis rodillas no daban más, :-().

Otro caracterśtica del estadio es que todas las tribunas están techadas. Al mismo tiempo las tribunas cuentan butacas que a la distancia parecian muy cómodas. La ubicación del estadio y el diseño de los accesos facilita el ingreso y la desconcentración.

El único warning es para aquellos asistentes provenientes desde Buenos Aires y alrededores que lleguen a La Plata vía autopista: tengan en cuenta que la autopista es un cuello de botella, asi que manejense con tiempo.

Resumiendo el post en una frase: un show fantástico en un estadio excelente.

Informática en la UNLP

La semana pasada estuve por ciertas cuestiones personales en las instalaciones de la Universidad Nacional de La Plata, particularmente en la Facultad de Informática. Y he aquí la primera cuestión a destacar: en la gran mayoría de las universidades argentinas las carreras de informática/computación pertenecen a las facultades de ciencias exactas o ingeniería, pero aquí tienen una facultad de informática. Esta facultad ofrece 4 carreras de grado:

  • Analista programador universitario: carrera corta de 3 años (al menos en el plan de estudio, ja!)
  • Licenciatura en informática: enfocada en cuestiones más científicas
  • Licenciatura en sistemas: enfocada en sistemas de información e ingeniería de software
  • Ingeniería en computación: de perfil mixto software + hardware

Por lo que vi también tiene una interesante oferta de carreras de posgrado constituida por 4 especializaciones, 4 masters y un doctorado en ciencias informáticas. Por último me lleve una muy buena impresión de las instalaciones, el edificio parece muy nuevo, está en muy buenas condiciones y la ubicación es ideal: a metros del bosque pero no muy distante del centro de la ciudad.

Update: la carrera de Analista, no es de grado porque su duración es inferior a 4 años.

Comienzo de clases en Algo3

Ya van dos semanas de clases y el cuatrimestre pinta muy prometedor. Para este cuatrimestre el equipo docente del curso 1 está conformado por: Pablo, GabiF, GabiD, Victoria y quien escribe.

La clase 1 la comenzamos haciendo la dinámica de la telaraña, haciendo que cada uno se presente diciendo: nombre, materias que cursa en el cuatrimestre y lenguajes de programación que sabe (obviamente los docentes también nos presentamos). Luego de eso, Pablo hizo la tradicional presentación de la material, comentado la dinámica de las clases, el régimen de cursada y las herramientas de trabajo (página web, lista de correo, etc). Finalmente cerramos la clase con la introducción a Smalltalk (Pharo, para ser más precisos) y la presentación del TP0.

La clase 2 comenzó con una breve explicación de algunas particularidades de Pharo y luego estuvo enfocada en el juego de rol de la máquina de café. Este juego tiene como objetivo entender que los objetos cumplen su objetivo a partir del envio de mensajes a otros objetos. Gabriel se encargó de  facilitar la dinámica del juego que duró unos 25 minutos. Para incentivar la participación de los alumnos (ya que el juego requiere de 7 alumnos) decidimos presentar la «lista de alumnos participativos», la idea es que en esta lista anotamos a los alumnos que participan en las clases y a la hora de definir las notas, aquellos alumnos participativos obtiene una consideración especial (puntualmente si la nota es decimal, la redondeamos directamente hacia arriba: si la nota es 6.1, automáticamente es redondeada a 7). A grandes rasgos el juego consiste en que cada alumno participante representa un objeto y como tal, recibe mensajes y tiene que colaborar con otros objetos (enviando mensajes, claro está) para responder a los mensajes recibidos.Luego del juego decidimos codificar en Smalltalk cada una de clases involucradas, para lo cual pedimos otros tantos alumnos volutarios. Esto nos una hora y media, ya que durante la codificación surgieron algunas dudas de diseño  que promovieron el debate. En paralelo a todo esto, el resto del equipo docente corregia los TP0. Al final de la clase entregamos TODOS los trabajos corregidos, excelente!.

Realmente estoy muy contento con el nivel de participación de los alumnos, si sigue así, creo que vamos a tener clases muy entretenidas.

Recursos para el profesional independiente (freelancer)

En los últimos años me ha tentado en más de una ocasión ejercer mi profesión de manera independiente, pero por diversos motivos nunca me decidí a hacerlo. Más allá de eso quiero compartir algunos recursos que revisé en esas ocaciones y que me parecieron muy útiles particularmente para profesionales independientes.

Empiezo por el libro de Miles Burke: The Principles Of Successful Freelancing. Esta obra toca una gran diversidad de temas que van desde las consideraciones para decidirse a trabajar independiente, hasta work-life balance, pasando por consejos financieros, calidad de servicio y configuración de la oficina hogareña. Un recurso muy útil y entretenido para leer.

Otro recurso valiosísimo es la técnica del Pomodoro. Sin entrar en mayor detalle les digo que esta técnica ayuda administrar mejor el tiempo e incrementar la productuvidad.

Una lectura que también me parece apropiada y no solo para independientes es el best seller: Los 7 hábitos de la gente altamente efectiva.

Por último creo que Linkedin es una herramienta clave para promocionarse y hacer contactos, dos puntos a mi entender importantísimos para todo freelancer.

Bien, esto es todo lo que tenia por decir a pesar de nuncar abler trabajado independiente, pero bue, es lo que hay.

Se aceptan sugerencias.

El periodismo y el vaso medio vacio

No estoy seguro si el título de este post es el más apropiado pero eso no es lo importante. El punto es que ultimamente siento que gran parte del periodismo argentino tiene una tendencia a ver siempre el vaso medio vacio, lo cual me resulta MUY molesto.

Dos ejemplos concretos los encontré esta mañana mientras veía el portal de noticias del diario de La Nacion donde encontré una nota sobre un raking mundial de universidades y otra sobre la producción de conocimiento en América latina. Si uno leyera las notas sin leer el título y después intentara titularlas, sin duda encontraría títulos mucho menos negativos que los elegidos por La Nación: «Las universidades de la región, ausentes en un ranking mundial» y «América latina no produce conocimiento».

Me parece lamentable la tendencia de varios medios argentinos de alcance nacional de ver siempre el vaso medio y vacio y en consecuencia transmitir a la sociedad una visión negativa de los hechos.

Say no more.

GitHub quickstart

Hace un tiempo que estoy colaborando en un proyecto open source que recientemente fue migrado de SVN a GIT, particularmente a GitHub y dado que algunos miembros del equipo del proyecto no estan familiarizados con esta herramienta he decidido escribir es post orientativo. GIT a diferencia de SVN es un sistema de control de versiones NO centralizado (SVN es centralizado), este es un detalle interesante, pero en este momento no voy a profundizar al respecto, sino que voy a pasar directamente a los pasos para comenzar a trabajar con esta herramienta.

Aclaración: si bien hay más de una forma de trabajar con Github, yo voy a enfocarme en la que considero más simple.

En primer lugar vamos a github para crear

image

Dado que en este caso vamos a trabajar en un proyecto open source bastará con seleccionar la opción de cuenta gratuita. Una vez que tengamos nuestra cuenta, nos comunicaremos con el administrador del proyecto en que deseamos colaborar y pedirle que nos otorgue acceso de escritura.

image

Bien, ahora vamos a tener que instalarnos un cliente de git para poder conectarnos y trabajar. Aqui hay una lista de clientes para todos los gustos, personalmente les recomiendo un cliente de consola, a mi me ha dado más exito que los clientes de ventanas. Una vez instalado el cliente vamos a necesitar generar una clave RSA que es lo que Git utiliza para autenticar a los usuarios. Esto es muy simple (al menos con el cliente de consola, ja!) en está página de github van  encontrar las instrucción para generar su clave, pero siendo más directo, hagan esto: abren la consola Git, se posicionan en la carperta c:\users\{tuusuario}\.ssh (si no existe la crean) y tipean:

ssh-keygen -t rsa –C “{tu cuenta de mail que usaste para registrarte en github}”

Cuando les pida nombre de archivo, presionen enter y se utilizarán los nombres default. Si gustan pueden poner un passphrase, pero es opcional. Esto va a generar dos archivos: uno con la clave pública para subir a github (id_rsa.pub) y otro con la clave privada que NUNCA deberán compartir (id_rsa).

image

El siguiente paso es configurar nuestro client local indicando nuestro nombre y direccion de correo. Para ello debemos ejercutar las siguientes dos lineas:

git config —global user.name «{tu nombre de usuario}»

git config –global user.email {tu correo}

Ahora que ya tenemos nuestro par de claves, volvemos a github y subimos nuestra clave pública. Vamos a SSH Public Keys\ Add another public key y pegamos el contenido del archivo id_rsa.pub (mucho cuidado de no agregar ningún caracter adicional).

image

image

Con esto ya estamos en condiciones de dirigimos al repositorio del proyecto en que queremos trabajar. Claro, antes de esto deberiamos asegurarnos que el administrador del proyecto nos haya otorgado permiso de escritura en el repositorio. Si es asi, entonces veremos en la página del repositorio la URL de read+write.

image

Copiamos la url de read+write y vamos a la consola git. Nos dirigimos al directorio local donde crearemos nuestro repositorio local y ejecutamos la sentencia para crearlo:

git clone {url que copiamos de github}

image

Si todo salió bien, ya tenemos nuestro repositorio local y podemos empezar a trabajar. Un detalle interesante a tener en cuenta cuando trabajamos con git es que es una herramienta no centralizada de control de versiones. Esto significa que cada miembro cuenta con una copia local completa de todo el repositorio. Para trabajar sincronizadamente, uno de estos repositorios es designado como master. El master, en cierto modo puede ver como el repositorio central de un SVN, a lo interente de git es que si el master se cae, facilmente podemos designar otro y seguir trabajando.

Dicho esto, en general nuestro flujo de trabajo será:

  1. Actualizar nuestro repositorio local y nuestra copia de trabajo obteniendo la última versión desde el repositorio master. En términos concretos de git esto es ejecutar un git pull.
  2. Realizar nuestro trabajo sobre el contenido y comitearlo. En términos de git es ejecutar dos comando: git add <arcihvo modificado/agregado>  y git commit. El primero de estos comando «agrega» el archivo indicado a la lista de archivos del próximo commit. El segundo es el commit que  “copia” nuestras modificaciones desde nuestra copia de trabajo a nuestro repositorio local.
  3. Mezclar nuestros cambios con el repositorio master, esto es: ejecutar un git pull para obtener la última version desde el repositorio master. Si el pull es exitoso, entonces nuestro repositorio contendrá la última versión (lo que estaba en el repositorio master + nuestros cambios)
  4. Actualizar el repositorio master con nuestro contenido, lo cual se hace ejecutando un git push.

Creo que no olvido nada, si bien hay muchas cosas más por decir esto deberia ser suficiente para las necesidades de mi equipo de proyecto.

Le doy las gracias al groso de  Dario Seminara, evangelizador de GIT, por revisar este post y les recomiendo que si gustan aprender más de Git, no duden en visitar el blog de Dario.

Espero les resulte útil.

Técnicas para enseñar programación

Hace ya un largo tiempo que vengo leyendo sobre algunas dinámicas interactivas de programación como los coding dojos, pero recien hace un par de semanas tuve la oportunidad de particitar en uno. Dicha actividad se desarrolló en el contexto de los encuentros mensuales de la comunidad ágil de Buenos Aires y estuvo coordinado por Adrian Eidelman (pueden ver el video en code&&beyond). La actividad me resultó muy amena y me ayudó a confirmar una sospecha que tenia: definitivamente este tipo de dinámicas son una excelente herramienta para a enseñar a programar. Es por esto que voy a intentar incoporarlas a las materias que voy a dictar este cuatrimestre.

La técnica del dojo viene del mundo de las artes marciales, donde los practicantes suelen realizar ejercicios/movimientos en forma repetiva para dominar plenamente una técnica. Esta situación es fácilmente extrapolable a cualquier otra disciplina deportiva: todo deportista profesional mejora en base al entrenamiento. ¿cómo podríamos entonces llevar esta idea al ámbito del software? Si lo pensamos con detenimiento en general los programadores nos entrenamos dentro de los proyectos, es como si un futbolista no entrenara durante la semana y fuera directamente al partido el domingo . Alguien podría argumentar que en realidad los programadores nos entrenamos cuando estudiamos, pero en realidad eso seria como la etapa en la que un futbolista aprende las reglas del deporte y la técnica básica para patear un balón o en el caso de un arquero como armar la barrera para un tiro libre.

Un coding dojo es una reunión en la que programadores se juntan para trabajar en un desafio de programación, en cierto modo podria decirse que es un equivalente al entrenamiento de un deportista. Existen diversas variaciones en la dinámica, una llamada randori, consiste en trabajar  con una única computadora y un proyector, la solución es implementada  por pares de programadores que van rotando por la máquina según algún criterio predefinido (porque ejemplo cada 7 minutos).

Otra variante del dojo es la denominada  kata, en la cual un programador toma la máquina conectada al proyector y resuelve el desafio mientras los otro programadores lo observan atentamente  preguntando cualquier detalle que no les quede claro. Una vez finalizado, una programador de la audiencia toma la máquina y repitiendo los pasos previamente observados resuelve nuevamente el desafio comenzando desde cero.

Este post de Code&Beyond tiene varios recursos al respecto de esta técnica y explica la idea con más profundidad. También pueden leer este post de Dave Thomas, uno de los principales responsable de la popularización de esta dinámica.

Espero lo disfruten y prometo en un futuro compatir los resultados de la aplicación de esto en mi ámbito académico.

Eventos Argentina 2011

El año recién está comenzando y ya tengo agendados algunos eventos que se van a desarrollar en Argentina a los que planeo asistir.

Agile Open Tour: en el contexto de la comunidad ágil argentina, por tercer año consecutivo vamos ejecutar este tour afrontando el desafio de agregar más estaciones al tour. A las ya clásicas estaciones (BsAs, La Plata, Tandil, Bahía Blanca, Rosario, Mar del Plata y Córdoba) queremos agregar algunas nuevas como San Luis, Mendoza, Tucuman y Resistencia. Como siempre la información relacionada a estos eventos la iremos publicando en http://www.agiles.org/agile-open-tour.

JAIIO 40: está nueva edición de las Jornadas Argentinas de Informática organizadas conjuntamente por Sadio y la UTN-Córdoba se llevarán a cabo entre el 29 de agosto de y 2 de septiembre. Ya está abierta la convocatoria para la presentación de trabajo y con Ariel hemos dedido que vamos a presentar un paper. Más información en: http://www.40jaiio.org.ar/.

Copa América: se jugará en Argentina entre el 1 y el 24 de Julio. Las sedes elegidas son: Jujuy, Salta, Córdoba, Santa Fé, San Juan, Mendoza, Buenos Aires y La Plata. El partido inagural será en el estadio único de La Plata y se disputará entre las selecciones de Argentina y Bolivia. Más información en http://www.ca2011.com.

FIBA Americas: esta competencia que otorga 2 plazas para los juegos olimpicos del año próximo se desarrollará en Mar del Plata entre el 30 de agosto y el 11 de septiembre. Un condimento adicional de esta competencia es que seguramente será una de las últimas competencias para varios de los jugadores de la denominada generación dorada. Será una gran ocasión para disfrutar del juego del enorme Liufa Scola, el afilado Lancha Delfino, el eterno Leo Gutierrez y el rústico pivote Román Gonzalez. Ah! y posiblemente también esten Ginobili y Nocioni, pero por las dudas a no hacerse muchas ilusiones ya que en ocasiones anteriores nos dejaron con las ganas. Más información el FibaAmericas.

Agiles 2011: la cuarta edición Jornadas Latinoamericanas de Metodologias Agiles, se llevará a cabo en Buenos Aires del 11 al 13 de octubre. Más información en: http://agiles2011.agiles.org/

Por útlimo algunos otros eventos a los que me gustaría asistir pero de los que aún no tengo certeza de su realización son: Smalltalks, PyCon y CodeCamp.

Game development, episode #2: some more concepts

Before drilling down into technological stuff I want to share some basic concepts.

Collision detection is a very common concern in games. It consists on determining whether two objects have come into contact with one another. In games, this is necessary in order to make decisions, for example, in games like Mario Bros., it is important to know whether a Mario has collide with a tortoise or a coin. In order to detect collisions, each object  has a bounding box, that is an approximation of  the object’s surface.

sprite is a a small bitmap image (or set of images) used to visually represent . Another kind of bitmap is a tile, which is usually used for background maps.

During the drawing process all the sprites and tiles are drawn incrementally into a buffer and then this buffer is dump at once into the low level buffer that will impact on the screen. This technique es called double buffering.

To be continue…

Sobre la plataforma para materias de programación: nuestra implementación

Hace un tiempo publiqué en este mismo blog una propuesta de trabajo profesional sobre una plataforma para materias de programación. A próposito de la misma me contactaron varias personas, no con la intención de hacer un trabajo profesional sobre esa temática (lo cual era mi intención al publicar el post) sino con la intención de ayudarme a resolver la problemática planteada. Por suerte en el caso de algo3 tenemos resulta casi toda la problemática, de todas formas agradezco a todos aquellos que me contactaron y voy a intentar reunirme con cada uno de ellos para compartir experiencias y ver de enriquecer la plataforma.

Bien, hechas las aclaraciones preliminares, en las siguientes líneas voy a describir sintéticamente como es que hemos resuelto la problemática planteada en el post original.

  • Website: está hosteado en Fiuba. Es un sitio estático, nada de scripts server-side, solo html+js+css. Las actualizaciones las realizamos manualmente vía FTP. Recientemente agregamos un control jquery que muestra las publicaciones de nuestra cuenta de twitter (@algo3fiuba).
  • Listas de correo: este servicio también es provisto por Fiuba.
  • Repositorio: este componente lo tenemos implementado con uno de los tantos servicios disponibles en la actualidad en internet. En particular lo que tiene ver con el framework que proveemos a los alumnos (titiritero) está hosteado en Google Code, que adicionalmente al SVN brinda un issue tracker y una wiki. Para el uso interno de la cátedra (acceso privado) usamos Assembla. En cuanto a los alumnos, para el desarrollo de sus trabajos les recomendamos el uso de GoogleCode o similar.
  • En cuanto al listado de alumnos y su seguimento a lo largo de la cursada, usamos una hoja de cálculo.
  • En cuanto al build server, la herramienta que utilizamos en la actualidad es TeamCity. Inicialmente hosteado en un servidor personal y desde hace aproximadamente un mes, hosteado por los amigos de CodeBetter que brindan el servicio gratuitamente para proyectos open source.

Desde el punto de vista de los alumnos creo que esta plataforma está excelente. Desde el punto de vista del equipo docente, la principal falencia es la falta de integración entre los distintos componentes de la plataforma: para cada una de uno de estos componentes tenemos credenciales de acceso distintas.