Encendí la luz y me encontré dos hobbits en el sillón…

¡Que buena frase para comenzar un libro! Lástima que estoy lejos de escribirlo. Por el momento sigo leyendo y en este post voy comentar algunos libros que leí durante este 2011.

Resulta que esta semana terminé de leer Juego de Tronos. Simplemente sin palabras, muy bueno. Tal vez hayan oído hablar de esta obra a partir de una serie de HBO que lleva el mismo nombre y que está basada en este libro. Yo me crucé con este libro al año pasado cuando estuve por Barcelona. Resulta que andaba buscando Leyendas de la Drangonlance (obra que no había podido conseguir en Argentina) y un amigo español me recomendó una librería donde podría conseguirlas. Efectivamente fue así, terrible librería, quedé deslumbrado con el tamaño y el tipo de obras que tenia. Me compré los 3 tomos de las leyendas y de paso le pregunté al vendedor que otro libro de estilo similar me podría recomendar. El vendedor me hizo tres recomendaciones:

  • Otros libros de la Dragonlance, que los descarté pues ya tenia bastante de Dragonlance y al mismo tiempo DiegoF me había dicho que con leer las Crónicas (que ya las había leido) y las Leyendas era suficiente, pues el resto era de otros autores y no tenia la misma calidad.
  • La saga del elfo oscuro, este me resultó muy interesante y estuve a punto de comprarlo, pero recordaba haberlo visto en Buenos Aires asi que no tenía sentido comprarlo allí.
  • Juego de Tronos, el titulo no prometía demasiado, pero la portada si, un hombre con una espada y un lobo. Eso sumado a la descripción del vendedor y el tamaño reducido de la edición de bolsillo, fueron suficiente para convencerme.

Así fue como llegué a Juego de Tronos, pero si bien el libro lo tengo desde Septiembre de 2010, recién lo empecé a leer cuando escuché el anuncio de la serie de HBO. Este libro es parte de una Saga y finalizar te deja a medio camino pues la historia no se resuelve. Por lo que estuve averiguando el siguiente libro de la saga (Choque de Reyes) llegará a Argentina para marzo de 2012.

Entre las otras obras que leí este año están (excluyendo aquellas relacionadas a mi profesión):

  • Fundación e Imperio y Segunda Fundación, ambos de la Trilogia de la Fundación, de Isaac Asimov, excelentes, llegué a esto por recomendación de ManuelT. Sin duda clásicos obligados de la ciencia ficción.
  • Leyendas de la Dragonlance (1 y 2), algo ya mencioné, muy buenas. Creo que es una lectura recomendada para todo aquel que le haya gustado la onda del Señor de los Anillos, pero temo que primero habría que Las Crónicas.

Resumiendo leí 5 libros, y me todos me han resultado muy buenos. Ayer comencé a leer el tercer y último libro de las leyendas.

En 1 mes les cuento que onda.

Sinatra Modular Applications with Ruby 1.9

Disclaimer: what I write here is something that is working for me, but I am not an expert, so I cannot declare this to be the best solution.

I am working on a small application that I know it will grow, so the traditional Sinatra application could be a mess when I have more than 10 routes.

So the strategy I have chosen is to create a base class called BaseController inheriting from Sinatra::Application, this base clase will handle global application settings.


#./base_controller.rb
require 'sinatra/base'

class BaseController < Sinatra::Base
  get '/' do
    'Home (base controller)'
  end
end

Then, I create one controller class for each application module, each of this controllers should inherit from my BaseController.

#/controllers/module1_controller.rb
require File.join(File.dirname(__FILE__),'..', 'base_controller.rb')

class Module1Controller < BaseController
  get '/' do
    'Module 1'
  end
end

Finally, in the config.ru file I define the base routes for each controller.

# config.ru
require './base_controller.rb'
require './controllers/module1_controller.rb'

map '/' do
  run BaseController
end

map '/module1' do
  run Module1Controller
end

Note: the code snippets above assume that the base_controller.rb and config.ru files are located in the root directory while every all controller files are located under «/controllers» directory.

You can download the source code from here.

(FIUBA + Pharo)++

El próximo lunes 19 de diciembre a las 17 hs. en el Laboratorio «E» del 4to. piso, el estudiante Diego Kogan presentará su Trabajo Profesional titulado “Herramienta de integración continua para sistemas desarrollados en Pharo”, que desarrollara  bajo la dirección del Ing. Guillermo Pantaleo.

