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.

Otro argumento por Pharo

Esta mañana estaba leyendo la lista de correo de Pharo y encontré un mail de Stef. Duccase sobre la visión de Pharo, transcribo algunos de los párrafos que me parecen importantes.

«Some days ago we were chatting with igor and he made an interesting remark about a kind of hidden philosophy
behind pharo: the idea that we systematically want to make the system better.
In fact I realized that what we are doing is to make a system nice, robust and powerful so that everybody can use
to realize their goals. But we want to have a system where not only smart guys can manage to do something with it but also less talented people…»

«…I want a system that let me learn from itself. I think that lot of things fall naturally in place from this vision (documentation, oo practices – not having car inheriting from wheel, tests comments, adequate abstractions, modularity). I want a system that everybody can nicely build his own software.
So in short I want pharo to be like a nice garden with greenhouses for building new garden with tools versus a jungle where only skilled adventurers can make it through.»

Totalmente de acuerdo. Y esto me lleva a pretuntarte: ¿sabes tu cual es la visión que tienen los createdores de tu lenguaje de desarrollo preferido?

¿Por qué Pharo?

A la hora de trabajar con Smalltalk uno debe elegir algún dialecto al igual que al trabajar con Java uno debe de elegir algún IDE. El tema con Smalltalk es que el dialecto es algo mucho más relevante que el IDE, pues en la mayoría de los casos el dialecto determina no solo el IDE a utilizar sino que además determina entre otras la máquina virtual en la cual se ejecutará nuestra aplicación. En la actualidad existe una interesente variedad de dialectos entre los que se destacan: VisualWorks, Visual Age, GNU-Smalltalk, Dolphin, Squeak y Pharo.

Mi elección personal es Pharo, y en los siguientes párrafos voy exponer mis motivos.

Licencia

Pharo es gratuito y de código abierto, en particular es desarrollado bajo licencia MIT, lo cual otorga una gran libertad.

Comunidad

Sin duda es una de las comunidades más activas y es definitivamente la más activa de las que participo. Por la lista del proyecto pasan más de 60 mails diarios. Para una herramienta de desarrollo (sea IDE, framework, compilador, etc) la comunidad es clave y más aún en el caso de iniciativas código abierto. Adicionalmente es una comunidad muy abierta, todo el mundo puede commitear fixes y todas la preguntas son contestadas en la lista de correo.

Experiencia de usuario

Comenzando por la super cool interface de usuario, el logo RE-copado y siguiendo por las infinitas posibilidades de personalización que ofrece, no conozco otro IDE tan «feliz para el programador» (es cierto, este argumento es muuyyyy subjetivo, pero no deja de ser un argumento).

¿y todo es color de rosa?

Bueno, casi. Hay algunas funcionalidades que por momentos se tornan un poquitin inestable, pero creo que se debe a todas las yerbas particulares que le he agregado a mi imagen.

¡¡¡Aguante Pharo!!!

Propuesta de trabajo profesional: plataforma de identidad unificada

En primer lugar debo dar parte de los créditos por esta idea a SebaD y FedeBo, gracias muchachos!

Esta es una problemática muy común de las organizaciones en la actualidad y como tal es una temática excelente para un trabajo profesional. Voy a dar una idea abstracta de muy alto nivel.

Sin ir más lejos tomemos como organización ejemplo la misma Fiuba y paremonos en el lugar del alumno. Como alumnos utilizamos varios sistemas provistos por la facultad como por ejemplo: el correo eletrónico (@fi.uba.ar), el sistema de inscripción a materias, y el repositorio personal (FTP). Para cada uno de estos sistemas, cada alumno tiene credenciales de acceso distintas.

Bien, la idea del trabajo es resolver esta problemática de manera tal que los alumnos puedan usar las mismas credenciales para acceder a los N sistemas de la facultad y contar con una expeciencia de Single sign-on. Obviamente la solución debería hacer de algunos de los procolos existentes para dicha problemática.

Si bien mi ejemplo está basado en Fiuba el mismo aplica a cualquier organización.

En cuanto al alcance del trabajo, debería contemplarse:

  • Desarrollo de la solución
    • Análisis de la problemática
    • Estudio de posibles soluciones y tecnologias disponibles
    • Diseño de la solución
    • Construcción de la solución
  • Puesta en marcha
    • Guia de despligue (y despliegue propiamente dicho, de ser posible)
    • Plan de migración y comunicación a usuarios
    • Plan de backup
    • Guia para la integración de nuevas aplicaciones
    • Guia de operaciones

Como siempre, si hay algún interesado contacteme por mail y los charlamos con mayor detalle.

