viernes, agosto 08, 2008

Se viene el blog de Semantic Rails

Hay mucho escrito sobre semantic web y semantic wiki pero, hasta donde yo se, muy poco respecto a como implementarlas, especialmente si les interesa RubyOnRails. El blog de Diego Torres es una buena fuente de recetas (además de tener temas musicales muy interesantes, algunos a dúo con Alejandro Fernández). Les dejo el link http://semanticrails.wordpress.com/

sábado, junio 28, 2008

Cerebro de liebre, mente de tortuga y redes neuronales


Desde hace unos días estoy leyendo "Cerebro de liebre, mente de tortuga". En pocas (y no expertas) palabras, el libro habla de conocimiento explícito (o deliberado) y conocimiento implícito.
Por ejemplo, cuando estamos diseñando un artefacto de software y damos argumentos "sólidos" por cada decisión que tomamos, citando teorías, patrones y estándares, estamos aplicando conocimiento explícito. En contraste, imaginemos a un piloto de Nascar (en una de esas clásicas películas de Hollywood) que esquiva un accidente en el humo, varios autos vuelan sobre su cabeza, hace rebajes, toca apenas el freno, acelera, y sigue sano y salvo en carrera, todo en cuestión de segundos. Terminada la carrera el piloto no puede explicar que hizo, como lo hizo, ni por que lo hizo. No hay teoría que hubiese podido aplicar de manera consciente en esas fracciones de segundo que tuvo; simplemente se dejo llevar por su experiencia/inconsciente/instinto, es decir, su conocimiento implícito.
Vivimos en una sociedad que aparenta valorar mas el conocimiento explícito que el implícito. Nuestra capacidad depende de cuan bien podamos explicar nuestros resultados. Algunas excepciones parecen ser el arte, muchos deportes y las relaciones humanas. Son asuntos tan complejos, con tantas variables y tan ilógicos, que intentar resolverlos solo en base a conocimiento explícito no nos lleva a ningún lado. Y, si hablamos de resultados, no podemos negar que el piloto que sale ileso del accidente ha tenido un resultado excepcional - aún cuando no pueda explicarlo.
Hace un tiempo, Oscar García, un colega de la UNLu, intento desasnarme respecto al desarrollo de redes neuronales entrenadas. Entendí que una red neuronal tiene neuronas organizadas en capas, donde cada neurona esta conectada a todas las neuronas de la capa siguiente. Cada neurona recibe una entrada y calcula una salida que pasa a todas las de la capa siguiente. Si se trata de la última capa de la red, lo que obtenemos es el resultado final. Por ejemplo, podríamos alimentar a una red con todos los pixels de una imagen y obtener a la salida todos los pixels de una imagen que es la versión en escala de grises de la original. Desde mi perspectiva de diseñador orientado a objetos, me atrajo lo simple del modelo (capas, neuronas, conexiones) y supuse que sería muy interesante pensar en el diseño de redes neuronales, patrones de redes, etc. Entonces, Oscar siguió explicándome; lo interesante todavía no había llegado.
La función de una red no depende solamente de la cantidad y forma en que se conectan las neuronas. Tampoco depende solamente de la función de transferencia de la neurona (qué cuentas hace la neurona con su entrada para calcular su salida). En realidad, depende mayormente los pesos por los que se multiplica la salida de una neurona antes de dársela a la siguiente como entrada (imagine que cada conexión tiene un peso por el que multiplica la señal antes de entregarla al destinatario). Eso quiere decir que redes de estructura idéntica (mismas capas, misma cantidad de neuronas, misma función de transferencia) podrían dar resultados diferentes para una misma entrada. La misma red podría calcular la versión escala de grises de una imagen y la imagen negativa. La única diferencia entre las dos redes serían los pesos de las conexiones. Eso me decepcionó un poco porque yo estaba pensando en diseñar con lindos diagramas de UML y aplicar algunos de los patrones del gof (y hasta se me cruzó la idea de escribir un pattern languaje) y Oscar me transformó el problema en uno de matemáticas (no es que no me guste, pero soy un poco haragán). Aparentemente hay muy poca teoría respecto a qué combinaciones de valores consiguen cuál efecto (y solo para redes pequeñas); entonces ¿cómo se diseña una red compleja? Una alternativa es diseñar la estructura (capas, neuronas, conexiones, función de propagación) y luego enseñarle a la red para que ella calcule sus propios pesos.
Hay varias estrategias para enseñarle a una red, pero basicamente consisten en darle muchas entradas y mostrarle para cada entrada cual es la salida que esperamos. Cada vez que la red se equivoca, corrige los pesos que cree que tuvieron la culpa del error. La idea es enseñarle con tantos ejemplos nuevos como podamos hasta que la red ya no se equivoque.
Si uno mira una red que cumple bien la función para la cual fue entrenada, difícilmente pueda explicar que es lo que la hace funcionar bien (mirando los pesos). Simplemente es una buena red porque consigue buenos resultados. Como el piloto de Nascar.
Para cerrar, algunas conclusiones y sugerencias:
1) Se nota que no se nada de redes neuronales.
2) No solo en el arte, los deportes y las relaciones humanas es valioso el conocimiento implícito.
3) No para todo lo que funciona bien existe una explicación racional/explicita. No siempre lo racional nos lleva a la solución.
3) Si un día estás en la librería y repentinamente te llama la atención un libro de un tema que aparentemente no tiene nada que ver con lo que hacés, comprálo. Ni te tomes el trabajo de explicarte por que vale la pena invertir el tiempo y el dinero en ese tema, comprálo y leelo (al menos hasta que algo adentro te diga que ya no te interesa). Seguramente es tu conocimiento implícito que te está dando una señal.
5) Cerebro de Liebre, Mente de Tortuga es un libro recomendable.