El trabajo consiste en el desarrollo de una herramienta que da soporte a la práctica de integración continua para sistemas desarrollados en Pharo. Dicha herramienta esta desarrollada íntegramente en Pharo. La herramienta permite ejecutar un conjunto de tareas de verificación  de software sobre un proyecto Pharo, entre ellas:

  • Test.
  • Cobertura de Tests.
  • Inspecciones de Código.
  • Reportes de Builds.
  • Integración con Monticello (SCM para squeak/pharo).

En verdad suena interesante, porque si bien la práctica de integración contínua es común en Pharo, en general suele utilizarse Jenkins. Espero poder hacer un rato para asistir.

Censo Docente UBA (+1)

Hace un tiempo escribí sobre mi experiencia completando el censo docente de UBA. La buena noticia es que el mensaje que envié vía la página de visitas de la UBA, llegó a buen puerto y me contactaron vía mail. En el mail me daban algunas explicaciones y me pedían más detalles sobre los puntos flojos que yo mencionaba. Algo que me llamó la atención es que algo que yo veía como un issue, para los responsables del censo es en realidad un feature. Puntualmente estoy hablando del feature/issue que impide que uno regrese a modificar los datos ingresados en una sección del censo luego de haberla completado.

En fin, ayer me senté y contesté el mail, dando tantos detalles como recordaba (pues el sistema no me permite ingresar otra vez para analizarlo). Al mismo tiempo, para cada punto mencionado, intenté sugerir una posible solución y finalmente envié un link al material de usabilidad que vemos en algo3.

Más allá de las opiniones y de si tienen en cuenta mis comentarios o no, creo que lo importante es que dieron una respuesta a mi inquietud a pesar de que la misma fue enviada por un canal informal. Esto es algo que en instituciones tan grandes y burocráticas como UBA muchas veces es difícil.

Censo Docente UBA (-10)

Ayer completé el censo docente de UBA. Me cuesta describir el sentimiento que me generó, creo que está en tristeza e indignación:

  • Tristeza porque a nivel usabilidad el sistema del censo deja mucho que desear y dado que estoy muy involucrado con la institución, me duele que contando con excelentes profesionales, no se haya podido generar un sistema mejor.
  • Indignación, porque a los a que hicieron ese sistema habría que encarcelarlos de por vida. No entiendo que pasó por la cabeza de quien hizo el sistema. Es evidente que no es una cuestión de un programador solamente, sino también del usuario que encargó el sistema.

El censo es básicamente un serie de preguntas divididas en varias páginas, donde la cantidad de preguntas es dinámica. Entre los puntos destacados están:

  • Positivo: al final de cada página es posible guardar las respuestas y seguir completando el resto en otro momento.
  • Negativo: una vez completada y guarda una página, no es posible volver a modificar un dato ingresado.
  • Negativo: el sistema no ofrece ningún medio de contacto para consultas técnicas y/o envió de feedback.
  • Negativo: campos de selección (lo que técnicamente llamamos dropdown list) con muuuuuchos items, lo cual resulta muy incómodo
  • Negativo: algunas preguntas no estaban redactadas de forma clara, con lo cual es posible que haya mandado frutanga.

Una vez que lo completé quise enviar feedback, pero como no encontré ningún medio para hacerlo en el sitio del censo, terminé enviando el feedback vía el libro de visitas de la página de la UBA.

Como la crítica por si sola no suma, me ofrezco a dar una mano (en forma totalmente gratuita) para mejorar el sitio o incluso para actuar como consultor en la construcción de otros sistemas de la universidad.

Con lo cual, si alguien conoce a los responsables del sistema del censo, por favor que no dejen de contactarme.

Los alumnos no dejan de sorprenderme

Al igual que todos los cuatrimestres, siempre hay algún alumno creativo que me sorprende en uno u otro sentido por sus ocurrencias. Esto me ha motivado a empezar a compartir esas situaciones tan llamativas,  aquí va la primera.