Propuesta de trabajo profesional: plataforma para materias de programación

En estos últimos dias he estado trabajando con la infraestructura de Algo3. Actualmente esta infraestructura está constituida por un conjunto de herramientas online “atadas con alambre”. Esto me parece constituye una interesante oportunidad para aquellos alumnos de Fiuba en busca de un tema de trabajo profesional. A continuación voy a describir la visión de lo que como docente que gustaría tener como infraestructura.

En primer lugar un aclaración de criterio: como docente mi objetivo es que los alumnos aprendan y para ello suelo hacer uso de todas las herramientas que tengo a mi alcance. Hecha esta aclaración, comencemos con algunos requerimientos de muy alto nivel:

  • Quiero contar con un website al que se acceda desde el website de la facultad con la url estándar para materias. Esto responde a una cuestion de imagen institucional. Quiero que el website muestre las últimas entradas de twiteer de la cuenta de la materia.
  • Quiero contar con un sistema de versionamiento que me permita administrar todo el contenido que vamos generando en la cátedra mientras lo vamos generando (siendo directo quiero un SVN o similar con acceso solo para docentes).
  • Quiero contar con un builder server que me permita implementar integración continua con código almacenado en distintos repositorios.
  • Quiero contar con una lista de correo para los alumnos
  • Quiero contar con una lista de correo para los docentes
  • Quiero una aplicación para administrar las notas de los alumnos a lo largo del cuatrismestre.
  • Por último quiero una aplicación para poder administrar en forma unificada todo lo anteriormente mencionado.

Ahora algunos requerimientos a nivel de implementación.

  • No es necesario que todo esto sea construido, pueden utilizarse aplicaciones existentes, pero deben ser de uso gratuito.
  • En caso de construirse algo, debe ser bajo licencia open source
  • El acceso al sistema unificado debe funcionar con federando con alguno de los protocolos existentes (SAML, OpenID, etc)
  • Toda la información manejada por el sistema debe guardarse históricamente de manera de poder acceder en línea al menos a registros de 5 cuatrimestres anteriores.

Bueno, creo que esto está bien como idea preliminar. Algunos de los puntos mencionados ya cuentan con una implementación provista por la facultad y tal vez algunos otros también puedan ser provistos por la facultad, pero desconozco si actualmente si Fiuba tiene la posibilidad de brindarlos. Una aclaración más: nada de esto está validado formalmente con las autoridades de la facultad, es solo una idea mia que me parece puede resultar interesante.

Si hay algún interesado no dude en contactarme.

Game development, episode #1: the gameloop

I suspect that most of the readers of this blog are programmers, so I must start by saying that game development is a broad activity that includes several areas and not only the programming. Of course that I am a programmer so the focus on this series will be programming but I will also try to provide some resources related to the other activities. So, after this brief comment it’s time to switch to the main topic of this post: the gameloop.

From the programming point of view the main component of any game is the gameloop. This loop performs several tasks that can vary depending on the platform your game run on but conceptually these tasks can be summarized in 2:  execute game logic and drawing.

Of course we can drill down into these tasks and get a more detailed game loop like the following:

while ( not gameover and user not exits)
{
  process user input
  execute AI
  resolve collisions
  draw graphics
  play sounds
}

The gameloop is main component of any game but not the only one, there are some other components that are not part of the game loop: stuff like the game menu and the settings screen among others.

Sobre el mercado offshore de desarrollo de software y otras yerbas

Hace unos dias por la lista de docente de algo3 me llegó el link a este artículo sobre la industrialización del software.

Comparto varios de los puntos expuestos pero quisiera agregar 2 comentarios al respecto.

Me da la impresion que el autor piensa que TODOS los trabajores en sistemas tienen que ser ingenieros (o contar con una formacion universitaria de 5+ años) lo cual para mi es una gran falacia. Es como si pretendieramos que para construir edificios TODOS fueran ingenieros civiles. Perfectamente se puede construir software respetable con gente de una formación más corta, por ejemplo la Universidad Nacional de Quilmes dicta una Tecnicatura Universitaria en Programación Informática, la cual tiene una duración de  3 años.
En lo que respecta a la situación del mercado y la posibilidades como centro de desarrollo offshore, entiendo que en Argentina el contexto es distinto:
  • Desde Argentina tenemos la ventaja de estar en la misma zona horaria que USA, cosa que no ocurre con Europa ni Asia
  • Culturalmente estamos mucho más cercanos a USA que Asia.
  • A diferencia de lo que algunos puedan pensar creo que a nivel costos no representamos una alternativa interesante. Creo que ni remotamente podemos competir con India, y en algunos casos tampoco con Europa. Donde trabajo actualmente exportamos más del 90% de nuestra producción a USA y manejamos precios internacionales con lo cual NO somos «baratos».
  • De más está decir que creo que técnicamente no tenemos nada que envidiar ni a Europa ni a Asia.
Resumiendo: si bien India puede ofrecer mejores precios, desde Argentina tenemos la ventaja de la cercania cultural y del horario.  Y en cuanto a Europa también tenemos la ventaja del horario y en algunos casos del precio.
Entonces, si queremos «ganar» el mercado offshore, no podemos descuidar la calidad, ese el valor agregado que nos puede posicionar mejor respecto de la competencia internacional.

Juan @ AgilesBaires

¿Llegará el día en que escuche a una presentación de Juan y no aprenda nada? No lo sé, pero lo veo difícil. El martes tuve agrado de asistir al encuentro mensual de comunidad Agiles@ Buenos Aires donde Juan dió una presentación titulada: ¿Existe «la mejor manera» de probar?. Simplemente excelente: no solo la presentación fue muy buena sino que también me resultó enriquecedora la ronda de preguntas y respuestas.

Otro punto para destacar es la importante cantidad de asistentes (muchos de ellos primerizos en estos encuentros) sobre considerando que estamos en pleno período de vacaciones.

La sesión fue grabada, con lo cual dentro de un tiempo seguramente este disponible en el blog de Juan o en el sitio de comunidad, pero mientras tanto pueden leer este blogpost de Juan que resume lo presentado.

Aquí les dejo algunas fotos del evento.

New series: game development

In a while I will start working on a new project related to game development and I thought that it was a good opportunity to write some stuff about it.

I have never been involved in commercial games development, but I have background on the topic. I been teaching object-oriented programming at Fiuba and most of the programming practices are related to games, because they provide very good scenarios to apply may OO concepts.  At the same time I have also been involved in the development of a simple framework to create loop-based games called titiritero and that is used by our students to perform their programming practices. And of course I have also implemented my own games, but that was a long time ago (I remember I used Delphi 4 and C++).

So, let’s start by setting the expectation so you can decide to continue reading or not: along this series of post I will write about development of simple loop-based games which covers most of the games that you can currently find in mobile devices. I will share some basic concepts that you can apply no matter which technology you use for the implementation. Regarding the implementation, I will focus on Microsoft technologies and particularly in XNA Game Studio.

From now on, you will find all articles in this series under the tag gameDevelopment.

Correo electrónico

Durante el último año he concentrado la administración de mis casillas de correo electrónico en Gmail. Esta decisión estuvo inicialmente motivada por 3 excelentes funcionalidades provistas por esta herramienta:

  • El filtrado de correo basura
  • La forma de visualización de las conversaciones, lo cual me parece fundamental cuando uno está subscripto a lista de discusión.
  • El manejo de etiquetas para la clasificación de correos

Al mismo tiempo, hay algunas otras funcionalidades que también me resultan muy útiles como la integración del mensajero GTalk en la misma interface, el manejo de la libreta de direcciones y varias extensiones disponibles en la parte de Labs.

Pero más allá de estas bondades hay dos casos de uso que aún no logro resolver de manera suficientemente satisfactoria:

  1. La redacción de correos con formato rico. O sea, si bien la interface de GMail provee la posibilidad de utilizar HTML, la interface tiene varias limitaciones por ejemplo para embeber imágenes en el mail.
  2. El trabajo offline

Respecto de (1), la solución podría pasar el uso de un cliente desktop de correo. En este sentido, sin duda el Outlook es la herramienta más calificada para redacción de contenido rico, pero lamentablemente es una herramienta paga y NO disponible para plataforma Linux. Es por ello que después de evaluar distintas alternativas he optado por utilizar Thunderbird y la verdad es que estoy muy conforme. Este cliente, cuenta con algunas extensiones de integración con GMail que proveen una excelente experiencia de usuario:

  • Zindus: esta extensión permite sincronizar la libreta de contactos de Thurderbird con los contactos de GMail.
  • Sunbird: agrega a Thurderbird la capacidad de manejo de calendarios.
  • Gdata Provider: permite visualizar en Thunderbird calendarios de GMail.

Respecto de (2), una posible solución sería configurar el cliente de correo para funcionar con protocolo POP, pero por diversas cuestiones está estrategia nunca me resultó cómoda feliz y es por eso que actualmente uso IMAP.

Resumiendo: en los que respecta al correo electrónico actualmente uso GMail como plataforma unificada de correo y Thunderbird + extensiones.