• Manual de Introducción a Python

    Como parte del taller de Python que dicté en la Universidad Politécnica Salesiana, desarrollé un pequeño manual de Introducción a Python, para se aplicado sobre la Raspberry Pi.

    El manual pueden descargarlo en este enlace

  • Curso Raspberry Pi

    El material para el curso de programación en Python sobre la Raspberry Pi, lo pueden encontrar en esta carpeta

    https://drive.google.com/folderview?id=0B2VwBPSdMFmyeDJKeVJXQU96SjQ&usp=sharing

  • Descarga música grátis, sin morir en el intento

    Antes de continuar, quiero dejar muy claro, que no me hago responsable por el uso (o mal uso) del código presentado en este post. Todo ésto fue desarrollado con un fin puramente académico, sin fines de lucro. Siéntanse libres de usar el código, pero no me responsabilizo de cualquier implicación legal que su uso pudiera acarrear.

    Descargár música sin tener el derecho sobre la misma es ilegal!! Nunca olviden eso.

    Ahora si, sabiendo a lo que vamos, para una de mis asignaturas del master, una de las tareas era explotar un API de algún sitio web (facebook, twitter, linkedin, etc), para extraer información, analizarla y obtener beneficios de la misma: Por ejemplo, y a breves rasgos, pude realizar un análisis del sentimiento de los tweets generados en determinado momento, en paises donde se habla español, que pueden visualizarlo en este enlace.

    Para ir un poco más allá, se me ocurrió la idea de extraer el API de un sitio que no tenga una interfaz de programación documentada. El objetivo: El sitio de música http://music.163.com

    Este sitio (chino) no tiene un API documentada, pero mediante el uso de algunas herramientas web, como FireBug, pudimos obtener las llamadas que se realizan para obtener datos de artistas, discos y canciones.

    Este script está escrito en Python 2.7, y para ejecutarlo basta con descargar el archivo desde este enlace, descomprimirlo, y ejecutar desde la línea de comandos lo siguiente:

    python musica.py
    

    El menú presentará 3 opciones de búsqueda: por autor, por disco o por canción. Bastará con escoger el tipo de búsqueda, seleccionar el item de las posibles opciones encontradas, y descargar el item escogido.

    Espero les sea de utilidad 😀 y recuerden! No descarguen música ilegal!

    Para más información, pueden ingresar a mi repositorio en GitHub

  • ESP8266 + Stellaris Launchpad = IoT

    Dado que para una de mis asignaturas del master realicé una presentación sobre el Hardware que se utiliza en el prototipado de dispositivos para el Internet de las Cosas (IoT), decidí hacer una demostración con hardware real, y mostrar una aplicación práctica con hardware real; así que nada mejor que un ejemplo de hardware, que controlar un led multicolor y leer un sensor de temperatura, desde un navegador web.

    Debido a que estoy algo lejos de mi casa, y no tengo todo el equipo necesario para cualquier trabajo electrónico, tuve que limitar un poco la aplicación práctica, así que buscando el hardware que tenía a la mano, obtuve lo siguiente:

    • ESP8266 para la conectividad WiFi
    • Stellaris Launchpad para usar su LED multicolor y su sensor de temperatura

    Nunca había usado el módulo ESP8266 (tenía un par guardado desde hace algunos meses acá) y ‘esta era la oportunidad perfecta para probarlo, además, hace pocas semanas se hizo el anuncio de que la versión 1.6.2 del IDE de Arduino podía compilar y grabar código en el ESP8266 así que era la oportunidad perfecta para probarlo!

    El módulo ESP8266 puede ser programado usando un convertidor USB-RS232 que funcione a 3.3v, y aquí es donde surgió el primer problema: comprar un convertidor de ese tipo demoraría cerca de 1 mes, así que no era una opción viable. Resulta que probé haciendo un puente serial usando un arduino, pero funcionaba a medias. Tenía conexión de comandos AT con el ESP8266, pero no lo podía flashear….. había que buscar otra opción.

    En ese momento recordé un detalle. El Stellaris Launchpad, en realidad tiene 2 chips. El uno funciona como debugger/interfaz serial, y el otro es el microcontrolador programable, que puede ser desconectado mediante un jumper en la tarjeta; además, tiene los pines Rx y Tx del convertidor desconectados, así que si conectaba ahí el ESP8266 podía ser flasheado. En resumen, se puede usar un launchpad como interfaz serial para programar el ESP8266!

    Solventado el problema de la programación del chip, a echarle mano al código! Dentro del IDE de Arduino, existen algunos ejemplos de uso del ESP8266, que según se comenta en los foros, se programa igual que el Shield WiFi oficial de Arduino. Dadas las limitaciones de la red WiFi de la Universidad, y para el ejemplo, el módulo será configurado de la siguiente manera:

    • Access Point WiFi
    • Red abierta (sin contrasena WEP o WPA)
    • Conexión RS232 con el Stellaris Launchpad
    • Configurado como servidor web
    • 5 comandos disponibles via URL (/led/rojo[verde, azul, off], /status)

    Cada vez que el ESP8266 reciba una petición del navegador, analizará la url, y enviará un comando via puerto serie al Launchpad, para ejecutar a accion seleccionada.

    En el Launchpad, el código es mucho mas simple. Se va a utilizar uno de los puertos UART para recibir comandos desde el ESP8266, y encender el led seleccionado, o apagarlos todos. Además, al recibir el comando equivalente a /status desde el ESP8266, enviará el dato de la temperatura del Launchpad, obtenida desde su sensor interno de temperatura. Cabe recalcar que el Launchpad, fué programado usando el IDE Energía, así que la compatibilidad de código con una tarjeta Arduino está garantizada.

    El resultado? Un led wifi, con sensor de temperatura integrado. Basta con encender el circuito (mediante una batería de móvil, o un cargador de pared), conectarse a la red ESP8266 (que la genera el módulo WiFi), y abrir la url http://192.168.4.1/status para verificar la conecitividad con el módulo.

    Una vez que hemos comprobado la conectividad basta con probar con los comandos para ver como responde. por ejm, si abrimos la url http://192.168.4.1/led/azul, se encenderá el led azul del Stellaris

    Realmente el ESP8266 tiene mucho futuro en proyectos donde se requiera conexión WiFi a cualquier dispositivo electrónico. Además su bajo precio (menos de $5 si se lo compra en ebay) lo convierte en una muy buena opción para este tipo de proyectos.

    El código fuente para el Stellaris, y el ESP8266, puede ser descargado en mi repositorio de GitHub: https://github.com/patolin/esp8266-stellaris-launchpad

  • Mascletá Valenciana

    Según wikipedia, una mascletá (pronunciado en valenciano /maskle’ta/ y, por ello, escrito de manera popular mascletà y normativamente mascletada) es un disparo pirotécnico que conforma una composición muy ruidosa y rítmica que se dispara con motivos festivos en plazas y calles, normalmente durante el día; es típica de la Comunidad Valenciana (España). Recibe su denominación de los masclets (petardos de una gran potencia sonora) ligados mediante una mecha conformando una línea o traca. Éstas suelen sujetarse a mediana altura colgadas con cuerdas o alzados mediante cañones.

    Al contrario que los fuegos artificiales que buscan la estimulación visual, las mascletades (pronunciado en valenciano /maskle’taes/ y, por ello, escrito de manera popular mascletaes) tienen como objetivo estimular el cuerpo a través de los fuertes ruidos rítmicos de los masclets; algunos consideran estos ruidos «musicales», si bien no olvidan la parte visual. Lo que distingue una mascletá de una sucesión de explosiones es el ritmo que deben crear los masclets al explosionar, es fundamental que la fuerza de las explosiones vaya de menos a más, con final apoteósico, sin ello una mascletá no puede considerarse como tal.

    Les dejo el video de la mascletá del 10 de marzo, donde tuve la suerte de estar casi en primera fila. Conecten sus audífonos, suban el audio a tope, y disfruten de las explosiones 😀

    [HTML1]

  • Interfaces Multitouch: Ejemplos en Android y Windows 8

    Como parte de una de las asignaturas que estoy tomando en el master acá en la Politécnica de Valencia, se nos pidió realizar aplicaciones que utilicen la interfaz multitouch de dispositivos android, y con windows 8.

    Para android, se realizó una pequeña aplicación que permite manipular objetos (en este caso cuadrados de colores) dentro de la pantalla. Usando los eventos translate, pinch y rotate, además de un array de objetos cuadrado (donde se almacena la posicion, tamaño y rotación de cada uno de los cuadrados dibujados en pantalla), se obtiene algo como lo que muestro en el video a continuación:

    [HTML1]

    El código fuente de este ejemplo, lo pueden descargar desde https://github.com/patolin/multitouch

    Para windows 8, hice algo un poco más interactivo, y resultó en un pequeño sintetizador de sonido. Mediante la interfaz, se puede escoger entre 3 tipos de onda (sinusoidal, triangular y cuadrada) y sus respectivas envolventes. El video que les muestro a continuación fué grabado en el emulador de tablet de visual studio, ya que lastimosamente no pude grabar video en la prueba final que se hizo sobre una mesa interactiva real

    [HTML2]

    El código fuente de este ejemplo, lo pueden descargar desde https://github.com/patolin/Win8Synth

  • La computación del Siglo 21: De donde viene y hacia donde va?

    Pues si! sigo vivo! jajajaja

    La verdad que no he tenido mucho tiempo para postear desde que me mudé a España para estudiar el master, pero quería aprovechar para compartirles algo de lo que he estado leyendo por acá. Les resumo un par de artículos relacionados con la Computación Ubicua, y los orígenes de toda la tecnología móvil que estamos usando en la actualidad.

    Los orígenes de la computación Ubicua: Xerox Parc a finales de los 80s

    En 1987, Bod Sprague, Richard Bruce y otros investigadores del Xerox PARC, hicieron la propuesta de fabricar un display del tamaño de una pared, con la idea de que dicho display funcionara también como dispositivo de entrada (para dibujar con lápiz) o incluso como scanner de documentos (que se escanerían al acercarlos al display). Este tipo de display, haría más transparente el uso de pizarrones, extendiendo su poder computacional al usarlo con otros dispositivos externos, conectados en red.

    Esta visión de los “computer-walls” fué inspirada desde el modelo actual de computación, donde existía el paradigma de una persona por computador, y motivó a los investigadores a distribuir computadores de una manera ubicua e invisible, distribuidos en el entorno.

    Al mismo tiempo, otro grupo de investigadores, del grupo “Work Practices and technology “ dentro del PARC, observaban cómo las personas usaban la tecnología, pero no se enfocaban en el hardware, sino en los detalles situacionales del uso; particularmente el cómo el hardware se incrustaba dentro de las actividades sociales diarias de los individuos, y cómo interactuaba con el medio físico, conocido como “el mundo real”.

    A partir de la convergencia de estas investigaciones, a inicios de 1998 se creó el “Ubiquotous Computing Program”, que se encargaría de dar respuesta a lo que se consideraba como erróneo en el modelo de computación actual: demasiado complejo, que requería demasiada atención por parte del usuario, y demasiado aislado del mundo real.

    En el año de 1992, fué cuando se presentó el primer sistema ”Ubi-comp”, que redefiniendo para el futuro la relación entre humanos, trabajo y tecnología, y la tecnología para la era post-PC.

    A finales de 1988, se iniciaron 3 proyectos dentro del Ubiquitous Computing Program en el PARC: un display del tamaño de una pared, conocido como LiveBoard, el ParcPad, y el ParcTab, que eran dispositivos de computación pequeños, financiados por DARPA. Estos 3 proyectos se planeaban interconectar, mediante una infraestructura de red flexible, que no sólo reconocería el dispositivo, sino su localización, tendencias de uso, y propietario de cada uno. Esto crearía un nuevo concepto de lo que los computadores deberían ser y cómo deberían sentirse. En el año de 1994, se logró obtener la funcionalidad necesaria para que estos dispositivos pudieran usarse a diario en el PARC.

    El LiveBoard incluía un sistema de dibujo colaborativo, capacidad de dibujo remoto, interfaces casuales y sistemas de anotación de primera clase, y se vendieron algunos cientos de unidades (mediante la subsidiaria de Xerox LiveWorks) antes de que el proyecto se cerrara en 1998.


    Mientras que el LiveBoard se conectaba a las redes de datos de una manera tradicional, el ParcPad mantenía conexión constante a la red mediante un sistema “Near Field Radio” designado por Ed Richley. El pad estaba diseñado para ser usado mediante una interfaz de ventanas y lápiz, donde el hardware y el sistema operativo fueron diseñados por varios investigadores del PARC. El pad probó ser una plataforma importante para pruebas de conexiones por radiofrecuencia, protocolos, redes móviles e interfaces de usuario, y hasta la fecha de publicación del documento (1999), se seguian utilizando ParcPads en el PARC. Además el ParcPad es el precursor del Personal Document Reader, lanzado por Xerox en el año 2000.


    El ParcTab, fué ideado para ser utilizado con una sola mano, y se integre con aplicaciones en las estaciones de trabajo, mediante una red de comunicación por señales infrarojas, basada en agentes y sensible a la localización. El Tab tenía utilidades de trabajo en tiempo real, que incluían correo electrónico, calendario, notas, libreta de direcciónes, pager, entre otras. Además, incluía conectividad con el LiveBoard y la famosa cafetera CSL del PARC. El ingreso de información se realizaba mediante el sistema alfanumérico Unistroke ubicado en la pantalla táctil, y por 3 botones ubicados ergonómicamente en el Tab.


     

    El computador del siglo 21

    Los computadores, a pesar de haber crecido en número en la actualidad, no han podido escapar de su forma tradicional de uso, manteniendo en una u otra manera, el modelo de interacción con el usuario.

    El concepto de “Computación Ubicua” no se refiere a que podamos llevar un computador a todas partes, ni que tengamos conectividad a redes en todo momento, ya que por ejemplo, podríamos tener un computador portátil, con conexión a internet en todas partes, pero siempre estaremos supeditados a que debemos centrar nuestra atención en dicho computador para usarlo.

    Una analogía interesante, del cómo la tecnología se desvanece en el entorno, son los motores que se usan dentro de las fabricas. A inicios de la revolución industrial, era un solo motor el que se encargaba de mover múltiples máquinas mediante ejes y poleas. En la actualidad, son varios motores los que se encargan de dar movimiento a cada una de las máquinas de las fabricas. Con este ejemplo vemos que los motores como tal, se integran tanto al entorno de la fabrica que su presencia pasa prácticamente desapercibida.

    De la misma manera, y sin que nos demos cuenta, los computadores invaden nuestro entorno. Además de nuestros “típicos” equipos de computación (llámense computadores de escritorio/portátiles y teléfonos celulares), interruptores, termostatos, televisores, refrigeradoras y lavadoras inteligentes, por poner unos ejemplos, nos dan la idea de hacia donde vamos. Todos estos dispositivos interconectados, pueden compartir información con los usuarios y entre ellos. Incluso muchos de estos dispositivos conocen su ubicación en el entorno, y cómo reaccionar ante cambios del mismo.

    Estamos llegando a un punto donde sin notarlo, podemos tener decenas o centenas de computadores en un solo salón. Tomando como ejemplo los Tabs desarrollados en el PARC a finales de los 90, pudieron aplicarlos creando una identificación digital activa, que permitía llevar un registro de la ubicación de su poseedor, pudiendo brindar aplicaciones como la apertura automática de puertas de acceso según el nivel de autorización, saludar a los investigadores por su nombre después de reconocer su id, e incluso, las estaciones de trabajo que ellos usaban, podían detectar su identificación, y recuperar sus preferencias de uso, notificaciones de alertas y notas que ellos escribían, para brindar una experiencia más personalizada, independiente del computador que utilizaran. Ojo que no se ha usado ningún sistema de inteligencia artificial, sino únicamente pequeños computadores interactuando con el entorno.

    Ideas como la de las tabletas electrónicas, cuya función es la de ser “cuadernos electrónicos” que pueden ser llevados a cualquier parte, y usados por cualquiera, independientemente de sus preferencias y configuración, contradicen el esquema clásico de un computador por usuario. Estas tabletas, pueden incluso ser interconectadas para compartir información cuando se las coloca en un escritorio, de la misma manera que en una mesa se colocan hojas de papel para revisar información impresa.
    Todo este tipo de hardware y aplicaciones nos lleva a la necesidad de nuevas implementaciones de software. En el caso de los LiveBoards, no se puede implementar un modelo de uso que requiera un teclado o un ratón para interactuar con la misma, más aún, cuando existe la posibilidad de uso mediante un lápiz.

    Para la computación ubicua, existen 3 tecnologías que deben ser desarrolladas: Computadores de bajo costo y bajo consumo, que incluyan dispositivo de visualización de información, el software para la interacción con los usuarios y el entorno, y la red que los interconecte a todos. En la actualidad, estamos alcanzando estos 3 objetivos tecnológicos, de tal manera que los dispositivos interconectados están ganando popularidad con los usuarios.

    Desde los inicios en la investigación de la computación ubicua, hasta la actualidad, no se ha producido ningún avance excesivamente revolucionario, sino más bien, las tecnologías se dirigirán hacia un punto donde todo se lleve a cabo más rápido, con menos esfuerzo mental y con menos restricciones físicas. Lo más importante de la computación ubicua, será el reducir el problema de la sobrecarga de información hacia el usuario. A esto, la cita “There is more information available at our fingertips during a walk in the woods than in any computer system, yet people find a walk among trees relaxing, and computers frustrating” resume el objetivo de la computación ubicua, es decir, no forzar a los humanos a acoplarse a los computadores, sino que los usuarios, al usar los computadores, lo encuentren tan placentero como una caminata en el bosque.

  • Problemas de espacio de almacenamiento en Linux, como encontrarlos

    Quizás algunos de ustedes se hayan encontrado con este «pequeño» problema:

    linux1

    Pues si, inesperadamente, y por causas no planificadas, se llenó el espacio de almacenamiento de nuestro servidor Linux. Ahora la pregunta es: Cómo sabemos que archivos o carpetas son los causantes?

    Para esto, podemos usar el siguiente comando desde el terminal

    sudo du -sx /* 2>/dev/null | sort -n
    

    Este comando revisará el uso de espacio de cada carpeta (en este caso de la raiz /) y nos irá indicando que carpeta tiene el mayor uso de espacio en nuestro disco duro. Así, navegando por las subcarpetas, podremos ver que archivos son los que se han comido nuestro almacenamiento, y sabremos que medidas tomar.

    linux2

  • Carga elevada de CPU con MySQL

    Quizás la mayoría de ustedes no hayan tenido este problema, pero en el servidor web de mi trabajo, tenía una elevada carga (60/70%) de cpu al proceso mysqld. No es un sitio con tráfico elevado (unas 300 visitas diarias), y tiene ram y disco suficiente para aguantar eso y más, y muchas veces esta carga elevada, ralentizaba la carga de la página web.

    Resulta que el problema estaba en la falta de optimización periódica de las tablas. Para solucionar esto, ejecutamos el siguiente comando:

    mysqlcheck -u usuario_mysql -p --auto-repair --check --optimize --all-databases
    

    Y listo! asunto arreglado. El proceso mysqld volvió a la normalidad, y el servidor volvió a ser el de antes

  • Paginador para custom post types en wordpress > quick fix!

    Quizás se hayan topado con el problemita del paginador, al trabajar con custom types en wordpress. Simplemente el paginador no aparece.

    Les dejo este código para arreglar esto. El truco es temporalmente mover la variable $wp_query a un temporal, y cargar $wp_query con el query del custom post type

     

    < ?php
    $temp = $wp_query;
    $wp_query = null;
    $wp_query = new WP_Query();
    $wp_query->query('post_type=custom_post_type' . '&paged=' . $paged . '&posts_per_page=10');
    ?>
    < ?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    
     
    
    < ?php endwhile; ?>
    < ?php previous_posts_link(); ?>
    < ?php next_posts_link(); ?>
    < ?php $wp_query = null; $wp_query = $temp; ?>
    

    Al final, volvemos la variable $wp_query a su lugar, y listo!