Miso Project, facilitando la vida del desarrollador Javascript

De los creadores de Popcorn.js, Bocoup, y The Guardian, me encuentro con Miso Project, cuya intención es acelerar la creación de contenido para visualización de datos con una alta calidad de interacción. La primera cosa que han liberado es Miso Dataset, que permite manipular ficheros de entrada como los CSV's en cliente (o servidor mediante Node.js) de una manera bastante sencilla y flexible. A ver cómo es la acogida del proyecto, pero desde luego parece tener buen color.

Mientras tanto podéis seguir los avances en su cuenta de twitter (@themisoproject) o en GitHub. Además de una galería de ejemplos en los que aúnan d3.js, Backbone.js y cosas más nuevas como Rickshaw, un toolkit para crear gráficos de series temporales que también tiene unos bonitos acabados.

Visualización de grafos usando Hive Plots

Inline image 1

Una curiosa y novedosa forma de representar grafos grandes llamada Hive Plots. Además, el amigo Max de Marzi nos trae una aplicación en GitHub creada por  Rich Morin y Mike Bostock para aplicarla a Neo4j a través de consultas Gremlin y salidas en JSON. La parte gráfica descansa, como viene siendo habitual, en D3.js, e incluso hay una instancia de Heroku para ver el resultado final en vivo.

Básicamente la idea consiste en agrupar en ejes los nodos con el mismo rango de grados para, a partir de ahí lanzar las correspondientes aristas. Lo potente del sistema es precisamente ese rango de grados de incidencia en el que se clasifican los nodos, pues permite uniformizar cualquier grafo de tamaño considerable.

Fue presentado a finales de 2011 por Krzywinski M, Birol I, Jones S, Marra M como Hive Plots Rational — Approach to Visualizing Networks, en Briefings in Bioinformatics (9  de Diciembre de 2011, doi: 10.1093/bib/bbr069, citación).

 

Kartograph, otra forma de hacer mapas

Inline image 1

Kartograph se trata de una alternativa, en principio pensada para diseñadores y «periodistas de datos», que pretende por una parte facilitar la creación de mapas más bonitos que los que proporcionan Google, Bing or CloudMade, y por otra eliminar precisamente la dependencia de servicios o productos de terceros y alojar todo el contenido por uno mismo. Aunque menos interactivos en el sentido de navegabilidad, permiten una gran variedad de opciones, que pasan por el recorte de bounding boxes para mostrar países o zonas específicas, o la aplicación de distintas proyecciones, incluso algunas en 3D.

Internamente se compone de una biblioteca en Python alojada en GitHub (y con licencia AGPL) para la creación de los ficheros SVG que componen los mapas. Luego, estos mapas vectoriales son integrados en cliente a través de otra pequeña y sencilla biblioteca Javascript. En tándem parecen funcionar realmente bien, dando unos resultados visuales muy atractivos y agradables, con la ventaja de ser gráficos vectoriales que eliminar el problema del escalado y resolución de las imágenes y la de que todo queda alojado en nuestro propio servidor.

Así que si para tu problema los servicios actuales de mapas son demasiado monstruosos o simplemente no quieres estar atado a un proveedor o los cambios en sus políticas de uso, o necesitas dar un aire más artístico a tus visualizaciones, Kartograph puede ser de gran utilidad.

Además reciben el apoyo de Piwik y la Open Knowledge Foundation.

The Mozilla Lab Apps Project

Uniéndose a la moda de las AppStores, Markets, etc. Mozilla quiere lanzar una plataforma de aplicaciones multi-plataforma basándose en HTML5 y PhoneGap, básicamente. Es muy interesante, por ejemplo, ver cómo serán los juegos y las bibliotecas que ya están disponibles por ahí para su creación; así como la infraestructura para soportarlo todo, incluyendo almacenamiento seguro de la información de los usuarios o sistema de sincronización, y en la que encontramos mucho Python con Django o Pyramid, pero también otras cosas como Node.js o HBase.

Será interesante ver en qué queda esto. En el peor de los casos, todo es software libre y quedará para la comunidad.

Crea tu servidor de máquinas virtuales

phpvbsm.png

Hace un tiempo que por necesidades laborales vengo investigando las distintas opciones para instalar un servidor de máquinas virtuales, o algo que se le parezca. Sin embargo, como usuario asiduo de VirtualBox, las opciones como Proxmox, si bien más completas y profesionales, pueden resultar demasiado complicadas para el usuario de a pie.

