Patrones semi-aleatorios en Small Basic

Hace algunas semanas me encontré por casualidad Microsoft Small Basic, una implementación del paradigma de programación para niños que utiliza una tortuga en pantalla a la cual se le dan órdenes tales como moverse hacia adelante o rotar una cantidad específica de grados.

Logo, otra implementación de este paradigma, fue la forma en la cual yo entré en el mundo de la programación allá por 1986, hace ya 24 años. Debido a esto encontrar Small Basic me llenó de gratos recuerdos y desde entonces he dedicado algunos de mis ratos libres a jugar de nuevo con este paradigma tan interesante y motivador, que me llevó a encontrar mi vocación hace tanto tiempo.

Una de las principales razones por las cuales la Tortuga es una de las mejores formas de introducir a los niños al mundo de la programación es que los resultados del código escrito se pueden ver en pantalla de forma rápida e inmediata y las permutaciones que se pueden hacer al código dan para horas de entretenimiento infantil. Adicionalmente, no es necesario aprender muchos conceptos teóricos de programación antes de obtener resultados agradables.

En una de estas sesiones de juego con la tortuga, me dí a la tarea de crear un algoritmo que me permitiera simular cierto grado aleatoriedad en el resultado visual, pero sin sacrificar la belleza del mismo. Para esto introduje niveles de aleatoriedad controlados dentro del marco de ciertas reglas. El resultado sigue siendo aleatorio (y sorpresivo), y por lo tanto cada uno de los patrones generados tiene una muy baja probabilidad de repetirse nuevamente; sin embargo, a pesar del aparente caos reinante en los patrones, estos muestran orden como un todo, lo cual los hace en su mayoría atractivos al ojo humano.

Algunos de los resultados del algoritmo se presentan a continuación:

 

Si desea ver más resultados, puede descargar Small Basic y utilizar el algoritmo para generarlos:

seed = Math.GetRandomNumber(24)
goal = seed * 15
maxSteps = Math.GetRandomNumber(48)
steps = Math.GetRandomNumber(maxSteps) + 1
For j = 1 To steps
  angles[j] = Math.GetRandomNumber(goal)
EndFor

distance = Math.GetRandomNumber(100)

Turtle.Speed = 10
GraphicsWindow.PenColor = GraphicsWindow.GetRandomColor()

For i = 1 To 50
  For j = 1 To steps
    angle1 = angles[j]
    angle2 = goal – angle1 
    Turtle.Turn(angle1)
    Turtle.Move(distance)
    Turtle.Turn(angle2)
    Turtle.Move(distance)
  EndFor
EndFor

Turtle.Hide()

La Pared Táctil de Schematic

La nueva versión de la pared táctil de Schematic; construida utilizando WPF/C# fue presentada la semana anterior en el festival Cannes Lions en Francia.
 
En este proyecto tuve la oportunidad de participar como líder de plataforma, posición en la cual estuve a cargo de la arquitectura y parte del desarrollo de las distintas partes necesarias para la construcción del masivo dispositivo táctil.
 
