Words.cat | Ve vídeos de YouTube y aprende idiomas

En el siguiente artículo voy a escribir sobre el proceso de creación de una nueva aplicación que tengo en mente. Relacionada con el aprendizaje de idiomas, su finalidad es la de aprender nuevas palabras en un idioma dado consumiendo contenidos reales, haciendo uso de:

  • Vídeos de YouTube
  • Noticias y posts en blogs
Este proyecto es la continuación de un proyecto anterior que dejé a medio terminar, Des Mots (palabras, en francés). En aquel proyecto quise crear un diccionario con funcionalidades adicionales como historial de palabras buscadas (para poder repasarlas más tarde) o uso real de las palabras en Twitter, por ejemplo.

Así pues, aprovecho la mayor parte del trabajo realizado por entonces: extracción de una base de datos de palabras, sus frecuencias, servicios de traducción y pronunciación (Forvo dispone de una API muy útil), ejemplos, etc. Realmente voy a descartar algunos de los servicios que quise añadir en su momento, como búsquedas de la palabra en Internet (con la API de Yahoo) porque en este caso no es tanto un “diccionario con esteroides”, sino un lugar en el que aprender nuevo vocabulario mientras consumes ocio en el idioma real.

La idea, por cierto, es automatizar – al máximo – todo el proceso (extracción de palabras, generación de ejercicios, filtrado de contenidos), por lo que el proyecto se convierte en todo un reto para mí como desarrollador.

  • Las palabras las extraemos de Wiktionary, N-Grams de Google y otras ontologías
  • Los vídeos de YouTube, de su API, a la cual podemos llamar con el parámetro “videoCaption”, que nos devolverá únicamente vídeos con subtítulos (de los cuales extraeremos las palabras a estudiar)
  • Para los artículos probablemente tengamos que añadir manualmente los selectores DOM que nos traigan el cuerpo / título del artículo y tengamos que realizar un filtrado previo de qué medios queremos utilizar.

A continuación voy a colocar unos wireframes de cómo veo que sería el comportamiento de la aplicación (sin extras todavía como login de usuarios, gamificación, historial de palabras estudiadas, etc.).

1. Home

En una primera versión la home será un listado “infinito” de contenidos para los cuales ofrecemos una serie de palabras a aprender con ellos.
1. Home

2. Contenido (I): Selección de palabras

Un listado de 5-10 palabras que el usuario podrá modificar para seleccionar las palabras que más le interese aprender. Ya que el proceso de extracción de palabras será automático, esto ayudará a que las palabras a estudiar sean las óptimas para el estudiante.

2. Select Words

3. Contenido 2: Ejercicios

Una serie de cards de ejercicios al más puro estilo DuoLingo con el que el usuario aprenderá el uso de las palabras.

3. Exercises

4. Contenido 3: Visualización

En esta vista el usuario ya visualiza el contenido (vídeo con los subtítulos/artículo) junto con un resumen de las palabras y su significado / traducción. Esta sería la vista objetivo de todo este proyecto, ya que es el momento en el que el estudiante consume contenidos reales en los que se hace uso de las palabras estudiadas.

4. Watch Video
En mente tengo muchos añadidos:
  • Búsqueda: el usuario busca una palabra y el sistema le devuelve contenidos reales en los que se utiliza esa palabra.
  • Historial: cada palabra estudiada queda guardada en un historial que se puede volver a repasar para recordar las palabras estudiadas.
  • Subtítulos de películas y series: este proyecto realmente nació con la intención de crear ejercicios que consumir antes de visualizar series en VO. Imagínate ver un capítulo de Game of Thrones para el que, además, has estudiado 5-10 minutos antes, aquellas palabras que no conocías. El problema de las pelis y las series es que el idioma rey es el inglés y es poco escalable al aprendizaje de otros idiomas.
  • Gamificación: otorgar puntos por cada contenido visualizado / ejercicio hecho, para lograr que el usuario sienta aún más que cada ejercicio realizado le ayuda a aprender.
  • Idiomas: de momento empezamos con el francés. Los siguientes idiomas a añadir serían: inglés, español, alemán, italiano y molaría en un futuro añadir idiomas como ruso, japonés o chino. Euskera no lo descarto tampoco y otros idiomas regionales como catalán (el uso del dominio .cat igual me “obliga” a hacerlo antes) o el gallego.