Es por eso que el modo headlesss de VirtualBox puede sernos útil. A través de él se pueden gestionar todas las opciones de las máquinas virtuales, desde su creación hasta las opciones de configuración, de manera que mediante la línea de comandos se controlen las máquinas instaladas y su ejecución.

Todas las opciones de vboxmanage, el comando de consola de VirtualBox, están relativamente bien explicadas en su manual. Pero sería incluso más fácil si pudiésemos gestionar nuestras máquinas desde una interfaz web. Es en este punto dónde entra phpVirtualBox. Se trata de una aplicación escrita en PHP que se comunica con un servicio web proporcionado por VirtualBox, vboxwebsrv o vboxweb-service, según la versión, y que tiene la misma apariencia y funcionalidad de la interfaz de escritorio.

Quizás, lo único que nos faltaría, es poder acceder a los servicios que despleguemos en nuestras máquinas virtuales a través de una dirección pública. Y para ello VirtualBox ya proporciona un port-forwarding que sirve exactamente para eso, incluso desde el mismo phpVirtualBox se pueden enlazar los puertos 80 y 22, para acceso web y SSH, a, por ejemplo, el 8080 y el 2222. De esa manera se habilita el acceso a la máquina virtual con un simple comando:

$ ssh -p 2222 <user>@ip.maquina.host

Dónde <user> es ya cualquiera de los usuarios configurados en la máquina virtual. Como recomendación, y puesto que los servidores no suelen tener interfaz gráfica, no es mala idea crear una plantilla de máquina virtual que venga ya con el servicio de SSH instalado, para evitar problemas. La otra opción posible es habilitar el acceso por RDP mediante el pack de extensiones de VirtualBox y entonces acceder a la interfaz gráfica de la máquina virtual mediante un comando del tipo (suponiendo activo y libre de firewall el puerto 3389 para eso):

$ rdesktop ip.maquina.host:3389

Y eso es todo. Una forma de tener tu propio monitor de máquinas virtuales, rápido, sencillo y para toda la familia.

¿Cuántas frases en inglés se producen en un año de Internet?