Entre los componentes necesarios para la puesta en funcionamiento de la pared se encuentran las siguientes:
 
  • Los datos se encuentran almacenados en una instancia de SQL Server.
  • Los delegados se registran con los organizadores del festival, y su información es enviada en tiempo real mediante un servicio de sincronización, implementado por medio de un servicio de Windows que monitorea los cambios en la base de datos de los organizadores y los envía a la base de datos de Schematic mediante un servicio WCF.
  • Es posible modificar los datos mostrados por la pared por medio de un CMS implementado utilizando ASP.net.
  • Los delegados son reconocidos por la pared de forma automática mediante un dispositivo de radio-frecuencia (RFID Tag). El módulo que obtiene los datos desde el lector de radio-frecuencia y los envia a la pared fue desarrollado utilizando C#.
  • Los eventos que ocurriran durante la semana del festival son sincronizados en tiempo real entre las dos bases de datos mediante un servicio XML publicado por los organizadores del festival y un servicio de Windows que monitorea los datos del XML y los actualiza en la base de datos.
  • La interfaz de usuario de 3840×1600 pixeles fue desarrollada utilizando WPF y Prism (Composite Application Library). Esta hace uso extensivo de características claves de WPF, como el databinding de XAML, los "behaviors" y los "converters", lo cual acelera el proceso de desarrollo y lo hace más fácil de actualizar y modificar.
  • Toda la interfaz de usuario fue realizada por medio de Microsoft Expression Blend.
  • Para detectar la información táctil, se utilizó la tecnología de código abierto TUIO y su implementación en C# (www.tuio.org).
  • Las demostraciones son realizadas por medio de videos de resolución nativa (3840×1600), que son reproducidos por Windows Media Player y controlados remotamente desde un dispositivo móvil a través de la red inhalambrica por medio del protocol Open Sound Control (www.osc.org). Tanto el reproductor de video como el receptor de comandos de control remoto fueron realizados por medio de módulos implementados en C#.

Formaron parte del equipo de desarrollo de la pared, mis colégas en Schematic:

  • Jose Madriz, encargado de la realización de toda la interfaz de usuario utilizando Expression Blend, así como del desarrollo de varios behaviors y converters.
  • Herberth Madrigal, encargado de la realización del reproductor de video de alta resolución y el receptor de control remoto.
  • Alexis Cedeño, encargado de la realización de los servicios de sincronización e importación de datos.
  • Anthony Baker, originalmente encargado de la realización de los servicios de sincronización e importación de datos, pero tuvo que dejar el proyecto anticipadamente por razones personales.
  • Jonathan Salas, encargado de la realización de varias de las más llamativas animaciones de la aplicación.
  • Benjamin Gorton, encargado de la implementación de la aplicación de control remoto que envía los comandos de control a través de la red.

Adicionalmente fueron parte del equipo:

  • Michelle Kempner, arquitecta de solución a cargo del proyecto.
  • Mitchell Gould, productor.
  • Bill Hermanns, gerente de proyecto.
  • Karen Ibenthal, gerente de proyecto, etapa de control de calidad.
  • Erin Pionkowski, gerente de proyecto, reproductor de video.
  • Jimmy Chen, director creativo.
  • Andy Jonez, diseñador.
  • Sean Porter, creación de videos demostrativos.

(Nota: estoy seguro de que algunos de los miembros del equipo no están en esta lista, pido disculpas de antemano, pero no logro recordar a todos los miembros del equipo en este momento, iré agregando a otros miembros conforme me lleguen a la memoria).

Es posible encontrar mayor información en el blog de Schematic:

http://touch.schematic.com/2010/06/schematic-touch-walldemo/

http://touch.schematic.com/2010/06/sneak-peek-at-setup/

Pueden enviar sus preguntas acerca del proyecto y su realización a mvarela@schematic.com

 

TFS en Expression Blend 3

Para habilitar la integración entre Expression Blend 3 y Team Foundation Server, es necesario bajar e instalar un parche que se encuentra en la siguiente ubicación:
 
 
Después de la instalación Blend realizará el "check out" de los archivos de forma automática cuando estos son modificados, lo cual ahorra mucho tiempo al trabajar sobre archivos que están bajo control de versiones de código usando TFS.

Diálogo de creación de pruebas unitarias vacío

En estos días he estado modificando un proyecto bastante grande que hemos retomado después de casi un año de inactividad. Después de varios días llego el momento de crear la primera prueba unitaria (unit test) para las clases agregadas.
 
Para mi sorpresa, cuando abrí el cuadro de diálogo correspondiente este se desplegó vacío y no me daba ninguna opción.
 
Después de realizar una rápida búsqueda, descubrí que la causa era una pulga que se presentaba cuando uno de los proyectos no producían como salida un esamble (assembly, .dll), como es el caso de los proyectos de bases de datos y Silverlight.
 
En este caso el problema era un proyecto de base de datos (VSTS DBE GDR2).
 