Si te interesa, el proyecto está subido en mi GitHub:
https://github.com/ojoven/wordscat

Próximamente iré contando más novedades.
Espero, por cierto, que este proyecto no se vuelva a quedar colgado en el candelero como muchos otros. Es cierto que tengo ciertas dudas de la consecución de este proyecto porque su alcance es bastante amplio y aún queda mucho por hacer. Amadeus, el último proyecto del que hablé aquí no lo he terminado ni tengo intención de hacerlo, por cuestiones de prioridad.

Salut !

Amadeus (II) Prototipo y Base de Datos

Post continuación de Amadeus: culturízate en música clásica (I)

Vamos a cambiar la estrategia.

En lugar de preocuparnos del problema de obtener la información de manera automática – a base de scraping y filtrado – vamos a empezar a construir la aplicación desde el otro lado: del lado del usuario.

Para ello, vamos a construir un prototipo de lo que será la aplicación, y construiremos en este “episodio” la estructura de la base de datos sobre la cual trabajaremos.

Un pequeño prototipo

El prototipo es el siguiente:
prototipo(qué full queda hacerlo en boli azul y sacarle una mala foto con el móvil, dieu)

El prototipo de la app incluye:
  • Título / Logo de la app
  • Pequeño slogan / what the hell is this about (“Aprende música clásica”, le daremos un toque marketiniano)
  • Lecture / Lección: aquí vamos a añadir un desplegable con la lección que queremos aprender.
    • En un principio había pensado en un desplegable doble. En el primero, qué tipo de lección (general / compositor / época / tipo de obra). En el segundo la lección concreta (Vivaldi, Música romántica, Requiem). En lugar de ello usaremos barras separadoras en el desplegable; la idea es mantener la app lo más minimalista posible.
  • Slider música vs. aprendizaje. Este slider, que creo que puede ser curioso y usable, nos indicará el ratio de información que vamos a utilizar respecto de la música que sonará. Ejemplo: un ratio de aprendizaje bajo simplemente nos indicará el nombre de la canción antes de que esta suene. Un ratio alto nos dará 4-5 perlas informativas – veremos exactamente – antes de cada canción. Un añadido que en lugar de complejizar, me da la sensación que transmite la idea de “juego”.
  • Botón de Play: que comience la música.
El prototipo es el estado inicial de la app. Aparte de este estado, tenemos únicamente uno más, cuando la “lección/música” está en play.

Una vez que comienza la música / voz en off informativa, el play se convertirá en un pause y comenzaremos a observar el vídeo de YouTube* cuando suene la canción, y el texto informativo cuando se esté leyendo por la voz en off.

* ¿o pista de Spotify? ¿tú qué usarías? coméntame por Twitter si lees esto y tienes una preferencia

La base de datos

Bueno, vamos a construir ahora la base de datos:
database1
La base de datos está subida a GitHub:
https://github.com/ojoven/amadeus/blob/master/db/amadeus.sql