domingo, mayo 18, 2008

Pizzared


Recién me pedí unos conopizzas de Pizzared: bárbaros....

El sitio web, bastante minimalista y al mismo tiempo practico, estimó 40 minutos para entregar el pedido; en 35 estaban en casa.

Los/las conopizzas son una experiencia interesante si te gustan las pizzas de masa a la piedra, muy fina y muy cargadas. Son una mezcla de pizza y empanada.

Las tres variedades que probé (Toscana, Capresse y Roquefort) estaban muy finamente condimentadas y con el adicional de una hojita de albahaca que le da un toque especial.

Se ve en el diseño del sitio web, en el diseño de la caja de conopizzas (podría poner una foto, pero les arruinaría la sorpresa del primer pedido), y en la idea de pizza via web en general, que sus dueños buscaron innovar.

Al probar las conopizzas se descrubre que además de marketing, tienen un muy buen maestro pizero.

Si les interesa, los encuentran en http://www.pizzared.com.ar/

sábado, abril 26, 2008

De Robots a mundos virtuales

El 26 de abril, en la escuela de educación de la Universidad de San Andrés dio una presentación muy interesante Marina Bers, investigadora de la Universidad Tafts de Medford, Massachussets .

Marina estudio en la UBA, hizo un master en Educación focalizada en Nuevas Tecnologías en Boston University, y luego un master en Media, Arts and Sciences y el doctorado en el MIT Media Lab bajo la dirección de Seymour Papert.

La pregunta que la obsesiona es ¿cómo la tecnología puede ayudar al desarrollo de la persona y la sociedad? En la búsqueda de respuesta, desarrolló la teoría del “Positive technological development”.

Su trabajo se basa en la teoría del constructivismo de Papert. Papert estudio con Piaget y ahí descubrió que la gente aprende cuando construye cosas. Una forma simplificada de entender el concepto de constructivismo en el contexto de software educativo, es comparando un entorno para aprender matemáticas en el que se aprende a medida que se construyen figuras geométricas (Logo) contra un entorno para aprender matemáticas que presenta formulas/cuentas al alumno y lo premia por la respuesta correcta. El primero sería constructivista.

Otro pilar sobre el que se basa el trabajo de Bers es Positive Youth Development . Éste es un movimiento cuyo objetivo es construir una comunidad que contenga a los jóvenes al mismo tiempo que los motiva a interesarse por contribuir al bien común. El PYD postula varios principios fundamentales: preocuparse por los demás, conectarse con los demás, contribuir, tener competencias, tener confianza, tener valores.

El trabajo de Bers apunta a unir con tecnología el constructivismo y el Positive Youth Development. De ahí el nombre de su enfoque: Positive Technological Development.

Uno de los proyectos de su programa de trabajo es Active Citizenship Technology. Se ocupa de jóvenes estudiantes que dejan su casa para ir a vivir a la universidad. El objetivo es ayudar a los jóvenes ingresantes a conseguirse un marco de contención que les ayude a superar las presiones del estudio lejos de su familia.

Durante tres días construyen el campus universitario virtual del futuro apuntando a que el mismo cubra las necesidades de la comunidad que rodea a la universidad (no solo de los habitantes del campus). La pregunta del millón en este proyecto es “como pueden las comunidades virtuales fomentar el compromiso cívico/social”.

Se trabaja con peer leaders (alumnos de segundo año que tienen una mejor conexión con los ingresantes que los docentes). Algunos son ex-participantes del programa que vuelven a ayudar.
Zora , la tecnología que usan para construir el campus virtual, fue desarrollada por Bers durante su doctorado.

Cuando los alumnos ingresan al mundo virtual de Zora, el mismo está vacío (a diferencia de Second LIFE en el que ya hay mucho creado). Ellos tienen que crear todo. Los objetos en Zora, además de una representación gráfica 3D, tienen historias y valores.


En el Screenshot (el cual tome sin pedir permiso del home de Zora; espero que no se molesten) vemos que el mundo es estéticamente pobre (al menos comparado con otros mundos virtuales populares como The Sims, o second LIFE). Eso es así a propósito. Se decidió enfatizar el trabajo en la creación de contenido significativo (descripciones de objetos, significado de los lugares, funciones, etc). Si bien uno podría crear objetos más atractivos, el ambiente no invita a hacerlo. Para los investigadores, Zora provee herramientas para etnográfica virtual (p.e., parsear los logs para conseguir estadísticas de comportamiento, actividades, etc…) y así interpretar que es lo que este pasando.

Hasta ahora se trabajo con dos grupos.

En la primer oportunidad (2006 si mal no recuerdo) solo se dio a los ingresantes la consigna de construir un campus virtual como a ellos les parecía que debía ser. El resultado fue un campus que solo consideraba las necesidades/deseos de los que lo habían construido. El mundo tenia celulares para cada profe así los alumnos podían contactarlos en todo momento, comidas tamaño Jumbo, buses que recorrían el campus todo el tiempo y los llevaban a donde quisieran, etc.

Para la segunda oportunidad (al año siguiente) se les dió un documento para leer, 2 páginas, sobre responsabilidad social, esperando que les hiciera tomar conciencia sobre el rol del campus. Eso fue importante para conseguir que el mundo que construyeran fuera mucho mas centrado en el beneficio y los problemas de la comunidad. Esta vez se enfocaron en problemas de salud, relevancia de los programas de arte, inclusión de minorías, etc.

Otro proyecto interesante probó Zora para ayudara chicos transplantados a respetar el tratamiento luego del transplante (generando conciencia mediante la creación de un mundo virtual en colaboración con otros chicos transplantados). El problema del tratamiento de chicos transplantados es importante desde lo económico (dejar de tomar los remedios trae problemas mas caros de resolver que el transplante mismo) y principalmente un problema social. Si les interesa conocer más de este proyecto en particular pueden leer los papers de Bers o éste artículo en el diario de la universidad . La que está agachada en la foto es Marina Bers.

Como conclusión de lo que escuché en la presentación (en la que habló de mucho más que lo que yo mencioné) me queda que la consigna de trabajo que se da a los chicos/jóvenes junto con la experiencia de construir el mundo virtual desde cero consiguen que se tome conciencia y que se cambie la conducta. Más importante, logra compromiso social.

Marina también contó algo de su trabajo con LegoRobotics. Este tema le interesa porque esta convencida de que, dado que la tecnología esta en el día a días de los chicos, también debería estar en la currícula. Los robots son el equivalente futuro del material de trabajo de los jardines de infantes (bloques, masa, material Montessori, etc.). Recientemente escribió un libro dirigido a docentes de nivel inicial/primario con guías para incorporar LegoRobotics en clase.

Durante su presentación recomendó varios libros

El segundo yo. Sherry Turkle (1984). The Second Self (New York: Simon & Schuster, 1984).

Mindstorms: Children, Computers, And Powerful Ideas. Seymour Papert.

Blocks to Robots: Learning with Technology in the Early Childhood Classroom (Marina Bers)

Coordenadas de Marina Bers
http://www.tufts.edu/~mbers01
marina.bers@tufts.edu
Developmental Technologies (DevTech) – Research group
http://ase.tufts.edu/DevTech

Agradecimientos

Agradezco a la Universidad de San Andrés, en especial a Alejandro Artopoulos y Jason Beech por la invitación a la conferencia.

martes, abril 22, 2008

CIC - Concurso de subsidios de investigación aplicada en TICs - Sinergia TIC 2008