Afortunadamente Microsoft ya había producido un parche para esta pulga, el cual puede ser descargado desde esta dirección:
 
 
Después de bajarlo e instalarlo la generación de pruebas volvió a funcionar adecuadamente.
 
 

Expression Blend: Habilitar la edición de controles

Estos días he desarollado algunos controles de WPF en librerías externas al proyecto principal, y en el proceso me dí cuenta de que en algunos casos, al abrir el proyecto con Blend, no era posible editar los controles en la vista de diseño, sino que se habrían por defecto en la vista de código y no permitían cambiar de vista.
 
Me dí cuenta de que los proyectos creados bajo la categoría "WPF Control Library" si permitían abrir los controles en vista de diseño, mientras los creados bajo la categoría "Class Library" eran los que presentaban el problema.
 
Entonces me dí a la tarea de encontrar que era lo que los diferenciaba. Creé un proyecto de cada tipo usando el mismo nombre y luego utilicé el comparador de TFS para comparar los archivos .csproj.
 
Además de algunas referencias a librerías adicionales, el proyecto de libraría de controles contenía las dos líneas siguientes:
 
    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <WarningLevel>4</WarningLevel>
Procedí a abrir el archivo .csproj del proyecto de librería de clases usando Notepad y le agregué las dos líneas faltantes. Luego lo abrí en Blend y comprobé que efectivamente era posible abrir los controles en la vista de diseño después de efectuar este cambio.

Silverlight 3: tipo de objeto se mantiene

Cuando se instancia una aplicación de Silverlight en una página HTML es necesario utilizar el tag <OBJECT/>, que se utiliza para crear instancias de plug-ins externos al navegador de Internet.
 
Este tag requiere dos parámetros, "data" y "type" que le informan al browser el tipo y la versión del plug-in que se desea instanciar en este espacio. Los valores para estos parámetros han ido cambiando durante el desarrollo de Silverlight, pasando por las distintas versiones e incluso utilizando un valor específico para las versiones beta del producto. Sin embargo para mi sorpresa, entre las versiones dos y tres no hubo cambio en estos valores.
 
Tanto para la versión dos como para la versión 3 de Silverlight, el plugin se instancia usando los siguiente valores:
 
data="data:application/x-silverlight-2," type="application/x-silverlight-2"
 
De forma que, la declaración completa se ve de la siguiente forma:
 
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    <param name="source" value="ClientBin/AppName.xap"/>
    <param name="onError" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="3.0.40624.0" />
    <param name="autoUpgrade" value="true" />
    <a href="
http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
      <img src="
http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
    </a>
</object>
 
Es de suponer que ahora en consecuencia el valor que se toma en cuenta para seleccionar la versión requerida del plug-in es el que se encuentra en el parámetro minRuntimeVersion, que para las aplicaciones de Silverlight 3 debe contener el valor "3.0.40624.0".
 
Cuando se crea un nuevo proyecto de Silverlight 3 usando Visual Studio, la herramienta se encarga de crear páginas de ejemplo con estos valores por defecto, por lo que es fácil pasar por alto estos detalles.

Electricidad Inhalámbrica 02

Hace algún tiempo escribí acerca de la electricidad inhalámbrica, y de como un grupo del MIT había descubierto una forma viable de lograrla. Hoy me volví a topar con esta tecnología, pero como era de esperarse, el tiempo y el esfuerzo invertido en la misma ha dado sus frutos y ahora ya no solo se puede usar para encender una bombilla eléctrica, sino también televisores, teléfonos celulares y computadoras portátiles!
 
Esta interesante demostración fue presentada en TED. El video se encuentra en Inglés, pero no es necesario entender lo que se dice para apreciar la tecnología:
 
 
Como dije en mi entrada anterior, era solo cuestión de tiempo antes de que pudieramos ver una aplicación comercial. Lo más interesante es que se habla de cargar los autos eléctricos, sin necesidad de conectarlos, lo cual cambiaría completamente la percepción de la gente acerca de estos vehículos.