Comienzo con un poco de contexto. Resulta que en TDA1 el régimen de cursada para regularizar la materia es: aprobar los 3 trabajos prácticos grupales y defenderlos individualmente al final del cuatrimestre en un interrogatorio oral con la titular de la materia. Luego de aprobar el interrogatorio la materia queda regularizada y los alumnos pueden rendir el examen integrador. Durante la cursada no se toma ningún parcial y la asistencia a clase no es obligatoria, pero más allá de eso, los alumnos deben estar al tanto de los que se da en clase. El solo hecho de que la materia no tenga examen parcial, es un atractivo interesante para muchos alumnos, que se anotan en la materia, pero al mismo tiempo es un arma de doble filo, pues muchos no asisten a clase y luego no pueden resolver los TPs en tiempo y forma (o directamente hacen cualquier cosa) y terminan perdiendo la materia.

En este contexto, tres semanas antes de finalizar la cursada, un alumno enviá un mail diciendo (textual):

[…]desde hace un tiempo que se me complicó ir a las clases por problemas de trabajo. Aun tengo inteciones de rendir el examen y preparar algun tema para la monografia. El tema lo puedo proponer yo ? o hay alguna lista de opciones? […]

Si leyeron mi introducción con atención, seguramente ustedes estarán diciendo: «Pero en el régimen de cursada no mencionaste nada de una monografia», claro, porque no la hay. Resulta que este alumno, no entregó ninguno de los TPs, y hasta donde recuerdo no lo he visto en las clases prácticas. Pinta como que el alumno vino a alguna de las primeras clases, confirmó que no había parcial y asumió que había que hacer una monografía para regularizar la cursada. Sinceramente no lo sé, tal vez sea que el alumno se confundió de materia, en fin, una anécdota más de mi vida como docente.

Jekyll Quickstart

Some days ago Johnny posted about Jekyll and that motivated us (Martin and me) to perform some spikes with it. So in this post I will share what I have been doing. I assume that you have already set up your Ruby environment.

Let’s start by installing jekyll:


$> sudo gem install jekyll

Very easy and straightforward.

Now create a directory for your site and create the following files/folders in it (this structure is basically what Jekyll’s documentation suggests):

  • _config.yml, this file stores the configuration data that is used by Jekyll. Most of this information can assume default values or the values can be specified as command line arguments when invoking Jekyll. I suggest specifying the destination argument, which specifies where output files will be placed.
  • index.html, this will be the landing page of your site, but in order  for this file to be processed by jekyll we need to add the following line at the top of the file. This will indicate to jekyll which layout to use in order to render the page as well as its title.

---
layout: default
title: jekyll-spike
---
  • _layout, as you may imagine this folder will contain the files that define the layout of your pages (in .net we would say the «master pages»)
  • _post, this folder is where you will place the markdown files with your posts

That is pretty much all; now you can add the classic folders for static resources like images, css, etc.

Now to generate your website, just open a terminal in the root directory of your application and call jekyll

$> jekyll

This will create a whole static site under the folder you specified as the destination in the _config.yml file. Now, every time you want to add a new post/page, just create a markdown file under the _posts folder and then execute jekyll to regenerate the site.ust ese

There is also an option in jekyll to generate the site and start a webserver to host the site all at once, just execute

$> jekyll --server

Well this is all for now. If you want, you can download a zip file with this basic structure from here.

Maratón FIUBA 2011

Ayer tomé parte de este evento con intenciones meramente participativas (creo que al igual que la gran mayoría de los participantes). Esta fue mi primera participación en una carrera. Estuvo bien, me gustó, seguramente vuelva a participar en alguna otra. Dado que de vez en cuando salgo a correr, no tuve mayor problema en completar los 5k de esta carrera. El recorrido fueron dos vueltas sobre las calles Paseo Colón, Belgrano, Azopardo y San Juan. La primera vuelta la hice en 12:35 y la segunda en un tiempo muy similar, para totalizar 25 minutos y moneditas.

Smalltalks 2011, we were there

The 5 th international conference on Smalltalk technologies, Smalltalks 2011 organized by FAST, was held during the first week of November. Among the keynote speakers were Ian Piumarta and Kim Rose (from Viewpoints Research Institute), Markus Denker (from Inria and founder of Pharo project) and a couple of guys from Gemstone (Dale Henricks and James Foster among others).

Out of the sessions I attended, I would have to say that the most interesting were those given by Marcus, Mariano Peck, Hernan Wilkinson and Dale Henrichs.

We held two sessions, Angel gave one on Smalltalk, C# and Javascript and I gave the other on Pharo Customization.