Algunas ideas:

  • Esta es una versión simplificada de la base de datos, únicamente con aquellas tablas, campos estrictamente necesarios. He renunciado a introducir de momento “épocas” de la música clásica, también estilos de composición (sinfonía, requiem, etc.). En un momento pensé en introducir instrumentos (es más, creé las tablas apropiadas) pero vamos a quedarnos en lo muy básico para comenzar; ya habrá tiempo de añadir opciones si fuera necesario.
  • Hay 2 tablas para las lecciones, unas relacionadas directamente con los compositores (lessons_composers) y otras con las obras (lessons_compositions). ¿Podríamos tenerlas todas en una misma tabla, quizás, añadiendo un campo “type_lesson”? Es otra opción, ahora mismo no veo claro cuál es mejor de ambas, aunque esta separación me resulta interesante ahora mismo – más limpia – probablemente sea menos escalable – si tenemos que crear una tabla por cada tipo de lección que podamos añadir en el futuro (lessons_instruments, lessons_periods, etc.)
  • Hemos añadido un campo “relevance” en las tablas de lecciones ya que eso sí parece básico que algunas lecciones serán mucho más relevantes que otras (cuándo nació el compositor, etc.) si queremos que la app realmente nos de buena información.
  • Como anécdota, veréis que aunque probablemente (aún no está 100% decidido, pero casi) la app sea en español (puesto que el público objetivo sois vosotros y yo, que quedará en familia, vamos) el código, y la base de datos están en inglés. Eso siempre, en todos mis proyectos, my friends.
Esto es todo por hoy.
Como pequeña reflexión decir que documentar el proceso mientras lo voy desarrollando está resultando muy interesante, aunque es cierto que me frena en el propio desarrollo. Tendré que buscar un buen equilibrio entre contar lo que estoy pensando/haciendo, y hacer ;)

Salut!

Amadeus: culturízate en música clásica (I)

Idea

Crear una webapp que nos forme en música clásica al mismo tiempo que la escuchamos.

El background para esta idea viene de este hilo de tweets:


La idea de Amadeus es muy sencilla. Es habitual en ciertas personas escuchar música clásica mientras trabajan – ya hablaremos de cómo podemos aplicar esta idea a otros estilos musicales. Qué pena que escuchemos la música y sin embargo no aprendamos de ella. Esto es, quiénes son los grandes maestros compositores de música clásica, de qué época fue cada uno de ellos, cuáles son sus obras más famosas, qué tipo de obras creaban (óperas, sinfonías, requiems), qué historia hay detrás de cada obra.

Toda esa información está disponible en Internet – un vistazo a la Wikipedia y vemos la ingente cantidad de información para cada una de las obras – pero tenemos que salirnos de nuestra lista de reproducción para acceder a ella ¿y si llevamos esa información a nuestros oídos, a nuestra lista de reproducción?

Esa es la idea, escuchar un playlist de música clásica al mismo tiempo que una voz nos da ciertas perlas formativas que nos ayudan a saber más sobre este estilo musical, sus compositores y sus obras.

Cómo: problemas y soluciones

Necesitamos un listado de compositores

Esto es fácil, una simple búsqueda y obtenemos un top 50 compositores de música clásica, además, ordenados por importancia:
http://www.discogs.com/lists/The-50-Greatest-Composers/1571

Necesitamos un listado de obras para cada compositor

Esta es “fácil” también porque Google no solo te muestra las obras de cada compositor, sino que además las ordena por relevancia también:
wolfgang amadeus mozart compositions   Buscar con Google
Para extraer las obras de todos los compositores hemos creado un pequeño script que scrapea los resultados.

Primero guardamos el HTML de la búsqueda:
saveHtml
Y luego parseamos con nuestro querido Simple HTML DOM

extractComposition

OK, ya tenemos la lista de las obras más relevantes para cada uno de los 50 compositores:
compositions


Necesitamos información para cada una de las obras

Ahora es cuando vienen ciertos problemas.

Podemos extraer información sobre cada una de las composiciones de sus páginas de Wikipedia.
Ejemplos para obras de Mozart:
La Flauta Mágica: https://es.wikipedia.org/wiki/La_flauta_m%C3%A1gica
Don Giovanni: https://es.wikipedia.org/wiki/Don_Giovanni

Un rápido estudio nos muestra que muchas de las obras de los compositores tienen su correspondiente página en Wikipedia – y, por tanto, información valiosa sobre su historia, estilo, época, etc.

