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.

Balance 2010

Otro año llega a su fin, pero no es simplemente un año más para mi, 2010 seguramente se convienta en un año bisagra en mi vida tanto en el ámbito personal como en el profesional. Quienes son habituales lectores de este blog estan al tanto de mi experiencia en el INRIA y si bien esa fue una de las cosas más importantes de este año, no fue la única. Entre otros hechos destacados no quiero dejar de mencionar:

  • El paper que escribí en conjunto con Shaggy y que fue aceptado en el ASSE 2010.
  • Mis presentaciones en ESUG 2010 y Smalltalks 2010.
  • La titularización en concurso de mi cargo de ayudante de primera en el área de programación avanzada en Fiuba.
  • La consolidación del régimen de cursada en Algo3.
  • El crecimiento de este blog

Respecto de este último punto le doy las gracias a todos los lectores de este espacio y aprovecho la ocasión para compartir algunas estadísticas:

  • Durante 2010 escribí 66 posts , haciendo un total de 198 publicaciones en el blog
  • El número total de visitas durante 2010 fue aproximadamente 7000, duplicando el número de visitas del año anterior (aproximadamente 3200)
  • El día de más visitas fue el 12 de agosto con 143 visitas, es curioso que la entrada que publiqué ese día poco que tiene que ver con la temática central del blog (https://nicopaez.wordpress.com/2010/08/12/escribir-leer-escribir/)

Resumiendo,  el 2010 fue un gran año para mi y lo termino con muchas expectativas para el 2011, pero esto es tema otro post.  Por lo tanto amigos, desde esta forma cierro el año, ojala sus balances también sean positivos y les deseo comiencen muy bien el 2011.