El maíz: Una creación del hombre

Sabía usted que el maíz, tal y como lo conocemos hoy en día no existía en la naturaleza, sino que es producto de la crianza selectiva del hombre a través de muchas generaciones? Este cereal, cuyo consumo superó las 700 millones de toneladas solo en el año 2005, no fue creado por la naturaleza, sino por los habitantes de Mesoamérica, aproximadamente hace unos 7000 años. El maíz fue derivado de una planta nativa de México y Centroamérica conocida como teosinte. El teosinte, a diferencia del maíz actual produce muy pocas semillas y es muy poco el almidón que puede ser extraído de este cereal natual. Mediante la selección artificial, los nativos americanos de hace 7 milenios seleccionaron y criaron las plantas cuyas semillas eran más carnosas y abuntantes, y después de muchas generaciones, el maíz que consumimos en la actualidad se fue desarrollando. Existen evidencias arqueológicas del maíz primitivo, el cual es una especie de transición entre el teosinte y el maíz actual.

La siguiente imagen muestra una comparación del teosinte, el maíz primitivo y el actual:

Hay una gran ironía implicita en esta historia: en la actualidad muchos grupos se oponen a la manipulación genética del maíz, pues afirman que esto conllevaría alterar lo que “la naturaleza” ha producido. Al afirmar esto, estas personas muestran su desconocimiento de la historia del maíz: una creación del ingenio del hombre!

Búsqueda de la historia del maíz en Inglés:

http://www.google.com/search?q=maize+history

Búsqueda de la historia del maíz en Español:

http://www.google.com/search?q=historia+del+ma%C3%ADz

Datos del consumo mundia de maíz:

http://www.mgap.gub.uy/opypa/ANUARIOS/Anuario06/docs/12%20-%20MAIZ%20Y%20SORGO%20METHOL.pdf

Asignando un GUID a cada especie

La Clasificación Biológica es un método de la Biología mediante el cual se agrupan a los organismos por su tipo biológico, tal como el género o la especie. En la actualidad, la comunidad científica tiene planes de asignar un "identificador único globalmente" (GUID por sus siglas en Inglés) los cuales tienen su origen la informática. De esta forma los científicos podrían hacer referencia al tipo biológico sin incurrir en confusiones y sin necesidad de utilizar nombres comunes o folclóricos.

Ya existen varios grupos que se dedican a la labor de asignar el identificador único a distintas ramas del árbol de la vida.

Para mayor información, es posible realizar una búsqueda en Inglés:

http://www.google.com/search?q=biological+classification+GUID+LSID

Schematic Touchwall

Para el recién finalizado Festival Cannes Lions en Francia, Schematic mostró una pared táctil multi-usuario por medio de la cual los asistentes al festival podían tener acceso al calendario, eventos, documentos, mapas tridimensionales de la ciudad y locales comerciales adyacentes; además de la posibilidad de contactar a otros delegados y enviarles su información personal, invitaciones a eventos o documentos relacionados a algún evento.

Un equipo de costarricenses tuvimos la oportunidad de participar en la elaboración de esta pared táctil. Carlos Zumbado (Kadazuro) y yo fuimos los líderes de plataforma para el grupo de Multimedia y el grupo de Microsoft respectivamente. Adicionalmente trabajaron en el equipo Herberth Madrigal y Anthony Baker.

La prensa en línea se ha mostrado bastante interesada en esta novedosa pieza de tecnología y en Twitter todavía la gente está hablando al respecto. Incluso la prensa local en Costa Rica se mostró interesada en la noticia.

Una de las características más importantes de la pared táctil es la utilización de técnología RFID por medio de la cual se identifica a los delegados, eliminando la necesidad de indentificarse por medio de un usuario y contraseña.

Acá en Schematic Costa Rica nos encontramos muy felices y orgullosos de haber participado en este proyecto y esperamos poder participar de la construcción de nuevas paredes táctiles para nuestros clientes en el futuro cercano.