Los problemas para extraer esa información de manera automática se resumen en los siguientes puntos:
  • Algunas obras tienen página en la versión inglesa de la Wikipedia, otras también en la española. ¿Qué idioma por defecto utilizaremos? Este dilema va más allá de las páginas de Wikipedia de las obras, y nos plantea cuál va a ser el público objetivo de este proyecto.
  • Relacionar título de la obra con su correspondiente página en Wikipedia no está resultando un proceso inmediato, ya que:
    • Las APIs de búsqueda de Wikipedia no son demasiado UXables
    • Los nombres de algunas obras se repiten entre compositores (Sinfonía nº5 – Beethoven/Tchaikovsky). Esto complica asociar título / compositor con página de Wikipedia.

Seguiremos trabajando para tratar de resolver estos problemas, porque si no, la alternativa sería la asociación manual de páginas de Wikipedia con las composiciones, y teniendo en cuenta que tenemos +10 obras por 50 compositores nos plantamos en +500 asociaciones manuales – un trabajo que realmente no sería grato de hacer – rebajaríamos expectativas, in any case.

En un próximo post contaré cómo voy a resolver estos problemas y cómo una vez que vayamos recogiendo información valiosa la vamos a ir mostrando al usuario en la aplicación final.

Por cierto, que si a alguno le interesa, el código está subido en mi cuenta de GitHub:
https://github.com/ojoven/amadeus

La fórmula

¿Cómo seducir con la narrativa? ¿Acaso no debemos alejarnos de las persuasivas aguas cálidas de la seductora manipulación? Es el cerebro quien debería escrutar las ideas y tomar la decisión – como la toman los mandamases nórdicos, fríos y sensatos – de lo que es inteligente y lo que no. ¿Revestir nuestras palabras con un manto embriagador? ¿Reducir las defensas del lector con una prosa alcoholizada, coloreada, musical, para después enterrar en su mente la semilla de un argumento racional – y razonado? ¿¡Por qué no!? ¿Acaso no sufrimos ya un entorno metalizado, numérico y rígido, como el plano delineador de un arquitecto?

Además, ¡que los números tienen alma! El uno eres tú, soy yo, solos, enteros, aislados; el 2 es la compañía, el intercambio, el brazo, la mezcla y la integración. Mmmmm, integración e integradas, la división, la suma, la resta y la derivada. ¿Cómo hemos derivado en esta orilla del pensamiento, donde lo lógico y lo bello se dan la mano? Ah sí, para llegar a la conclusión de que la matemática – la ciencia más precisa del pensamiento humano – puede verse salvada de ahogarse en las frías aguas del tedio con el salvavidas de la poesía.

Y si ella puede, cualquier otra área racional – y razonable – también puede. Lo que ocurre es que quizás nos alejemos de ella, con miedo, pues para la argumentación revestida y emocionada – al contrario que para aquella que es matemática y estricta – no existe una única verdad, una única fórmula.

Charla EHU Noviembre 2014 – Desarrollo Web

Hoy David López (@lopezator) y yo hemos dado una charla a unos 50 alumnos del grado de Informática de la Universidad del País Vasco.

Hemos hablado de tecnologías y metodologías que se usan actualmente en el desarrollo web desde el prisma de nuestra propia experiencia como desarrolladores.

CSS3, AJAX, ORMs, APIs, Composer, Git, Clean Code, MVCs, etc. son diferentes conceptos que les hemos presentado, que muchos de ellos desconocían. Aquí podéis ver la presentación:


El año pasado hicimos esta misma charla pero presentándoles aún más conceptos / tecnologías / metodologías y nos salió una charla un poco saturada. Es por eso que este año hemos quitado cosas que aun siendo interesantes (Angular, Node, Amazon AWS, Patrones de diseño…) iban a añadir algo de ruido.

La charla ha tenido su parte práctica, también, en la que David les ha mostrado en tiempo real, por ejemplo, cómo crear un repositorio Git en Github y hacer push sobre él. Yo, por mi parte, quería enseñarles algo de código y para ello creé unos pequeños ejemplos que les motivaran a salsear con CSS o jQuery, y qué mejor que con un plugin como raptorizeme:

