Archive for August, 2010
El departamento de Ingeniería Simple
Posted by Leonel in Ingeniería, Interfaz de Usuario, Sociedad, Temas generales, Trabajo en equipo, Usabilidad, Video on 14 August 2010
Descubrí el sitio de TED (www.ted.com) y su excelente contenido de videos hasta hace poco, unos meses apenas. Se trata de una impresionante colección de charlas cortas, de menos de 18 minutos la mayoría, sobre temas variados, planteados de forma accesible y dictadas por personas exitosas de todos los ámbitos: deportivo, científico, social, empresarial, académico, cultural, industrial, educativo, etc.
Las charlas están organizadas por categorías lo cual facilita localizar los temas que a uno le puedan interesar. La categoría de ingeniería cuenta con 21 charlas al momento de escribir esta entrada, entre ellas una particularmente divertida y llena de sentido común, con una llamada a la acción, de Rory Sutherland: “Sweat the small stuff” título que hace referencia al dicho común norteamericano “don’t sweat the small stuff” (“no sudes por las cosas pequeñas”) para decir que no hay que preocuparse demasiado por las cosas pequeñas, lo que Sutherland rebate diciendo que precisamente hay que tratar de encontrar esas cosas pequeñas que tienen un gran impacto, a las que nadie le pone atención bajo el supuesto equivocado de que para que se obtengan beneficios grandes se debe gastar una cantidad enorme de dinero.
En una gráfica donde el eje “x” representa el efecto de las cosas y el “y” el costo de ellas, Sutherland explica los cuatro cuadrantes resultantes. Arriba a la derecha están las cosas con grandes efectos y que cuestan mucho dinero, a las que llama “estrategia” y que son las que se supone que hacen los directivos y gerentes que ganan más dinero y tienen más presupuesto.
A la izquierda arriba están las cosas de poco impacto pero que cuestan mucho dinero, que arrancan risas de la concurrencia cuando Sutherland las llama “consultoría”. Lo “trivial” cae en el cuadrante de abajo a la izquierda pues no cuesta nada pero no tiene ningún efecto.
Abajo a la derecha están las cosas con muchísimo impacto pero sin costo, de las que usualmente nadie se ocupa porque erróneamente se piensa que hay que ocuparse de situaciones que requieran soluciones acorde al salario percibido y presupuesto disponible, de forma que si solucionar un problema no consume una cantidad significativa del presupuesto asignado entonces eso es un signo de que a eso no hay que ponerle atención.
Cosas como poner más sillas en los centros de atención al público, actualizar las noticias en el sitio Web de la organización, poner un rótulo adecuado que oriente a quienes visitan por primera vez una oficina, establecer un mecanismo sencillo, claro y conocido para obtener un nuevo bolígrafo, etc., etc.
Este cuadrante es tan poco atendido que Sutherland indica que no existe una palabra adecuada para referirse a él en inglés. Entre los comentarios de la charla se sugiere que “elegancia” podría ser lo más indicado o “simplicidad”. Las empresas deberían tener a alguien con mucho poder pero bajo presupuesto encargado de atender esas cuestiones, alguien a quien Sutherland llama el “director jefe de detalle”.
Una de las razones por las que me encanta esta charla es porque creo que el nombre correcto del cuadrante podría ser “ingeniería simple” y el encargado empresarial de este aspecto debería ser el “gerente de ingeniería simple”, aunque claro, lo del nombre es lo de menos, lo importante sería atender la idea.
La charla dura solo 12 minutos y 37 segundos, tiene subtítulos en español y en otros idiomas incluyendo inglés y definitivamente vale la pena verla.
Una historia de tres juegos: programación en lenguajes para niños (IV de IV)
Posted by Leonel in Ingeniería, Internet, Programación on 7 August 2010
Small Basic es un lenguaje de reciente invención. En este caso me refiero a la versión de Microsoft, ya que no hay que confundirlo con otro Small Basic que existe y que está disponible en Sourceforge.
La gente de Microsoft está haciendo un excelente trabajo en el desarrollo de este producto, con una buena idea en mente: devolver la diversión a la programación (Microsoft Small Basic puts the “fun” back into computer programming), pero hay que reconocer que todavía tiene camino por recorrer.
Small Basic no provee al programador con ninguna librería de imágenes prediseñadas, aunque es muy fácil cargar una imagen almacenada localmente o desde cualquier sitio de Internet con el objeto ImageList y luego mostrarla con el objeto Shapes. Se hace así:
CoPNG = ImageList.LoadImage("http://ingenieriasimple.com/smallbasic/Corredor01.png") CoSh = Shapes.AddImage(CoPNG)
La primera instrucción carga la imagen y devuelve su nombre, que queda almacenado en la variable CoPNG, la segunda agrega la imagen cargada a la lista local de imágenes, la muestra en pantalla y devuelve un identificador de la imagen que queda almacenado en la variable CoSh.
De los tres lenguajes estudiados Small Basic es probablemente el menos intuitivo, las dos “fáciles” instrucciones recién listadas son un ejemplo. Pero una vez uno se ha familiarizado con los objetos disponibles, la verdadera diversión empieza, aunque no son pocos objetos, ImageList y Shapes son solo un par de una larga lista que incluye: Array, Clock, Controls, Desktop, Dictionary, File, Flickr, GraphicsWindow, File, Math, Mouse, Network, Program, Sound, Stack, Text, TextWindow, Timer y Turtle, además de los que el usuario decida agregar instalando complementos y para llegar a conocerlos hay que revisar la documentación que es muy buena.
Además Small Basic provee al programador de “Intellisense” que es un sistema que en cuanto se empieza a escribir un comando, provee de ayuda inteligente, como complemento de la instrucción y sus parámetros, descripción del comando, ejemplos, etc. Sin eso la programación aquí sería más que complicada.
Siguiendo con el desarrollo del juego, procedí a preparar todas las imágenes que necesitaría para el programa. De un proyecto anterior tenía un archivo GIF animado de un corredor. El GIF almacena una imagen por cada etapa del movimiento, así que solo tuve que separar cada imagen para cargarla en el programa y luego mostrarlas y ocultarlas secuencialmente para dar la impresión de movimiento. El corredor jugaría el papel de la bolita de Rapid Roll, así que le programé movimiento permanente a la izquierda y derecha, controlado por las flechas del teclado y movimiento hacia abajo. Se dice fácil pero ¡vaya que no lo fue!
Cuando intenté poner en línea la primera versión descubrí que las imágenes GIF no funcionan y tuve que cambiarlas a formato PNG. La gente del foro de Small Basic me ayudó para ello y tengo que reconocer que están prestos a ayudar, lo cual es muy bueno. A ellos también les sirvió pues se enteraron que las imágenes GIF no funcionan y supongo que en alguna versión posterior lo arreglarán.
Decidí dibujar unos terrones triangulares para que jugaran el papel de las barras ascendentes de Rapid Roll. Luego les programé el movimiento permanente hacia arriba empezando desde una posición aleatoria en la parte baja de la pantalla, y luego moviéndose hacia arriba y al llegar al borde superior repiten.
Después agregué la programación para que el corredor se pare sobre los terrones y suba con ellos.
Parte de la dificultad de todo esto es que Small Basic no maneja simultaneidad, es decir no tiene instrucciones para ejecutar dos procesos simultáneamente, como Alice o Scratch. Lo más cercano es utilizar el evento Tick del Timer. Se le indica al Timer que emita un Tick cada 160 milisegundos (ese fue el número que mejor me funcionó) y se coloca todo el código que maneja el movimiento de todos los elementos en el manejador del evento. Nuevamente, se dice fácil pero…
El juego funcionó bien localmente pero al ponerlo en línea me encontré que se maneja con Silverlight (el producto de Microsoft que compite con Flash de Adobe) y tiene algunas idiosincrasias que me obligaron a modificar el código fuente local.
De los tres lenguajes usados encontré que Small Basic puede ser el más complicado, de hecho el juego quedó menos terminado en este lenguaje que en los otros dos. En todo caso, el experimento fue todo un éxito, aprendí, me divertí, saqué conclusiones y me quedaron ganas de seguir, así que ¡a programar!
Una historia de tres juegos: programación en lenguajes para niños (III de IV)
Posted by Leonel in Ingeniería, Programación on 3 August 2010
De proyectos anteriores en Alice – que se llaman “worlds” o mundos en la jerga propia del lenguaje – tenía un dinosaurio T-Rex al que le había enseñado a caminar, es decir, le había programado el método “Walk” y como había quedado muy bien decidí que esta versión del juego estaría ambientada en el tiempo de los dinosaurios. El T-Rex sería ahora “la bolita” de Rapid Roll, nuevamente estaría en perpetuo movimiento hacia la izquierda o derecha, controlado por las flechas del teclado y cayendo.
Alice difiere de Scratch en que implementa de una forma más avanzada la programación orientada a objetos lo cual permite mayor interrelación entre objetos, un objeto puede tener subobjetos (las patas y brazos del T-Rex son subobjetos por ejemplo) y desde un método en un objeto se pueden llamar métodos de otros objetos, consultar sus propiedades o llamar a sus funciones, hay un objeto principal al que jerárquicamente pertenecen todos los demás que es el llamado World, entre otras cosas.
Para hacer que el T-Rex responda a las flechas del teclado hay que programarle un método y luego asignarlo al inicio del evento “While ← is pressed” y lo mismo para “While → is pressed”. De hecho el método es el mismo solo se le pasa un parámetro para indicar hacia dónde debe voltear.
En Alice no se pueden dibujar nuevos objetos así que usé el objeto más parecido a una barra que encontré y este fue una especie de plancha cuadrada. El T-Rex va cayendo y su única opción es buscar pararse en cada una de las planchas conforme estas suben. Como dije antes, los juegos no quedaron tan parecidos al modelo.
Como me había gustado el papel que juegan los tiburones en la versión de Scratch, decidí implementarlo también aquí solo que usé tres mosasaurios (saurios marinos verdaderamente temibles) que salen del mar hacia arriba buscando comerse al pobre T-Rex. El primero está presente desde el principio y el resto se van agregando conforme avanza el juego.
También agregué una gran perilla giratoria a modo de temporizador, que se ve en el fondo del paisaje más o menos donde se vería el sol al final de la tarde. Le toma 30 segundos dar una vuelta y cada vez que la da el juego avanza un nivel. Alice tiene una propiedad verdaderamente útil para esto de avanzar de nivel: el “speedMultiplier” del mundo, basta con incrementarlo en 1 y se aumenta la velocidad de ejecución.
Puede llegar a ser bastante difícil jugar este juego en los niveles más altos y con los tres mosasaurios presentes.
Por último, cuando un mosasaurio logra pescar al T-Rex se abalanza ferozmente sobre su cuello y se revuelven juntos en un final de mucha acción y con la cámara acercándose cada vez más. Esto mismo no se habría podido hacer en Scratch o habría costado mucho más.
Intenté colocar en línea esta versión del juego pero Alice no es muy amigable para ello. Si tienen la suficiente paciencia para configurar su computadora para correr animaciones en Java de 3 dimensiones (hay que bajar varios componentes) pueden verlo en la sección de Alice de Ingeniería Simple. También puse el fuente en línea y un video en YouTube para que puedan examinarlo mejor.
Entonces le tocó el turno a Small Basic. Les contaré cómo me fue con este lenguaje relativamente nuevo en el siguiente post.
Comentarios recientes