Para contestar a eso primero necesitamos un dataset lo suficientemente grande como para ser representativo. Digamos por ejemplo que tenemos uno de 30TB. Ésa es la cantidad de datos que la gente de Common Crawl ha recolectado en los 12 meses que van desde Septiembre de 2009 hasta Septiembre de 2010. Se trata de una organización sin ánimo de lucro radicada en California y fundada por Gil Elbaz, creador de factual, sitio especializado en clasificar el contenido de la web y proporcionarlo a sus usuarios y desarrolladores. Para acometer semejante tarea cuentan con un web crawler al que han denominado ccBot (identificado por la siguiente cadena de agente de usuario: User-Agent string:CCBot/1.0 (+http://www.commoncrawl.org/bot.html)). Para hacer posible la recolecta de datos cuentan con un centro de datos interno que contiene varios conjuntos de servidores, incluyendo un cluster Hadoop y todo un banco de estos ccBots dedicados en exclusiva a la tarea de recorrer la Web. Una vez hecho esto, transfieren todos los contenidos a otro cluster HDFS, desde donde disponen de varias tareas programadas MapReduce para procesar el contenido y archivarlo en ficheros ARC (el mismo formato usado en archive.org) comprimidos de unos 100MB. Por último estos ficheros se suben a un bucket S3 de Amazon y se ponen a disposición de quién los necesite.

De esta manera, Common Crawl, según sus propias palabras «democratiza el acceso a la información web, produciendo y manteniendo un repositorio abierto de datos recolectados de la Web que es universalmente accesible».

Por otra parte, Mat Kelcey describe en su interesante blog una serie de pasos para procesar toda esta información y dividirla en frases sencillas. Muy resumidamente estas fases son:
  1. Obtener los datos. Es decir, enviar lo 300 000 ficheros ARC comprimidos a un cluster Hadoop propio.
  2. Filtrar por mimetype y quedarse sólo con el texto en HTML, aunque no parece complicado quedarse con otros formatos. Para ello Mat Kelcey usó los proyectos Apache Nutch, un buscador Web Open Source, y Apache Tika. un toolkit que permite extraer metadatos y texto estructurado de una variedad de documentos de entrada.
  3. Extraer el texto visible. Lo que implica el uso de boilerpipe para separar el contenido del texto de las etiquetas y cosas así.
  4. Filtrar sólo el contenido en inglés. A partir de una de las herramientas de Apache Tika, LanguageIdentifier, no parece complicado obtener el idioma de un texto dado. Aunque ya vimos que existen otras opciones, incluso en Python.
  5. Tokenización. Pero usando el parser estadístico de la Stanford University para procesamiento del lenguaje natural.
El resultado: 92 mil millones de frases, en inglés, claro. Aunque este procedimiento podría aplicarse al resto de idiomas del dataset, lo más importante bajo mi punto de vista es la aparente sencillez con la que se consigue tener funcionando una infraestructura tan compleja como la descrita, impensable hace, digamos, 5 años, y al alcance de cualquiera hoy día.

Detección de idioma en Python

languages-625x545.jpg
(Fuente: FlowingData)

A raíz de un artículo en FlowingData sobre las distintas comunidades en Twitter de acuerdo al idioma, me entero de que el navegador Google Chrome trae la detección de idioma integrada, es decir, que no hace una petición a ninguno de los servicios de Google para averiguar en qué idioma está la web que estás visitando, por si quisieras traducirla, sino que esa detección la hace un componente del navegador llamado CLD, siglas de Compact Language Detector. Al parecer, este componente, que funciona sobre cualquier texto codificado en UTF-8, es relativamente independiente, de manera que un avispado desarrollador ha sido capaz de extraerlo del proyecto original y colocarlo en su propio repositorio listo para ser integrado en cualquier código C++.

Lo mejor de todo es también ha creado unos bindings Python para que se pueda utilizar de una manera tan sencilla como la siguiente:

    #python
    import cld
    topLanguageName = cld.detect(bytes)[0]

Es decir, con una única línea de código puedes distinguir entre más de 160 idiomas para un texto dado. Impresionante.

Pero hay más, y es que los comentarios de la entrada, hay un tal Marco Lui que dice haber escrito un código 100% Python para hacer eso mismo basándose en una investigación que estaba llevando a cabo y cuyos resultados mostrará en el congreso IJCNLP2011. Puede encontrarse el fichero en su repositorio de GitHub, langid.py. Y lo más sorprendente de todo es que, tras probar en 18 de las lenguas de Europa el código se comporta increíblemente bien, con un 99,20% de aciertos (17 856 sobre 18 000 pruebas), en comparación con el 99,26% de aciertos (17 866 sobre 18 000) del sistema de detección de idioma escrito en Java language-detection --en el que, por cierto, hay features en JSON para un buen montón de idiomas y llegan hasta los 3-gramas. Vale la pena echar un vistazo a los del Español, tan sólo con esa información puede calcular que se trata de la lengua de Cervantes. En cambio, los modelos de langid.py están contenidos en una enorme cadena Python codificada. Aun así, es un muy buen recurso a tener en cuenta.

Herramientas para el nuevo aula

Navegando por el sitio para desarrolladores StackOverflow, me llama la atención una oferta de trabajo para Python/Django en Waterloo (Ontario). Resulta que la empresa Top Hat Monocle desarrolla y comercializa una herramienta para impartir clases de manera que se usen todas las posibilidades de los alumnos de hoy, a saber, móviles, tabletas, portátiles, etc. (además están en proceso de contratación buscando programadores con perfil Django ;-) ).

Por otra parte, y casi de manera simultanea, Joaquín Borrego, investigador de la Universidad de Sevilla, publicaba en su twitter la aparición de otra herramienta que resulta muy similar: LectureTools. Impulsada por la University of Michigan, la herramienta será usada a partir de este septiembre y contará con un número de usuarios cercano a los 4000. Una muy buena prueba de fuego para saber si este tipo de soluciones realmente tiene sentido. No obstante, desde la propia universidad defienden que su método mejora de forma significativa la atención y participación de los estudiantes.

Sin duda, y teniendo además en cuenta la reciente inversión de Google para un nuevo centro de Game Learning en el MIT, parece que está a punto de emerger una nueva tendencia
en el arte de impartir y recibir clases. Sin embargo, estos anuncios merecen una reflexión un poco más profunda, puesto que en realidad se trata, bajo mi punto de vista, de una solución a corto plazo al problema de la progresiva infantilización de los estudiantes. Es comprensible que el profesorado se esfuerce por hacerse llegar al alumnado, pero estos últimos también deben comprender y asimilar lo que significa e implica la enseñanza no obligatoria en sus procesos de madurez. Crear un entorno de aprendizaje que llegue a difuminarse con el tiempo de ocio de cada cuál puede provocar el mismo rechazo por aburrimiento que cualquier juego de vídeo-consola habitual. La clave, imagino, está en equilibrar los dos mundos.