screenshot2
O con este ejemplo improvisado de capitales de países para que vieran cómo funciona AJAX:

screenshot1
Todos los ejemplos se pueden encontrar aquí:
http://ojoven.es/labs/ehu2014/

Y el GitHub correspondiente:
https://github.com/ojoven/ehu2014

La verdad es que hemos disfrutado mucho con la charla y nos ha encantado darnos cuenta de que hay alumnos que están muy motivados con esto del desarrollo web.

El año que viene repetimos.

Un ciudadano, un político

Voy a dejar aquí constancia de un documento que escribí en su momento y que tenía almacenado, cogiendo polvo, en los cajones de Drive. La idea está relacionada con la autocrítica que debemos realizar como ciudadanos y la necesidad de buscar un acercamiento a los políticos desde un enfoque emocional. Ahí va:

Un ciudadano, un político

Idea
Crear una campaña donde tratemos de transmitir la necesidad de que los ciudadanos ejerzan el poder político acercando su visión humanizadora a los agentes políticos, sociales y económicos.

Mensaje
El político es humano. El político es corrupto, no empático, egoísta. Repetimos, el político es humano. Como tú.

Formato

Web. Minisite. Manifiesto + Vías de acercamiento

Vías de acercamiento

  • Perfiles en twitter de los políticos.
  • Las trampas de la réplica repulsiva.
  • Sugerencias de comunicación

Ideas para el manifiesto

  • Como ciudadano sé que tú, político, juegas con otras reglas.
  • Esto no es una campaña puntual. Es educación, es filosofía política.
  • Mensaje personal. Acercamiento de la izquierda y la derecha. La izquierda tiene ideas de progreso y la derecha no es tan hipócrita respecto de la ambición individual y el estado de bienestar.
  • Cada mensaje de repulsa a un político es una oportunidad desperdiciada de acercamiento a una ética humanizadora en la que prime el sentido común y de justicia.
  • El mensaje debe conciliar el ataque emocional con el alumbramiento intelectual.
  • Nuestra repulsa debe ser hacia aquellas fracturas éticas que todos, tanto ciudadanos no políticos, como ciudadanos políticos compartimos: egoísmo e individualismo, falta de empatía hacia el sufrimiento ajeno y falta de autocrítica, por mencionar algunas.
  • Es necesario sustituir la desidia que produce el pensar en renunciar a ciertos privilegios con nuevos valores humanos que llenen el vacío que produce el no estar conectado a tus semejantes.
  • Es irresponsable exigir la renuncia de los privilegios que ostentan los políticos mientras que las personas no políticas también tratan de alcanzarlos.
  • El objeto de las ambiciones cambia cuando sufrimos lo que podríamos denominar “golpes existenciales”: enfermedades, pérdidas de seres queridos, trastornos emocionales profundos, depresiones, etc.
  • Para que el mensaje funcione, debe reflejar una actitud adulta, madura, evitando la hipocresía que caracteriza en ocasiones a ciertos movimientos ciudadanos.
  • Ejemplo de hipocresía: pedir justicia en el mundo desde un iphone. Es hipocresía.
  • Ponerte en la piel de una persona desfavorecida te da una visión más realista de la cantidad de lujos o privilegios que damos por sentados y que creemos que merecemos por justicia: amplia gama de electrodomésticos, comida asequible, conexión a Internet, coche, gas natural, calefacción y aire acondicionado…Y tú, ¿a qué renuncias?

Medios
- Menéame
- La información
- Añada aquí todos sus medios preferidos

Hashtag de la campaña
#ciudadanoPolítico

Ser freelance internacional está jodido

En esta entrada (que probablemente no vea la luz, al menos de momento) voy a ir anotando una serie de ideas relacionadas con el mundo del freelance. Siempre desde una perspectiva de un web developer que trabaja con PHP, WordPress, Prestashop, etc. Esto es, no especializado en tecnologías de nicho, sino en aquellas más comunes, donde existe una competencia mayor.

Lo primero que me gustaría anotar aquí es ¿por qué me estoy planteando ser freelance internacional? Llevo ya unos meses como autónomo porque me han ido llegando una serie de proyectos que me han permitido hacer un pequeño colchón para una nueva etapa en mi vida: me voy a un piso de alquiler con mi novia. Así pues, ahora toca pagar el alquiler todos los meses y por tanto, tienen que entrar proyectos; o, mejor dicho, hay que salir a buscarlos. Y con lo de freelance internacional me refiero a buscar clientes de cualquier lugar del mundo. Teniendo en cuenta cómo está la situación actual en España, algo dentro de mí me dice que es necesario salir fuera a buscar clientes. Aunque no está fácil, nope.

Hay una serie de plataformas donde freelances de todo el mundo pueden buscar trabajos.
Que operen en España, en español, tenemos varios:

http://freelance.infojobs.net
http://adtriboo.com/es/
http://twago.es
http://www.freelancer.com
http://www.trabajofreelance.com
http://nubelo.com


A nivel más internacional, de momento he encontrado los siguientes (iré añadiendo más)

http://odesk.com
https://www.elance.com
http://jobs.freelanceswitch.com
http://www.launchastartup.com
http://jobs.smashingmagazine.com
http://www.project4hire.com

Estas son, pues, algunas de las plataformas que he ido encontrando mientras metía el hocico en el mundo del freelancer internacional. Como pequeña nota aclaratoria, diré que Elance y Freelancer, dos de las plataformas más importantes, son terrenos imposibles para un desarrollador occidental: desarrolladores de la India, Pakistán y otros lugares donde el nivel de vida es más asequible ofrecen su trabajo por precios ridículos. He aquí la globalización. Estamos jodidos :)

A mí, al final, me ha salido un trabajo full time con posibilidades de ser más estable, para una empresa canadiense. Me enviaron una solicitud a través de una bolsa de tele-trabajadores internacionales (http://staff.com). Más adelante contaré mi experiencia, la cual de momento, no puede ser más satisfactoria.

Saludos.

Easy Facebook Like Box Module for Prestashop 1.5 (Free)

I’ve developed a module to integrate easily any Facebook Like Box into our Prestashop ecommerce (version 1.5).
Facebook Like Box Example
Here you have an screenshot of the admin area with the options you can customize (the same ones you can edit at Facebook Developers plus 2 options of visualization)

Prestashop 1.5 Easy Facebook Like Box
You can download and use it for free:
download-button

TEDxAmara: Échale tomate a la canción

Actualización (1 de Julio 2013) Cuelgo aquí el vídeo de la presentación.

Actualización (19 de Junio 2013) Cuelgo aquí la presentación. Próximamente colgaré el vídeo.



“Échale tomate a la canción: la mezcla de conceptos como método creativo.”

Ese es el título que he elegido para la charla que daré en el próximo TEDxAmara, que se celebrará el próximo sábado 15 de Junio.

En la charla, pues, hablaré sobre un método para generar ideas que es muy interesante: unir 2 conceptos que en un principio no tienen por qué guardar relación alguna para generar nuevas ideas, reflexiones, preguntas…

Una vez complete la presentación probablemente desarrolle en mayor profundidad en un post las particularidades de este método (ejemplos, modelo matemático, conceptos VIP, relación con otros métodos creativos) pero de momento simplemente quiero dejar enlazada aquí una herramienta que he desarrollado para practicar el método.

TEDxAmara, mezcla de conceptos: la herramienta

Me hace especial ilusión que haya personas que creen mezclas, así que si quieres lanzarte, te animo a que crees una mezcla con el primer par de conceptos que se generan de manera aleatoria. Cada mezcla es un reto, y al mismo tiempo, una diversión. Espero que te guste.