Se encuentra abierta la primera convocatoria a subsidios para proyectos deI+D en el marco del proyecto de creación del Centro de Investigación,Desarrollo e Innovación en TICs de la Comisión de InvestigacionesCientíficas de la Provincia de Buenos Aires.

Las bases y formularios se encuentran disponibles en el sitio web de la CIC(http://www.cic.gba.gov.ar/).

Fecha limite para presentación de propuestas: 19 de Mayo de 2008, a las 14horas.

OBJETIVOS DE LA CONVOCATORIA

Apoyar el desarrollo de proyectos de investigación aplicada y transferenciaen el área de las Tecnologías de la Información y las Comunicaciones (TICs),que contemplen un desarrollo transferible a nivel nacional y/ointernacional, orientado a:

  • Fomentar la investigación aplicada en áreas prioritariaspara la provincia.
  • Fomentar la sinergia entre el sector científico y elsector público y privado.
  • Fomentar la investigación en educación para el desarrollode recursos y capital humano en TICS.

Como temas de interés prioritarios (no excluyentes) se proponen lossiguientes:

  • Automatización de procesos industriales
  • Calidad de software
  • TICs y educación
  • Bioinformática
  • Gestión de contenidos y conocimiento
  • Gobierno electrónico
  • Ingeniería de Software
  • Micro y nano electrónica
  • Procesamiento de imágenes y señales
  • Productos y servicios móviles Robótica y domótica
  • Seguridad y confiabilidad en TICS
  • Sistemas distribuidos
  • Sistemas embebidos
  • Sistemas georeferenciados
  • Tecnologías para el entretenimiento
  • Telefonía y acceso
  • TICs aplicadas al agro
  • TICs aplicadas a la salud

Inversión de control

En las dependencias
Para utilizar dependencias alcanza con subclasificar Object o Model. La clave esta en los métodos #chanded: que heredamos de ellas, los cuales esconden todo lo que pasa tras bambalinas para hacer funcionar las notificaciones.

El “framework” llama al código del usuario (#update:). Llamamos a esto inversión de control

En el “framework” de construcción de interfaces
Uno de los pasos claves en la construcción de GUIs en Visualworks es la subclasificación de ApplicationModel.

Nuestro ApplicationModel va a recibir muchos mensajes que nosotros nunca enviaremos desde nuestro código. Muchos de ellos los mencionamos al configurar los widgets (actions y aspects). El método #windowsSpec casi podemos olvidar que existe porque nunca enviamos explícitamente el mensaje y casi nunca miramos su implementación.

El aplicación model puede redefinir los métodos #preBuildWith:;
#postBuildWith:; #postOpenWith: . La aplicación (el código del escrito por nosotros) nunca envía esos mensajes. Existen como gancho (hooks) para que, mientras el “framework” de interfaces tiene el control, yo pueda hacer cosas como esconder/desactivar widgets, dar últimos toques de configuración a la GUI (como elementos seleccionados en una lista), etc.
Vean el método #openInterface:withPolicy:inSession: en ApplicationModel. Se trata de un template method en el que el objeto se envía a si mismo los mensajes antes mencionados.
La clase ApplicationModel provee implementaciones “vacias” de los métodos #preBuildWith:; #postBuildWith:; #postOpenWith:. De esta manera, las subclases pueden optar por implementarlos o no.

En SUnit
Para definir un test subclasificamos TestCase.

Hay tres elementos clave en un test. Su método #setup (donde se prepara el fixture de objetos que voy a necesitar para el test), su método #tearDown (donde se liberan recursos que pude haber generado para el test y no se van automáticamente) y los metodos #test*.

Uno nunca envía explícitamente los mensajes #setup, #tearDown o alguno de los #test* a un TestCase. Uno crea un test indicando cual de los tests quiere correr (myTestCase := MyTestClass selector: #testSomething) y luego le dice que corra (myTestCase run).

Luego de enviar el mensaje #run a un TestCase, el mismo termina recibiendo el mensaje #runCase para el cual existe un template method implementado en TestCase que dice algo como:

>>runCase
[self setUp.
self performTest] sunitEnsure: [self tearDown]


Por eso uno implementa #setup y #tearDown aunque nunca los envíe. Es un caso mas de inversión de control

Inversión de control y el template method
En los tres casos que vimos anteriormente la inversión de control se consigue/introduce gracias a un template method (y a la herencia). Ese es un mecanismo muy comúnmente utilizado para construir clases (o conjuntos de clases) reusables.