All posts by Diego Leal

Thinking out loud: Generating social graphs from RSS in an Open Course

Well, this "thinking out loud" thing is something I'm not really used to (I'm trying to learn), so please bear with me.  I'm not even sure if I'll be able to say what I'm thinking, for that matter...   That said...

Last year I offered my first open course ever, called e-Learning (ELRN).  It was supposed to be an exploration of the present and future (at a local level) of technology in education.  And I decided I wanted it to be open, and also that I wouldn't use a LMS.  I wanted to do something similar to the things Stephen and George did with CCK08, but I didn't have the infrastructure to make that happen.

Following David, Alec, George and Stephen, I chose a wiki as the platform to publish the weekly activities of the course, and blogs as the main reflective tool for students.  The decision didn't have to do with the technology, but with the reflexive processes that it allows, based on my own experience.  Blogs would be the publishing platform of choice.  The discussion wouldn't happen in centralized discussion fora, but in each participant's blog. It would be decentralized.

Also, given the characteristics of my own context (Colombia), where there are not that many education blogs online, and most of us are not power users, I wanted to make access to the info produced in the course as easy as possible.  Participants would be able to get info by e-mail, and those who felt comfortable with it, by RSS.  To participate in the course would not require to login in a specific platform to access content, and it should be a real possibility to send and get information by e-mail.

So all these intentions led me to find ways to collect all the info generated in the blogs, and distribute it by e-mail.  That led me to work a bit with Pipes, something I hadn't done before.   The first product of that work looked like this, and I talked about it in another post:

At the end of that post, I noticed some limitations that I was still trying to figure out:

  • How do I analyze all the data coming out of the course? If I wanted to see the progress/evolution of different participants, what kind of tools should I use? Is it possible to do it with the pipe I have now?
  • Feedburner is not flexible enough with the mail subscriptions. I'd like every participant to decide whether she gets a daily or real time notification.

As I went through ELRN, something else proved difficult: How could I (as a facilitator) keep tabs on the comments of formal students?  Monitoring every comment in every post was, clearly, a daunting task...

At the end of the course I tried to generate, by hand, some sort of analysis of what happened, including posts frequency and the blog comment network generated along the course, which was possible thanks to the small number of participants.  That network looked like this:

So I realized that such a graph could be very useful to monitor the participation in the course, and to detect (and maybe do something about) people who were not being part of the conversation.  It could be used as a "lurker detector", so to speak.  Nevertheless, I told myself, in order to be useful you would have to get this kind of info not at the end of the course, but along the road.  And, doing that by hand would be very time consuming.  And that leads me, finally, to this post.

So, What if you could generate such a graph (described as a GraphML file) from a RSS feed?  How could you do that?

Last year I started another open course about groups, networks and communities (called GRYC in Spanish), which for several reasons was postponed for this year.  That gave me some time to think about the problem (but not to solve it).  Here's where I am right now:

(Side note:  I used some of Tony Hirst ideas to generate a map from the GDocs form I'm using as registration for the course.  Here's the pipe and here's the map.  Very cool indeed!)

If we go back to the first diagram, we see that I have a pipe compiling feeds from different blogs.  So I wondered how could I get comments from those blogs, given that there were many people using an already existing blog for the course and tagging their posts, and there were many different platforms being used at the same time, each one with its own approach to comments (WP doesn't have specific feeds for comments in a category, while Blogger does.  Some people use Feedburner for their feeds, which makes impossible to discover a comment feed, and so on).

What I did was to create a new pipe (the second one in the sequence), which takes the first one as input and extracts the comment feed associated to each post, and then gets the items included in each one of those feeds.   Also, I'm getting (using YQL) Twitter messages and comments made in the wiki.  Everything is put together and at the end I have a feed including who said what, and where that was said (blogs, twitter, wiki).  It's quite easy to extend this and include other sources (Google Groups, Moodle fora, or anything that can imported into Pipes).  Now, maybe there's a more simple way to do this but, well, I'm still learning to use Pipes  (for example, can all this be parameterized?).. :D

There is a "dark side" to this.  I still have to do a lot of "maintenance" in the original data, and I have to consider specific cases that made the pipes not as simple as I'd like them to be.  Let's say, someone is using Disqus for the comments, and someone else uses different display names for the posts and the comments in different platforms.  Some comment feeds are not being discovered by Pipes...  It's not nice.  It's not 'clean'...

My basic graph, as shown above, includes people as nodes and comments as edges.  So I still need to know who said what to whom.  I could do this in the second pipe, but I don't want to add any more complexity (that is, processing time) to that pipe.  So, in a third pipe I get results from the second pipe, I process each item, and at the end I have what I need:  I'm putting in each item's title the source and target of the comment (that is, their names) and the date.  Each item still contains the link to the comment, also.

But, where do I go from here?  Some ideas and issues related to the first (blue) bubble:

  • I could write some PHP code to get the RSS feed and process each item, generating a GraphML text file on the fly.   Of course, it could be Java as well.  After all, a framework such as Jung includes a lot of utilities now, even to generate the visual representation of a graph...  But I'm not sure if it processes RSS...
  • Um, but what happens when I do the same process the next day?  Would it make sense, then, to put all the RSS info inside a DB, so I can have even more flexibility later?
  • Maybe having things in a DB will let me include more info in the graph.  Let's say, what if the size of the nodes is tied to the amount of posts generated?  That could be useful too...
  • In the end, having a DB will allow me to split tasks.  One thing is to add info from the feed (a daily process, let's say), another one is to generate a GraphML file from that info.  This could be done on demand, and cached for later use.

But what about the second (green) bubble?  The idea here is to go from the text file to a useful visualization.  We could even thing about creating (automatically) animations showing the daily progress of a course, discovering when new nodes (this is, new people posting) appear, and showing new edges as they emerge.

  • The weapon of choice would be Jung, clearly (I still don't know if something as Cyclone has anything to do with this problem).  With that we can get from GraphML to images, I think.  Now, if we want to create PNG animations, well, I still have no idea how to do it.
  • In any case, I'd have to go back to Java (long time no see!) and learn a lot about a lot of things.  And time seems to be a quite scarce resource...

So, where does that leave us?   You get to extract info from the pipes in "real-time" and generate GraphML files from it (or whatever you want) to show the status of the graph at any given time.  This could help to see who's being left behind in the community (because they're not writing nor commenting, for example) in an easy way, which would help in massive courses.  Actually, you could even send specific e-mail messages based on the configuration of the graph (nice!).

And, where do we go from here?  Well, what if you applied the logic of an Open Course to a whole academic program?  What if participating in a course means just tagging your blog posts with a code for that course?  What if we aggregate everything in something such as Elgg, and keep using pipes to distribute content around (as we see fit)?  Would that look like a more decentralized approach to a LMS? With new monitoring tools, more focused on the interactions? With students having more control of their info?

I just don't know.  What I do know is that this approach, as much as I like it, is not scalable.  And if we want to get more serious about being open we will need, eventually, to provide alternative solutions easy to use for administrators, teachers and students, and analytical tools focused on the kind of things we'd like to observe and foster in our students.

Anyway, keep in mind that I'm thinking out loud here.  This is the second time I'm trying this architecture, so there are a lot of things to improve and many others that make no sense at all.  I'm just trying to figure out if it makes sense to work more on this.  So thanks in advance for your thoughts!   :)

Creative Commons License: Attribution, Share-AlikeA excepción de que se indique lo contrario, este contenido está publicado bajo una licencia Creative Commons.

La tecnología detrás de GRYC

El año pasado, un par de semanas después de que empezó ELRN, escribí un post en el que hablaba acerca de la tecnología que estaba detrás del curso.  La idea no es repetir aquí lo mismo que dije allá, así que puede ser una buena idea leer ese post antes de continuar aquí, pues este post corresponde más a una actualización del asunto.

El esquema de tecnología que está detrás del GRYC es, esencialmente, el mismo de ELRN.  Por supuesto, ha pasado algún tiempo que me ha permitido aprender un poco más de algunas herramientas, y algunos procesos de mantenimiento ya no me toman tanto tiempo.  Pero como hay en GRYC algunas personas que han estado en CCK08 y CCK09, creo prudente explicar un poco qué cosas diferencian a la tecnología de este curso de aquella que Stephen ha puesto al servicio de CCK.

Un primer aspecto a tener en cuenta es que, para el caso de GRYC, todos los servicios que son utilizados para compilar y procesar la información de los participantes son públicos y permiten un uso gratuito.  En el caso de CCK, Stephen construyó sobre la funcionalidad de su Grsshopper para facilitar la compilación y republicación de información de los participantes en el curso.  Obviamente, esto hace que la de CCK sea una solución más "a la medida" de las necesidades, y que existan cosas interesantes que yo no puedo hacer.   No obstante, en la medida en que los servicios que estoy usando son públicos, mi esquema es potencialmente replicable por cualquier persona, y no requiere ningún tipo de alojamiento propio para que funcione.  Esa fue una de las intenciones que marcaron mi aproximación a la puesta a punto de la tecnología del curso, que de manera esquemática se ve de la siguiente manera:

 

Otra clara intención fue ofrecer diversidad de posibilidades de acceso a la información, para que cada persona utilizara aquellos más cercanos a su práctica cotidiana.  De allí las diversas opciones de suscripción al contenido del curso (RSS, correo electrónico, Twitter).   Lo bueno es que esta complejidad es bastante transparente para los participantes, quienes envían y reciben información usando un blog, un wiki, diigo y su correo electrónico.  Eso es lo mínimo que se requiere, así que en realidad no hay una saturación de herramientas (digo yo).

Pero bueno, hora de entrar en materia.  En comparación con lo que hice en ELRN, aquí hay algo nuevo, que trata de resolver una pregunta que me hice en ese entonces:  ¿Cómo hacer seguimiento a los comentarios que van surgiendo en los blogs?  Para resolver esto, empecé usando un pipe que usa la información del formulario de inscripción, y que mediante regex intenta cambiar los feeds registrados para las entradas por los feeds de comentarios de cada blog.  Esto es algo limitado pues, por ejemplo, no pude encontrar en wordpress feeds específicos para una categoría determinada, lo cual hace que ese pipe termine compilando todos los comentarios de un blog de wordpress (sin importar que hagan parte o no de posts del curso), y me obliga a tratar de manera individual a otras plataformas... Poco razonable...

Así que hoy encontré otra opción:  Usar el feed RSS de entradas de blogs (que es generado por este pipe) como insumo para un nuevo pipe, que procesa cada post e identifica de manera automática el feed de los comentarios correspondiente, para luego obtener el contenido de cada feed y generar un único feed de comentarios.  Por lo pronto, parece funcionar, pero algo me dice que van a aparecer problemas eventualmente, por razones que escapan a mi control... Por ejemplo, posterous no cuenta con feeds de comentarios, y algo similar puede ocurrir con otras personas que escriben desde otras plataformas (como joomla o drupal, por ejemplo). Eso quiere decir que habrá comentarios que pueden quedarse por fuera, lo que dificulta un poco hacer otras cosas que tengo en mente...

Lo malo de este enfoque es que no encontré una manera de recuperar el título del post, para incluirlo dentro del título del comentario que genero.  Sólo logré obtener el enlace al post, así que no se ve tan bien como yo quisiera.  Ni modo.

Eso por un lado.  Por otro lado, a partir de las ideas de Tony Hirst, me dije hace un par de días que tal vez podía utilizar la información de ubicación del formulario de inscripción del curso (ciudad y país) para generar de manera automática un mapa con la ubicación de todos los participantes.  Con eso en mente, me puse a experimentar con Pipes, en donde tuve que resolver algunos detalles con los que Tony no se encontró.

El módulo Location Extractor de Pipes funciona de manera algo errática, y obviamente en inglés, así que tuve que cambiar "España" por "Spain", por ejemplo, así como algunas tildes en diversas ciudades reportadas por los participantes.  Cambié uno por uno los registros de inscripción (lo que me mostró que para la próxima es importante separar el campo "país" del campo "ciudad", lo que no hice en esta ocasión), y al final terminé usando el módulo Location Builder dentro de un iterador para generar los datos de geolocalización.

Además de eso, una pequeña manipulación de texto para incluir junto al nombre de cada persona su ocupación (que también es obtenida en el formulario).   Tal como lo demostraba Tony, al final exporté el resultado del pipe en formato KML (Sip, Pipes exporta Keyhole Markup Language) y lo incluí dentro de Google Maps, para lograr un resultado que me dejó MUY contento (note que en México, Argentina y España hay varios globos!):


View Larger Map

Entonces, a partir de una hoja de cálculo de Google Docs, estoy generando de manera automática un mapa con la ubicación de todos los participantes del curso, que además se actualiza cuando alguien nuevo se inscribe, sin que yo tenga que intervenir.

Fantástico.

Pensando en las cosas que no funcionan como en CCK, estoy haciendo algunas pruebas para incluir dentro del Diario de GRYC los twits relacionados con el curso, que incluyan la palabra GRYC y estén escritos en español.  El asunto se ve prometedor, pero necesito algo más de tiempo para probarlo con el contenido que sea generado por el curso.

Por último, durante ELRN sentí la falta de un mecanismo (adicional al correo electrónico) que me permitiera notificar de asuntos importantes a los participantes.  Así que creé un blog en posterous, que también es compilado en el Diario de GRYC.  Ahora, para que sea funcional, será necesario que los posts que se escriban allí se publiquen poco antes de la hora de envío programada en Feedburner, para que esos mensajes "administrativos" queden de primeros en el correo.

¿Qué otra cosa? La limpieza y verificación de feeds, y el contacto por correo con todos los inscritos, me llevó alrededor de cinco horas.  Pienso que este tiempo podría reducirse sustancialmente si se contara con una sesión presencial dedicada exclusivamente a lo tecnológico, y al aprendizaje de las ideas detrás de RSS.  En todo caso, en esta ocasión tenía mucho más claro cómo ajustar cada feed, y de hecho muchos más participantes registraron la información de manera adecuada, en comparación con lo que viví en ELRN.

Uno siempre podría decir que la vida sería más sencilla si simplemente usara un LMS.  Y me temo que eso es cierto.  No obstante, hay todo un asunto de control de la información por parte de cada participante y de demostración de cómo articular la tecnología para facilitar el seguimiento a un entorno desestructurado y distribuido, que me parece no sólo importante, sino muy interesante.  En ese sentido, diría que todo esto es un ejemplo demostrativo, de hecho.

Ejemplo que, de hecho, tiene unas consecuencias MUY interesantes cuando empieza a pensarse en mayor escala.  Por ejemplo, ¿qué significaría que un esquema como este fuera implementado a nivel de un programa académico completo?  ¿Qué cambia no sólo en términos tecnológicos, sino pedagógicos?  Para mi, esa todavía es una atractiva pregunta que, de hecho, lleva a otro nivel mi aproximación a la Educación Abierta, y que parece que voy a tener la oportunidad de explorar en más detalle en el futuro próximo..  :D

Por lo pronto, esos son los mayores cambios que he realizado a la tecnología detrás del curso.  La mayoría de ellos tras bambalinas, pero buscando facilitar un poco más la eventual replicación de este tipo de esquema.  Sin duda, todavía se puede mejorar mucho más en este sentido pero, considerando que esta es apenas mi segunda vez poniendo a prueba todo este esquema, creo que el resultado se vuelve interesante y empieza a mostrar posibilidades con un increíble potencial.

Si usted llegó hasta el final de este post, muchas gracias!  Este es uno de esos posts un tanto técnicos y, en consecuencia, algo hostiles para muchos de nosotros. ;)

Creative Commons License: Attribution, Share-AlikeA excepción de que se indique lo contrario, este contenido está publicado bajo una licencia Creative Commons.

Lo que aprendí en 2009

Me prometí que no dejaría que terminara el mes de Enero sin completar mi reflexión sobre lo que aprendí el año anterior, la cual de hecho es muy importante para aclarar ideas y descubrir nuevas cosas en las que podría (o debería) profundizar.  También siento que es algo que en realidad necesito, pues mi perspectiva en este momento es algo pesimista, y tal vez regresar sobre lo que ocurrió en el año me permita ver muchas cosas en su justa dimensión.

2009 fue un año con menos tensiones que 2008, o al menos, con tensiones de otra naturaleza.  Fue el primer año en el que no tuve una vinculación laboral estable, lo cual trajo consigo un altísimo nivel de incertidumbre, que todavía estoy tratando de aprender a manejar.  Sin embargo, al mismo tiempo 2009 fue tal vez el año en el que más viajé, y estuvo lleno de oportunidades de ver otras realidades, de ir más allá de muchos estereotipos, y de empezar a descubrir una complejidad que había sido invisible durante mucho tiempo.

¡Leer más! »

GRYC: Grupos, Redes y Comunidades (edición 2010)

Por una confluencia de factores que generaron una "tormenta perfecta", el curso abierto de Grupos, Redes y Comunidades que inició el año pasado fue aplazado para continuar este año.  Después de analizar todo el panorama, decidimos hacer "reboot" e iniciar nuevamente sus actividades, con algunos cambios de diseño y un montón de lecciones aprendidas.

GRYC es un curso de ocho semanas ofrecido como parte del programa de maestría en ingeniería de la Universidad EAFIT, en el cual se realiza una exploración general de los procesos de creación y desarrollo de grupos, redes y comunidades, con énfasis en el papel que la tecnología juega en ellos y en la distinción entre los elementos propios de cada forma de organización.

Debido a su corta duración, es un curso de carácter introductorio, pero que busca dar a los participantes elementos para proseguir por su cuenta el proceso de exploración en estos temas, a partir de una vivencia de primera mano de diversas plataformas tecnológicas y del desarrollo de las habilidades reflexivas y críticas.

Esta edición del curso irá desde el martes 2 de Febrero hasta el 31 de Marzo de 2010, y se ofrece como un curso en línea que tiene tanto modalidad formal como modalidad abierta.  Esta última hace posible que cualquier persona interesada pueda hacer parte de las actividades propuestas, pero sin recibir a cambio certificación ni retroalimentación formal.

Así que si usted está interesado en hacer parte de esta edición de GRYC, o quiere saber más al respecto, lo invito a visitar el wiki creado para el curso (http://gryc09.pbworks.com), en donde encontrará información detallada sobre las condiciones, características y temas del curso.  Si se anima a acompañarnos en estas semanas, no dude en inscribirse.

Technorati: